ref: d6163f9976c8d71513e7cc3896ad7c65e0cfb82f
parent: 2520b86965c5b2462fbc0f1ab158c4058d0fb330
author: Simon Tatham <[email protected]>
date: Thu Aug 25 14:14:54 EDT 2005
Memory leak and type safety fixes from James H. [originally from svn r6219]
--- a/loopy.c
+++ b/loopy.c
@@ -227,15 +227,18 @@
sfree(sstate->dot_atleastone);
sfree(sstate->dot_atmostone);
/* sfree(sstate->dline_identical); */
+ sfree(sstate->dotdsf);
+ sfree(sstate->looplen);
+ sfree(sstate);
}
}
static solver_state *dup_solver_state(solver_state *sstate) {
- game_state *state = dup_game(sstate->state);
+ game_state *state;
solver_state *ret = snew(solver_state);
- ret->state = dup_game(state);
+ ret->state = state = dup_game(sstate->state);
ret->dot_atmostone = snewn(DOT_COUNT(state), char);
memcpy(ret->dot_atmostone, sstate->dot_atmostone, DOT_COUNT(state));
@@ -811,6 +814,7 @@
}
}
}
+ sfree(square);
/* printf("\n\n"); */
}
@@ -883,6 +887,7 @@
ret = saved_ret;
}
}
+ sfree(square_list);
return ret;
}
@@ -927,23 +932,23 @@
for (i = 0; i < params->w; ++i) {
if (CLUE_AT(state, i, j) == ' ') {
if (empty_count > 25) {
- dp += sprintf(dp, "%c", empty_count + 'a' - 1);
+ dp += sprintf(dp, "%c", (int)(empty_count + 'a' - 1));
empty_count = 0;
}
empty_count++;
} else {
if (empty_count) {
- dp += sprintf(dp, "%c", empty_count + 'a' - 1);
+ dp += sprintf(dp, "%c", (int)(empty_count + 'a' - 1));
empty_count = 0;
}
- dp += sprintf(dp, "%c", CLUE_AT(state, i, j));
+ dp += sprintf(dp, "%c", (int)(CLUE_AT(state, i, j)));
}
}
}
if (empty_count)
- dp += sprintf(dp, "%c", empty_count + 'a' - 1);
+ dp += sprintf(dp, "%c", (int)(empty_count + 'a' - 1));
- sfree(state);
+ free_game(state);
retval = dupstr(description);
sfree(description);
@@ -1162,7 +1167,7 @@
/* Sums the lengths of the numbers in range [0,n) */
/* See equivalent function in solo.c for justification of this. */
-int len_0_to_n(int n)
+static int len_0_to_n(int n)
{
int len = 1; /* Counting 0 as a bit of a special case */
int i;
@@ -1236,7 +1241,7 @@
/* No point in doing sums like that if they're going to be wrong */
assert(strlen(ret) <= (size_t)len);
- return dupstr(ret);
+ return ret;
}
/* BEGIN SOLVER IMPLEMENTATION */
@@ -2021,7 +2026,7 @@
rp += sprintf(rp, " \n");
for (i = 0; i < state->w; ++i) {
DRAW_VL;
- rp += sprintf(rp, "%c", CLUE_AT(state, i, j));
+ rp += sprintf(rp, "%c", (int)(CLUE_AT(state, i, j)));
}
DRAW_VL;
rp += sprintf(rp, "\n");
@@ -2160,7 +2165,7 @@
}
- sprintf(buf, "%d,%d%c%c", i, j, hl_selected ? 'h' : 'v', button_char);
+ sprintf(buf, "%d,%d%c%c", i, j, (int)(hl_selected ? 'h' : 'v'), (int)button_char);
ret = dupstr(buf);
return ret;
--- a/windows.c
+++ b/windows.c
@@ -1115,6 +1115,7 @@
fe->brushes[i] = CreateSolidBrush(fe->colours[i]);
fe->pens[i] = CreatePen(PS_SOLID, 1, fe->colours[i]);
}
+ sfree(colours);
}
x = y = INT_MAX; /* find puzzle's preferred size */