Fix navigate and march not to prompt for number of mines to lay
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 20 Mar 2010 10:24:49 +0000 (11:24 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 21 Mar 2010 08:34:23 +0000 (09:34 +0100)
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)

src/lib/commands/navi.c

index 0f6189cdb3124241708d4b2c353e0ba88ecc0c65..0213be25900c06e3e5c7a5bf85a3b877d898bb39 100644 (file)
@@ -244,8 +244,8 @@ do_unit_move(struct emp_qelem *ulist, int *together,
            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;
            }