X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/7b97f2181bd0d6f3e50e2fabe6e4e0c8c262db95..a5da3a76158b9dbdc6d63b8c5aca8b835da90d24:/midend.c diff --git a/midend.c b/midend.c index 1ba0fa3..05ea663 100644 --- a/midend.c +++ b/midend.c @@ -156,6 +156,15 @@ midend *midend_new(frontend *fe, const game *ourgame, return me; } +static void midend_purge_states(midend *me) +{ + while (me->nstates > me->statepos) { + me->ourgame->free_game(me->states[--me->nstates].state); + if (me->states[me->nstates].movestr) + sfree(me->states[me->nstates].movestr); + } +} + static void midend_free_game(midend *me) { while (me->nstates > 0) { @@ -511,8 +520,7 @@ void midend_restart_game(midend *me) * Now enter the restarted state as the next move. */ midend_stop_anim(me); - while (me->nstates > me->statepos) - me->ourgame->free_game(me->states[--me->nstates].state); + midend_purge_states(me); ensure(me); me->states[me->nstates].state = s; me->states[me->nstates].movestr = dupstr(me->desc); @@ -587,8 +595,7 @@ static int midend_really_process_key(midend *me, int x, int y, int button) goto done; } else if (s) { midend_stop_anim(me); - while (me->nstates > me->statepos) - me->ourgame->free_game(me->states[--me->nstates].state); + midend_purge_states(me); ensure(me); assert(movestr != NULL); me->states[me->nstates].state = s; @@ -1292,11 +1299,7 @@ char *midend_solve(midend *me) * Now enter the solved state as the next move. */ midend_stop_anim(me); - while (me->nstates > me->statepos) { - me->ourgame->free_game(me->states[--me->nstates].state); - if (me->states[me->nstates].movestr) - sfree(me->states[me->nstates].movestr); - } + midend_purge_states(me); ensure(me); me->states[me->nstates].state = s; me->states[me->nstates].movestr = movestr;