Miscellaneous fixes from James Harvey's PalmOS porting work:

- fixed numerous memory leaks (not Palm-specific)
 - corrected a couple of 32-bit-int assumptions (vital for Palm but
   generally a good thing anyway)
 - lifted a few function pointer types into explicit typedefs
   (neutral for me but convenient for the source-munging Perl
   scripts he uses to deal with Palm code segment rules)
 - lifted a few function-level static arrays into global static
   arrays (neutral for me but apparently works round a Palm tools
   bug)
 - a couple more presets in Rectangles (so that Palm, or any other
   slow platform which can't handle the larger sizes easily, can
   still have some variety available)
 - in Solo, arranged a means of sharing scratch space between calls
   to nsolve to prevent a lot of redundant malloc/frees (gives a 10%
   speed increase even on existing platforms)

[originally from svn r5897]
This commit is contained in:
Simon Tatham
2005-06-01 17:47:56 +00:00
parent ad3abd9867
commit 50edaa578b
15 changed files with 237 additions and 174 deletions

12
cube.c
View File

@ -300,10 +300,9 @@ static char *encode_params(game_params *params, int full)
return dupstr(data);
}
typedef void (*egc_callback)(void *, struct grid_square *);
static void enum_grid_squares(game_params *params,
void (*callback)(void *, struct grid_square *),
void *ctx)
static void enum_grid_squares(game_params *params, egc_callback callback, void *ctx)
{
const struct solid *solid = solids[params->solid];
@ -979,6 +978,8 @@ static game_state *dup_game(game_state *state)
static void free_game(game_state *state)
{
sfree(state->squares);
sfree(state->facecolours);
sfree(state);
}
@ -1233,6 +1234,7 @@ static game_state *make_move(game_state *from, game_ui *ui, game_drawstate *ds,
success = align_poly(poly, &from->squares[ret->current], all_pkey);
if (!success) {
sfree(poly);
angle = -angle;
poly = transform_poly(from->solid,
from->squares[from->current].flip,
@ -1572,8 +1574,8 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
}
sfree(poly);
draw_update(fe, 0, 0, (int)((bb.r-bb.l+2.0F) * GRID_SCALE),
(int)((bb.d-bb.u+2.0F) * GRID_SCALE));
game_size(&state->params, &i, &j);
draw_update(fe, 0, 0, i, j);
/*
* Update the status bar.