diff --git a/palisade.c b/palisade.c index a82a8c1..58619bf 100644 --- a/palisade.c +++ b/palisade.c @@ -46,7 +46,7 @@ struct game_params { int w, h, k; }; -typedef char clue; +typedef signed char clue; typedef unsigned char borderflag; typedef struct shared_state { @@ -622,7 +622,7 @@ static char *new_game_desc(const game_params *params, random_state *rs, { int w = params->w, h = params->h, wh = w*h, k = params->k; - clue *numbers = snewn(wh + 1, clue), *p; + clue *numbers = snewn(wh + 1, clue); borderflag *rim = snewn(wh, borderflag); borderflag *scratch_borders = snewn(wh, borderflag); @@ -682,7 +682,8 @@ static char *new_game_desc(const game_params *params, random_state *rs, sfree(shuf); sfree(dsf); - p = numbers; + char *output = snewn(wh + 1, char), *p = output; + r = 0; for (i = 0; i < wh; ++i) { if (numbers[i] != EMPTY) { @@ -699,7 +700,8 @@ static char *new_game_desc(const game_params *params, random_state *rs, } *p++ = '\0'; - return sresize(numbers, p - numbers, clue); + sfree(numbers); + return sresize(output, p - output, char); } static const char *validate_desc(const game_params *params, const char *desc)