nissy-classic

Stable branch of nissy
git clone https://git.tronto.net/nissy-classic
Download | Log | Files | Refs | README | LICENSE

commit 679fac1f8be87ccb431d1ce981e98bdbfbd61dd8
parent 3bc44cb7ee1f27d1e0183b82be6ba6b9c05e837c
Author: Sebastiano Tronto <sebastiano.tronto@gmail.com>
Date:   Thu, 25 Nov 2021 20:28:52 +0100

Fixed a bug in freeing memory after execution of certain commands (thanks to Tommaso for reporting)

Diffstat:
Msrc/commands.c | 38++++++++++++++++++++++----------------
Msrc/commands.h | 1+
2 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/src/commands.c b/src/commands.c @@ -105,13 +105,7 @@ solve_parse_args(int c, char **v) int i; long val; - CommandArgs *a = malloc(sizeof(CommandArgs)); - - a->success = false; - a->opts = malloc(sizeof(SolveOptions)); - a->step = steps[0]; - a->command = NULL; - a->scramble = NULL; + CommandArgs *a = new_args(); a->opts->min_moves = 0; a->opts->max_moves = 20; @@ -182,12 +176,7 @@ CommandArgs * help_parse_args(int c, char **v) { int i; - CommandArgs *a = malloc(sizeof(CommandArgs)); - - a->scramble = NULL; - a->opts = NULL; - a->step = NULL; - a->command = NULL; + CommandArgs *a = new_args(); if (c == 1) { for (i = 0; i < NCOMMANDS; i++) @@ -205,9 +194,9 @@ help_parse_args(int c, char **v) CommandArgs * parse_no_arg(int c, char **v) { - CommandArgs *a = malloc(sizeof(CommandArgs)); + CommandArgs *a = new_args(); - a->success = true; + a->success = true; return a; } @@ -215,9 +204,10 @@ parse_no_arg(int c, char **v) CommandArgs * print_parse_args(int c, char **v) { - CommandArgs *a = malloc(sizeof(CommandArgs)); + CommandArgs *a = new_args(); a->success = read_scramble(c, v, a); + return a; } @@ -364,3 +354,19 @@ free_args(CommandArgs *args) free(args); } + +CommandArgs * +new_args() +{ + CommandArgs *args = malloc(sizeof(CommandArgs)); + + args->success = false; + args->scramble = NULL; /* initialized in read_scramble */ + args->opts = malloc(sizeof(SolveOptions)); + + /* step and command are static */ + args->step = NULL; + args->command = NULL; + + return args; +} diff --git a/src/commands.h b/src/commands.h @@ -7,6 +7,7 @@ #define NCOMMANDS 10 void free_args(CommandArgs *args); +CommandArgs * new_args(); extern Command * commands[NCOMMANDS];