From a58c1b216bb1d4547f7b2ef2703fe2d0cd3b5cac Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Sun, 1 Oct 2017 14:45:12 +0100 Subject: [PATCH] Make the code base clean under -Wwrite-strings. I've also added that warning option and -Werror to the build script, so that I'll find out if I break this property in future. --- Buildscr | 10 +++++----- blackbox.c | 2 +- cube.c | 2 +- devel.but | 3 +-- dominosa.c | 2 +- emcc.c | 2 +- fifteen.c | 2 +- filling.c | 2 +- galaxies.c | 9 +++++---- grid.c | 15 ++++++++------- grid.h | 4 ++-- gtk.c | 10 +++++----- guess.c | 8 +++++--- inertia.c | 3 ++- keen.c | 4 ++-- latin.c | 8 ++++---- latin.h | 4 ++-- loopy.c | 5 +++-- map.c | 15 ++++++++------- midend.c | 19 ++++++++++--------- mines.c | 2 +- osx.m | 2 +- ps.c | 4 ++-- puzzles.h | 2 +- range.c | 2 +- samegame.c | 3 ++- signpost.c | 7 ++++--- singles.c | 6 +++--- sixteen.c | 3 +-- slant.c | 4 ++-- solo.c | 24 +++++++++++++----------- tents.c | 3 ++- twiddle.c | 4 ++-- unequal.c | 6 +++--- windows.c | 2 +- 35 files changed, 107 insertions(+), 96 deletions(-) diff --git a/Buildscr b/Buildscr index b8a585b..4a54d27 100644 --- a/Buildscr +++ b/Buildscr @@ -25,7 +25,7 @@ in puzzles do echo '$#define VER "Version $(Version)"' >> version.h in puzzles do perl -i -pe 's/Unidentified build/$(Version)/' osx-info.plist # First build some local binaries, to run the icon build. -in puzzles do perl mkfiles.pl -U +in puzzles do perl mkfiles.pl -U CFLAGS='-Wwrite-strings -Werror' in puzzles do make # Now build the screenshots and icons. @@ -45,7 +45,7 @@ in puzzles do ./mkauto.sh # Build the OS X .dmg archive. delegate osx in puzzles do make -f Makefile.osx clean - in puzzles do make -f Makefile.osx release VER=-DVER=$(Version) + in puzzles do make -f Makefile.osx release VER=-DVER=$(Version) XFLAGS='-Wwrite-strings -Werror' return puzzles/Puzzles.dmg enddelegate @@ -56,7 +56,7 @@ in puzzles do mason.pl --args '{"version":"$(Version)","descfile":"gamedesc.txt" in puzzles do perl winiss.pl $(Version) gamedesc.txt > puzzles.iss ifneq "$(VISUAL_STUDIO)" "yes" then in puzzles with clangcl64 do Platform=x64 make -f Makefile.clangcl clean - in puzzles with clangcl64 do Platform=x64 make -f Makefile.clangcl VER=-DVER=$(Version) + in puzzles with clangcl64 do Platform=x64 make -f Makefile.clangcl VER=-DVER=$(Version) XFLAGS='-Wwrite-strings -Werror' # Code-sign the binaries, if the local bob config provides a script # to do so. We assume here that the script accepts an -i option to # provide a 'more info' URL, and an optional -n option to provide a @@ -144,7 +144,7 @@ ifneq "$(JAVA_UNFINISHED)" "" in puzzles do perl mkfiles.pl # Build the Java applets. delegate nestedvm - in puzzles do make -f Makefile.nestedvm NESTEDVM="$$NESTEDVM" VER=-DVER=$(Version) + in puzzles do make -f Makefile.nestedvm NESTEDVM="$$NESTEDVM" VER=-DVER=$(Version) XFLAGS="-Wwrite-strings -Werror" return puzzles/*.jar enddelegate @@ -154,7 +154,7 @@ enddelegate in puzzles do mkdir js # so we can tell output .js files from emcc*.js delegate emscripten in puzzles do make -f Makefile.emcc OUTPREFIX=js/ clean - in puzzles do make -f Makefile.emcc OUTPREFIX=js/ + in puzzles do make -f Makefile.emcc OUTPREFIX=js/ XFLAGS="-Wwrite-strings -Werror" return puzzles/js/*.js enddelegate diff --git a/blackbox.c b/blackbox.c index 829aaec..d92af92 100644 --- a/blackbox.c +++ b/blackbox.c @@ -251,7 +251,7 @@ static const char *validate_desc(const game_params *params, const char *desc) { int nballs, dlen = strlen(desc), i; unsigned char *bmp; - char *ret; + const char *ret; /* the bitmap is 2+(nballs*2) long; the hex version is double that. */ nballs = ((dlen/2)-2)/2; diff --git a/cube.c b/cube.c index f09f63d..2a79a81 100644 --- a/cube.c +++ b/cube.c @@ -238,7 +238,7 @@ static game_params *default_params(void) static int game_fetch_preset(int i, char **name, game_params **params) { game_params *ret = snew(game_params); - char *str; + const char *str; switch (i) { case 0: diff --git a/devel.but b/devel.but index af69202..131678c 100644 --- a/devel.but +++ b/devel.but @@ -3296,8 +3296,7 @@ visually activate and deactivate a redo button. \H{midend-serialise} \cw{midend_serialise()} \c void midend_serialise(midend *me, -\c void (*write)(void *ctx, void *buf, int len), -\c void *wctx); +\c void (*write)(void *ctx, const void *buf, int len), void *wctx); Calling this function causes the mid-end to convert its entire internal state into a long ASCII text string, and to pass that diff --git a/dominosa.c b/dominosa.c index 14d854f..a072ac6 100644 --- a/dominosa.c +++ b/dominosa.c @@ -749,7 +749,7 @@ static const char *validate_desc(const game_params *params, const char *desc) int n = params->n, w = n+2, h = n+1, wh = w*h; int *occurrences; int i, j; - char *ret; + const char *ret; ret = NULL; occurrences = snewn(n+1, int); diff --git a/emcc.c b/emcc.c index dbb4ab9..563fbe2 100644 --- a/emcc.c +++ b/emcc.c @@ -787,7 +787,7 @@ struct savefile_write_ctx { size_t pos; }; -static void savefile_write(void *vctx, void *buf, int len) +static void savefile_write(void *vctx, const void *buf, int len) { struct savefile_write_ctx *ctx = (struct savefile_write_ctx *)vctx; if (ctx->buffer) diff --git a/fifteen.c b/fifteen.c index 9c83756..f749e96 100644 --- a/fifteen.c +++ b/fifteen.c @@ -273,7 +273,7 @@ static char *new_game_desc(const game_params *params, random_state *rs, static const char *validate_desc(const game_params *params, const char *desc) { const char *p; - char *err; + const char *err; int i, area; int *used; diff --git a/filling.c b/filling.c index 6f775f4..7e71eb2 100644 --- a/filling.c +++ b/filling.c @@ -68,7 +68,7 @@ static unsigned char verbose; -static void printv(char *fmt, ...) { +static void printv(const char *fmt, ...) { #ifndef PALM if (verbose) { va_list va; diff --git a/galaxies.c b/galaxies.c index d10fc5d..5d7dbdf 100644 --- a/galaxies.c +++ b/galaxies.c @@ -667,7 +667,8 @@ static char *diff_game(const game_state *src, const game_state *dest, int issolve) { int movelen = 0, movesize = 256, x, y, len; - char *move = snewn(movesize, char), buf[80], *sep = ""; + char *move = snewn(movesize, char), buf[80]; + const char *sep = ""; char achar = issolve ? 'a' : 'A'; space *sps, *spd; @@ -1523,10 +1524,10 @@ static int dots_too_close(game_state *state) } static game_state *load_game(const game_params *params, const char *desc, - char **why_r) + const char **why_r) { game_state *state = blank_game(params->w, params->h); - char *why = NULL; + const char *why = NULL; int i, x, y, n; unsigned int df; @@ -1572,7 +1573,7 @@ fail: static const char *validate_desc(const game_params *params, const char *desc) { - char *why = NULL; + const char *why = NULL; game_state *dummy = load_game(params, desc, &why); if (dummy) { free_game(dummy); diff --git a/grid.c b/grid.c index 4929b5c..52648e5 100644 --- a/grid.c +++ b/grid.c @@ -1529,8 +1529,8 @@ static void grid_size_triangular(int width, int height, *yextent = height * vec_y; } -static char *grid_validate_desc_triangular(grid_type type, int width, - int height, const char *desc) +static const char *grid_validate_desc_triangular(grid_type type, int width, + int height, const char *desc) { /* * Triangular grids: an absent description is valid (indicating @@ -2855,8 +2855,9 @@ static char *grid_new_desc_penrose(grid_type type, int width, int height, random return dupstr(gd); } -static char *grid_validate_desc_penrose(grid_type type, int width, int height, - const char *desc) +static const char *grid_validate_desc_penrose(grid_type type, + int width, int height, + const char *desc) { int tilesize = PENROSE_TILESIZE, startsz, depth, xoff, yoff, aoff, inner_radius; double outer_radius; @@ -3032,8 +3033,8 @@ char *grid_new_desc(grid_type type, int width, int height, random_state *rs) } } -char *grid_validate_desc(grid_type type, int width, int height, - const char *desc) +const char *grid_validate_desc(grid_type type, int width, int height, + const char *desc) { if (type == GRID_PENROSE_P2 || type == GRID_PENROSE_P3) { return grid_validate_desc_penrose(type, width, height, desc); @@ -3048,7 +3049,7 @@ char *grid_validate_desc(grid_type type, int width, int height, grid *grid_new(grid_type type, int width, int height, const char *desc) { - char *err = grid_validate_desc(type, width, height, desc); + const char *err = grid_validate_desc(type, width, height, desc); if (err) assert(!"Invalid grid description."); return grid_news[type](width, height, desc); diff --git a/grid.h b/grid.h index fb8ac48..19079a4 100644 --- a/grid.h +++ b/grid.h @@ -116,8 +116,8 @@ typedef enum grid_type { GRIDGEN_LIST(ENUM) GRID_TYPE_MAX } grid_type; /* Free directly after use if non-NULL. Will never contain an underscore * (so clients can safely use that as a separator). */ char *grid_new_desc(grid_type type, int width, int height, random_state *rs); -char *grid_validate_desc(grid_type type, int width, int height, - const char *desc); +const char *grid_validate_desc(grid_type type, int width, int height, + const char *desc); grid *grid_new(grid_type type, int width, int height, const char *desc); diff --git a/gtk.c b/gtk.c index 089143c..37ba807 100644 --- a/gtk.c +++ b/gtk.c @@ -2168,7 +2168,7 @@ static void filesel_ok(GtkButton *button, gpointer data) fe->filesel_name = dupstr(name); } -static char *file_selector(frontend *fe, char *title, int save) +static char *file_selector(frontend *fe, const char *title, int save) { GtkWidget *filesel = gtk_file_selection_new(title); @@ -2199,7 +2199,7 @@ static char *file_selector(frontend *fe, char *title, int save) #else -static char *file_selector(frontend *fe, char *title, int save) +static char *file_selector(frontend *fe, const char *title, int save) { char *filesel_name = NULL; @@ -2231,7 +2231,7 @@ struct savefile_write_ctx { int error; }; -static void savefile_write(void *wctx, void *buf, int len) +static void savefile_write(void *wctx, const void *buf, int len) { struct savefile_write_ctx *ctx = (struct savefile_write_ctx *)wctx; if (fwrite(buf, 1, len, ctx->fp) < len) @@ -2396,7 +2396,7 @@ static void menu_about_event(GtkMenuItem *menuitem, gpointer data) } static GtkWidget *add_menu_ui_item( - frontend *fe, GtkContainer *cont, char *text, int action, + frontend *fe, GtkContainer *cont, const char *text, int action, int accel_key, int accel_keyqual) { GtkWidget *menuitem = gtk_menu_item_new_with_label(text); @@ -2928,7 +2928,7 @@ int main(int argc, char **argv) int soln = FALSE, colour = FALSE; float scale = 1.0F; float redo_proportion = 0.0F; - char *savefile = NULL, *savesuffix = NULL; + const char *savefile = NULL, *savesuffix = NULL; char *arg = NULL; int argtype = ARG_EITHER; char *screenshot_file = NULL; diff --git a/guess.c b/guess.c index 14e2d90..a14f3bd 100644 --- a/guess.c +++ b/guess.c @@ -74,7 +74,7 @@ static game_params *dup_params(const game_params *params) } static const struct { - char *name; + const char *name; game_params params; } guess_presets[] = { {"Standard", {6, 4, 10, FALSE, TRUE}}, @@ -440,7 +440,8 @@ static void free_ui(game_ui *ui) static char *encode_ui(const game_ui *ui) { - char *ret, *p, *sep; + char *ret, *p; + const char *sep; int i; /* @@ -614,7 +615,8 @@ static int mark_pegs(pegrow guess, const pegrow solution, int ncols) static char *encode_move(const game_state *from, game_ui *ui) { - char *buf, *p, *sep; + char *buf, *p; + const char *sep; int len, i; len = ui->curr_pegs->npegs * 20 + 2; diff --git a/inertia.c b/inertia.c index 6c64fc0..ad58bd2 100644 --- a/inertia.c +++ b/inertia.c @@ -738,7 +738,8 @@ static char *solve_game(const game_state *state, const game_state *currstate, int *unvisited; int circuitlen, circuitsize; int head, tail, pass, i, j, n, x, y, d, dd; - char *err, *soln, *p; + const char *err; + char *soln, *p; /* * Before anything else, deal with the special case in which diff --git a/keen.c b/keen.c index 2acbea9..ec7af12 100644 --- a/keen.c +++ b/keen.c @@ -727,7 +727,7 @@ static char *encode_block_structure(char *p, int w, int *dsf) return q; } -static char *parse_block_structure(const char **p, int w, int *dsf) +static const char *parse_block_structure(const char **p, int w, int *dsf) { int a = w*w; int pos = 0; @@ -1207,7 +1207,7 @@ static const char *validate_desc(const game_params *params, const char *desc) { int w = params->w, a = w*w; int *dsf; - char *ret; + const char *ret; const char *p = desc; int i; diff --git a/latin.c b/latin.c index 03d78af..50fae3c 100644 --- a/latin.c +++ b/latin.c @@ -73,7 +73,7 @@ void latin_solver_place(struct latin_solver *solver, int x, int y, int n) int latin_solver_elim(struct latin_solver *solver, int start, int step #ifdef STANDALONE_SOLVER - , char *fmt, ... + , const char *fmt, ... #endif ) { @@ -150,7 +150,7 @@ int latin_solver_set(struct latin_solver *solver, struct latin_solver_scratch *scratch, int start, int step1, int step2 #ifdef STANDALONE_SOLVER - , char *fmt, ... + , const char *fmt, ... #endif ) { @@ -499,7 +499,7 @@ int latin_solver_forcing(struct latin_solver *solver, (xt == x || yt == y)) { #ifdef STANDALONE_SOLVER if (solver_show_working) { - char *sep = ""; + const char *sep = ""; int xl, yl; printf("%*sforcing chain, %s at ends of ", solver_recurse_depth*4, "", @@ -775,7 +775,7 @@ static int latin_solver_recurse #ifdef STANDALONE_SOLVER if (solver_show_working) { - char *sep = ""; + const char *sep = ""; printf("%*srecursing on (%d,%d) [", solver_recurse_depth*4, "", x+1, y+1); for (i = 0; i < j; i++) { diff --git a/latin.h b/latin.h index 4b09f16..e13050e 100644 --- a/latin.h +++ b/latin.h @@ -39,7 +39,7 @@ void latin_solver_place(struct latin_solver *solver, int x, int y, int n); /* Positional elimination. */ int latin_solver_elim(struct latin_solver *solver, int start, int step #ifdef STANDALONE_SOLVER - , char *fmt, ... + , const char *fmt, ... #endif ); @@ -49,7 +49,7 @@ int latin_solver_set(struct latin_solver *solver, struct latin_solver_scratch *scratch, int start, int step1, int step2 #ifdef STANDALONE_SOLVER - , char *fmt, ... + , const char *fmt, ... #endif ); diff --git a/loopy.c b/loopy.c index 32f38ce..5f1940e 100644 --- a/loopy.c +++ b/loopy.c @@ -295,7 +295,7 @@ static grid_type grid_types[] = { GRIDLIST(GRID_GRIDTYPE) }; #define NUM_GRID_TYPES (sizeof(grid_types) / sizeof(grid_types[0])) static const struct { int amin, omin; - char *aerr, *oerr; + const char *aerr, *oerr; } grid_size_limits[] = { GRIDLIST(GRID_SIZES) }; /* Generates a (dynamically allocated) new grid, according to the @@ -760,7 +760,8 @@ static const char *validate_desc(const game_params *params, const char *desc) { int count = 0; grid *g; - char *grid_desc, *ret; + char *grid_desc; + const char *ret; /* It's pretty inefficient to do this just for validation. All we need to * know is the precise number of faces. */ diff --git a/map.c b/map.c index 4796f8e..4da834a 100644 --- a/map.c +++ b/map.c @@ -873,7 +873,7 @@ static const char colnames[FOUR] = { 'R', 'Y', 'G', 'B' }; static int place_colour(struct solver_scratch *sc, int *colouring, int index, int colour #ifdef SOLVER_DIAGNOSTICS - , char *verb + , const char *verb #endif ) { @@ -920,7 +920,7 @@ static char *colourset(char *buf, int set) { int i; char *p = buf; - char *sep = ""; + const char *sep = ""; for (i = 0; i < FOUR; i++) if (set & (1 << i)) { @@ -1214,7 +1214,8 @@ static int map_solver(struct solver_scratch *sc, (sc->possible[k] & currc)) { #ifdef SOLVER_DIAGNOSTICS if (verbose) { - char buf[80], *sep = ""; + char buf[80]; + const char *sep = ""; int r; printf("%*sforcing chain, colour %s, ", @@ -1699,8 +1700,8 @@ static char *new_game_desc(const game_params *params, random_state *rs, return ret; } -static char *parse_edge_list(const game_params *params, const char **desc, - int *map) +static const char *parse_edge_list(const game_params *params, + const char **desc, int *map) { int w = params->w, h = params->h, wh = w*h, n = params->n; int i, k, pos, state; @@ -1781,7 +1782,7 @@ static const char *validate_desc(const game_params *params, const char *desc) int w = params->w, h = params->h, wh = w*h, n = params->n; int area; int *map; - char *ret; + const char *ret; map = snewn(2*wh, int); ret = parse_edge_list(params, &desc, map); @@ -1841,7 +1842,7 @@ static game_state *new_game(midend *me, const game_params *params, p = desc; { - char *ret; + const char *ret; ret = parse_edge_list(params, &p, state->map->map); assert(!ret); } diff --git a/midend.c b/midend.c index cf1a5ae..1a65121 100644 --- a/midend.c +++ b/midend.c @@ -118,7 +118,7 @@ struct deserialise_data { */ static const char *midend_deserialise_internal( midend *me, int (*read)(void *ctx, void *buf, int len), void *rctx, - char *(*check)(void *ctx, midend *, const struct deserialise_data *), + const char *(*check)(void *ctx, midend *, const struct deserialise_data *), void *cctx); void midend_reset_tilesize(midend *me) @@ -384,7 +384,7 @@ void midend_force_redraw(midend *me) midend_redraw(me); } -static void newgame_serialise_write(void *ctx, void *buf, int len) +static void newgame_serialise_write(void *ctx, const void *buf, int len) { midend *const me = ctx; int new_len; @@ -547,7 +547,7 @@ struct newgame_undo_deserialise_check_ctx { int refused; }; -static char *newgame_undo_deserialise_check( +static const char *newgame_undo_deserialise_check( void *vctx, midend *me, const struct deserialise_data *data) { struct newgame_undo_deserialise_check_ctx *ctx = @@ -1333,7 +1333,8 @@ void midend_supersede_game_desc(midend *me, const char *desc, config_item *midend_get_config(midend *me, int which, char **wintitle) { - char *titlebuf, *parstr, *rest; + char *titlebuf, *parstr; + const char *rest; config_item *ret; char sep; @@ -1765,7 +1766,7 @@ char *midend_rewrite_statusbar(midend *me, const char *text) #define SERIALISE_VERSION "1" void midend_serialise(midend *me, - void (*write)(void *ctx, void *buf, int len), + void (*write)(void *ctx, const void *buf, int len), void *wctx) { int i; @@ -1781,7 +1782,7 @@ void midend_serialise(midend *me, */ #define wr(h,s) do { \ char hbuf[80]; \ - char *str = (s); \ + const char *str = (s); \ char lbuf[9]; \ copy_left_justified(lbuf, sizeof(lbuf), h); \ sprintf(hbuf, "%s:%d:", lbuf, (int)strlen(str)); \ @@ -1922,7 +1923,7 @@ void midend_serialise(midend *me, */ static const char *midend_deserialise_internal( midend *me, int (*read)(void *ctx, void *buf, int len), void *rctx, - char *(*check)(void *ctx, midend *, const struct deserialise_data *data), + const char *(*check)(void *ctx, midend *, const struct deserialise_data *), void *cctx) { struct deserialise_data data; @@ -1932,7 +1933,7 @@ static const char *midend_deserialise_internal( char *val = NULL; /* Initially all errors give the same report */ - char *ret = "Data does not appear to be a saved game file"; + const char *ret = "Data does not appear to be a saved game file"; data.seed = data.parstr = data.desc = data.privdesc = NULL; data.auxinfo = data.uistr = data.cparstr = NULL; @@ -2309,7 +2310,7 @@ const char *identify_game(char **name, char *val = NULL; /* Initially all errors give the same report */ - char *ret = "Data does not appear to be a saved game file"; + const char *ret = "Data does not appear to be a saved game file"; *name = NULL; diff --git a/mines.c b/mines.c index 6304668..6a854c6 100644 --- a/mines.c +++ b/mines.c @@ -2558,7 +2558,7 @@ uncover: * can. */ char *p = buf; - char *sep = ""; + const char *sep = ""; for (dy = -1; dy <= +1; dy++) for (dx = -1; dx <= +1; dx++) diff --git a/osx.m b/osx.m index 9403fae..daa4af1 100644 --- a/osx.m +++ b/osx.m @@ -152,7 +152,7 @@ void get_random_seed(void **randseed, int *randseedsize) *randseedsize = sizeof(time_t); } -static void savefile_write(void *wctx, void *buf, int len) +static void savefile_write(void *wctx, const void *buf, int len) { FILE *fp = (FILE *)wctx; fwrite(buf, 1, len, fp); diff --git a/ps.c b/ps.c index 6ec8aac..ac021aa 100644 --- a/ps.c +++ b/ps.c @@ -21,7 +21,7 @@ struct psdata { drawing *drawing; }; -static void ps_printf(psdata *ps, char *fmt, ...) +static void ps_printf(psdata *ps, const char *fmt, ...) { va_list ap; @@ -73,7 +73,7 @@ static void ps_fill(psdata *ps, int colour) } } -static void ps_setcolour_internal(psdata *ps, int colour, char *suffix) +static void ps_setcolour_internal(psdata *ps, int colour, const char *suffix) { int hatch; float r, g, b; diff --git a/puzzles.h b/puzzles.h index 11542a5..40f5bcb 100644 --- a/puzzles.h +++ b/puzzles.h @@ -325,7 +325,7 @@ void midend_supersede_game_desc(midend *me, const char *desc, const char *privdesc); char *midend_rewrite_statusbar(midend *me, const char *text); void midend_serialise(midend *me, - void (*write)(void *ctx, void *buf, int len), + void (*write)(void *ctx, const void *buf, int len), void *wctx); const char *midend_deserialise(midend *me, int (*read)(void *ctx, void *buf, int len), diff --git a/range.c b/range.c index aef7453..41c6a35 100644 --- a/range.c +++ b/range.c @@ -66,7 +66,7 @@ #define setmember(obj, field) ( (obj) . field = field ) -static char *nfmtstr(int n, char *fmt, ...) { +static char *nfmtstr(int n, const char *fmt, ...) { va_list va; char *ret = snewn(n+1, char); va_start(va, fmt); diff --git a/samegame.c b/samegame.c index 8b31062..d7d0676 100644 --- a/samegame.c +++ b/samegame.c @@ -1108,7 +1108,8 @@ static void game_changed_state(game_ui *ui, const game_state *oldstate, static char *sel_movedesc(game_ui *ui, const game_state *state) { int i; - char *ret, *sep, buf[80]; + char *ret, buf[80]; + const char *sep; int retlen, retsize; retsize = 256; diff --git a/signpost.c b/signpost.c index 9c1c9ba..72f3ab2 100644 --- a/signpost.c +++ b/signpost.c @@ -497,10 +497,11 @@ static void free_game(game_state *state) } static void unpick_desc(const game_params *params, const char *desc, - game_state **sout, char **mout) + game_state **sout, const char **mout) { game_state *state = blank_game(params->w, params->h); - char *msg = NULL, c; + const char *msg = NULL; + char c; int num = 0, i = 0; while (*desc) { @@ -845,7 +846,7 @@ generate: static const char *validate_desc(const game_params *params, const char *desc) { - char *ret = NULL; + const char *ret = NULL; unpick_desc(params, desc, NULL, &ret); return ret; diff --git a/singles.c b/singles.c index c88c6c5..5929d82 100644 --- a/singles.c +++ b/singles.c @@ -330,10 +330,10 @@ static int c2n(char c) { } static void unpick_desc(const game_params *params, const char *desc, - game_state **sout, char **mout) + game_state **sout, const char **mout) { game_state *state = blank_game(params->w, params->h); - char *msg = NULL; + const char *msg = NULL; int num = 0, i = 0; if (strlen(desc) != state->n) { @@ -1412,7 +1412,7 @@ randomise: static const char *validate_desc(const game_params *params, const char *desc) { - char *ret = NULL; + const char *ret = NULL; unpick_desc(params, desc, NULL, &ret); return ret; diff --git a/sixteen.c b/sixteen.c index 74f221a..70cc433 100644 --- a/sixteen.c +++ b/sixteen.c @@ -398,8 +398,7 @@ static char *new_game_desc(const game_params *params, random_state *rs, static const char *validate_desc(const game_params *params, const char *desc) { - const char *p; - char *err; + const char *p, *err; int i, area; int *used; diff --git a/slant.c b/slant.c index 7fe5a6a..3fd6611 100644 --- a/slant.c +++ b/slant.c @@ -413,7 +413,7 @@ static void fill_square(int w, int h, int x, int y, int v, } static int vbitmap_clear(int w, int h, struct solver_scratch *sc, - int x, int y, int vbits, char *reason, ...) + int x, int y, int vbits, const char *reason, ...) { int done_something = FALSE; int vbit; @@ -734,7 +734,7 @@ static int slant_solve(int w, int h, const signed char *clues, int fs, bs, v; int c1, c2; #ifdef SOLVER_DIAGNOSTICS - char *reason = ""; + const char *reason = ""; #endif if (soln[y*w+x]) diff --git a/solo.c b/solo.c index 3d1f86d..ef2852f 100644 --- a/solo.c +++ b/solo.c @@ -299,9 +299,9 @@ static game_params *dup_params(const game_params *params) static int game_fetch_preset(int i, char **name, game_params **params) { static struct { - char *title; + const char *title; game_params params; - } presets[] = { + } const presets[] = { { "2x2 Trivial", { 2, 2, SYMM_ROT2, DIFF_BLOCK, DIFF_KMINMAX, FALSE, FALSE } }, { "2x3 Basic", { 2, 3, SYMM_ROT2, DIFF_SIMPLE, DIFF_KMINMAX, FALSE, FALSE } }, { "3x3 Trivial", { 3, 3, SYMM_ROT2, DIFF_BLOCK, DIFF_KMINMAX, FALSE, FALSE } }, @@ -831,19 +831,20 @@ static void solver_place(struct solver_usage *usage, int x, int y, int n) */ struct solver_scratch; static int solver_elim(struct solver_usage *usage, int *indices, - char *fmt, ...) __attribute__((format(printf,3,4))); + const char *fmt, ...) + __attribute__((format(printf,3,4))); static int solver_intersect(struct solver_usage *usage, - int *indices1, int *indices2, char *fmt, ...) + int *indices1, int *indices2, const char *fmt, ...) __attribute__((format(printf,4,5))); static int solver_set(struct solver_usage *usage, struct solver_scratch *scratch, - int *indices, char *fmt, ...) + int *indices, const char *fmt, ...) __attribute__((format(printf,4,5))); #endif static int solver_elim(struct solver_usage *usage, int *indices #ifdef STANDALONE_SOLVER - , char *fmt, ... + , const char *fmt, ... #endif ) { @@ -907,7 +908,7 @@ static int solver_elim(struct solver_usage *usage, int *indices static int solver_intersect(struct solver_usage *usage, int *indices1, int *indices2 #ifdef STANDALONE_SOLVER - , char *fmt, ... + , const char *fmt, ... #endif ) { @@ -985,7 +986,7 @@ static int solver_set(struct solver_usage *usage, struct solver_scratch *scratch, int *indices #ifdef STANDALONE_SOLVER - , char *fmt, ... + , const char *fmt, ... #endif ) { @@ -1351,7 +1352,7 @@ static int solver_forcing(struct solver_usage *usage, (ondiag1(yt*cr+xt) && ondiag1(y*cr+x)))))) { #ifdef STANDALONE_SOLVER if (solver_show_working) { - char *sep = ""; + const char *sep = ""; int xl, yl; printf("%*sforcing chain, %d at ends of ", solver_recurse_depth*4, "", orign); @@ -2516,7 +2517,7 @@ static void solver(int cr, struct block_structure *blocks, #ifdef STANDALONE_SOLVER if (solver_show_working) { - char *sep = ""; + const char *sep = ""; printf("%*srecursing on (%d,%d) [", solver_recurse_depth*4, "", x + 1, y + 1); for (i = 0; i < j; i++) { @@ -3154,7 +3155,8 @@ static int symmetries(const game_params *params, int x, int y, static char *encode_solve_move(int cr, digit *grid) { int i, len; - char *ret, *p, *sep; + char *ret, *p; + const char *sep; /* * It's surprisingly easy to work out _exactly_ how long this diff --git a/tents.c b/tents.c index 0057aed..48d420e 100644 --- a/tents.c +++ b/tents.c @@ -1561,7 +1561,8 @@ static char *interpret_move(const game_state *state, game_ui *ui, if ((IS_MOUSE_DRAG(button) || IS_MOUSE_RELEASE(button)) && ui->drag_button > 0) { int xmin, ymin, xmax, ymax; - char *buf, *sep; + char *buf; + const char *sep; int buflen, bufsize, tmplen; x = FROMCOORD(x); diff --git a/twiddle.c b/twiddle.c index fb8f700..1f2825f 100644 --- a/twiddle.c +++ b/twiddle.c @@ -80,9 +80,9 @@ static game_params *dup_params(const game_params *params) static int game_fetch_preset(int i, char **name, game_params **params) { static struct { - char *title; + const char *title; game_params params; - } presets[] = { + } const presets[] = { { "3x3 rows only", { 3, 3, 2, TRUE, FALSE } }, { "3x3 normal", { 3, 3, 2, FALSE, FALSE } }, { "3x3 orientable", { 3, 3, 2, FALSE, TRUE } }, diff --git a/unequal.c b/unequal.c index ccb00dd..12d84bf 100644 --- a/unequal.c +++ b/unequal.c @@ -1195,12 +1195,12 @@ generate: } static game_state *load_game(const game_params *params, const char *desc, - char **why_r) + const char **why_r) { game_state *state = blank_game(params->order, params->adjacent); const char *p = desc; int i = 0, n, o = params->order, x, y; - char *why = NULL; + const char *why = NULL; while (*p) { while (*p >= 'a' && *p <= 'z') { @@ -1293,7 +1293,7 @@ static game_state *new_game(midend *me, const game_params *params, static const char *validate_desc(const game_params *params, const char *desc) { - char *why = NULL; + const char *why = NULL; game_state *dummy = load_game(params, desc, &why); if (dummy) { free_game(dummy); diff --git a/windows.c b/windows.c index 0a43c5d..8e5b406 100644 --- a/windows.c +++ b/windows.c @@ -1551,7 +1551,7 @@ static frontend *frontend_new(HINSTANCE inst) return fe; } -static void savefile_write(void *wctx, void *buf, int len) +static void savefile_write(void *wctx, const void *buf, int len) { FILE *fp = (FILE *)wctx; fwrite(buf, 1, len, fp); -- 2.30.2