me->game_id_change_notify_ctx = ctx;
}
-void midend_supersede_game_desc(midend *me, char *desc, char *privdesc)
+void midend_supersede_game_desc(midend *me, const char *desc,
+ const char *privdesc)
{
sfree(me->desc);
sfree(me->privdesc);
return NULL;
}
-static const char *midend_game_id_int(midend *me, char *id, int defmode)
+static const char *midend_game_id_int(midend *me, const char *id, int defmode)
{
const char *error;
- char *par, *desc, *seed;
+ char *par = NULL;
+ const char *desc, *seed;
game_params *newcurparams, *newparams, *oldparams1, *oldparams2;
int free_params;
* description. So `par' now points to the parameters
* string, and `desc' to the description string.
*/
- *desc++ = '\0';
- par = id;
+ par = snewn(desc-id + 1, char);
+ strncpy(par, id, desc-id);
+ par[desc-id] = '\0';
+ desc++;
seed = NULL;
} else if (seed && (!desc || seed < desc)) {
/*
* So `par' now points to the parameters string, and `seed'
* to the seed string.
*/
- *seed++ = '\0';
- par = id;
+ par = snewn(seed-id + 1, char);
+ strncpy(par, id, seed-id);
+ par[seed-id] = '\0';
+ seed++;
desc = NULL;
} else {
/*
*/
if (defmode == DEF_SEED) {
seed = id;
- par = desc = NULL;
+ par = NULL;
+ desc = NULL;
} else if (defmode == DEF_DESC) {
desc = id;
- par = seed = NULL;
+ par = NULL;
+ seed = NULL;
} else {
- par = id;
+ par = dupstr(id);
seed = desc = NULL;
}
}
me->genmode = GOT_SEED;
}
+ sfree(par);
+
return NULL;
}
-const char *midend_game_id(midend *me, char *id)
+const char *midend_game_id(midend *me, const char *id)
{
return midend_game_id_int(me, id, DEF_PARAMS);
}
return me->ourgame->status(me->states[me->statepos-1].state);
}
-char *midend_rewrite_statusbar(midend *me, char *text)
+char *midend_rewrite_statusbar(midend *me, const char *text)
{
/*
* An important special case is that we are occasionally called