~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Environment-based configuration wasn't sensibly usable in games with
[sgt/puzzles]
/
slant.c
diff --git
a/slant.c
b/slant.c
index
bfd039e
..
1310018
100644
(file)
--- a/
slant.c
+++ b/
slant.c
@@
-198,7
+198,7
@@
struct solver_scratch {
int *dsf;
};
int *dsf;
};
-struct solver_scratch *new_scratch(int w, int h)
+st
atic st
ruct solver_scratch *new_scratch(int w, int h)
{
int W = w+1, H = h+1;
struct solver_scratch *ret = snew(struct solver_scratch);
{
int W = w+1, H = h+1;
struct solver_scratch *ret = snew(struct solver_scratch);
@@
-206,7
+206,7
@@
struct solver_scratch *new_scratch(int w, int h)
return ret;
}
return ret;
}
-void free_scratch(struct solver_scratch *sc)
+
static
void free_scratch(struct solver_scratch *sc)
{
sfree(sc->dsf);
sfree(sc);
{
sfree(sc->dsf);
sfree(sc);
@@
-629,6
+629,13
@@
static game_state *dup_game(game_state *state)
static void free_game(game_state *state)
{
static void free_game(game_state *state)
{
+ sfree(state->soln);
+ assert(state->clues);
+ if (--state->clues->refcount <= 0) {
+ sfree(state->clues->clues);
+ sfree(state->clues->dsf);
+ sfree(state->clues);
+ }
sfree(state);
}
sfree(state);
}
@@
-727,9
+734,10
@@
static char *solve_game(game_state *state, game_state *currstate,
if (ret != 1) {
sfree(soln);
if (ret == 0)
if (ret != 1) {
sfree(soln);
if (ret == 0)
-
return
"This puzzle is not self-consistent";
+
*error =
"This puzzle is not self-consistent";
else
else
- return "Unable to find a unique solution for this puzzle";
+ *error = "Unable to find a unique solution for this puzzle";
+ return NULL;
}
free_soln = TRUE;
}
}
free_soln = TRUE;
}
@@
-747,7
+755,7
@@
static char *solve_game(game_state *state, game_state *currstate,
for (x = 0; x < w; x++) {
int v = (soln[y*w+x] == bs ? -1 : +1);
if (state->soln[y*w+x] != v) {
for (x = 0; x < w; x++) {
int v = (soln[y*w+x] == bs ? -1 : +1);
if (state->soln[y*w+x] != v) {
- int len = sprintf(buf, ";%c%d,%d",
v < 0 ? '\\' : '/'
, x, y);
+ int len = sprintf(buf, ";%c%d,%d",
(int)(v < 0 ? '\\' : '/')
, x, y);
if (movelen + len >= movesize) {
movesize = movelen + len + 256;
move = sresize(move, movesize, char);
if (movelen + len >= movesize) {
movesize = movelen + len + 256;
move = sresize(move, movesize, char);
@@
-894,7
+902,7
@@
static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
v = -1;
}
v = -1;
}
- sprintf(buf, "%c%d,%d",
v==-1 ? '\\' : v==+1 ? '/' : 'C'
, x, y);
+ sprintf(buf, "%c%d,%d",
(int)(v==-1 ? '\\' : v==+1 ? '/' : 'C')
, x, y);
return dupstr(buf);
}
return dupstr(buf);
}
@@
-996,6
+1004,7
@@
static game_drawstate *game_new_drawstate(game_state *state)
static void game_free_drawstate(game_drawstate *ds)
{
static void game_free_drawstate(game_drawstate *ds)
{
+ sfree(ds->todraw);
sfree(ds->grid);
sfree(ds);
}
sfree(ds->grid);
sfree(ds);
}