When sub-command 'd' was used without arguments, do_unit_move() failed
to supply the second argument to mine(), which duly prompted for it.
This contracticted info, and could trigger a generation oops.
do_unit_move() reads the ships into a list. It re-reads them when it
prompts for sub-commands. shp_nav_one_sector() writes them back when
it moves ships.
The mine prompt made the list stale. Movement sub-commands before the
next prompt for sub-commands wrote back stale ships, triggering a
generation oops. Example: "nav 15 dg".
Broken when mine-laying was added in commits
2438fe7c, v4.3.7.
Same for march, commit
274c8e42, v4.3.7.
(cherry picked from commit
45106ab91ffe6193bc90a725e8a07a7a3997f54c)
skip = 1;
continue;
case 'd':
skip = 1;
continue;
case 'd':
- if (ac == 2) {
- player->argp[2] = player->argp[1];
+ if (ac < 3) {
+ player->argp[2] = ac < 2 ? "1" : player->argp[1];
sprintf(dp, "%d", leader->uid);
player->argp[1] = dp;
}
sprintf(dp, "%d", leader->uid);
player->argp[1] = dp;
}