Fix do_map()'s misuse of snxtsct() for testing argument syntax
It assumes snxtsct() fails only when the argument can't be parsed. It can also fail when the condition argument has errors. `map # ?xxx' first complains about xxx, then maps around ship#0. Broken since Chainsaw 2 introduced smap, pmap and lmap. Use sarg_type() to recognize sectors vs. unit argument. `map # ?xxx' now fails as it should. Subtle side effect: do_map() no longer prompts for argument "", because snxtsct() is now guarded by sarg_type(). Impact on callers: * display_region_map() is not affected, because it never passes "". * map() passes on "" arguments. Change it to prompt in that case. Consistent with how other commands behave. No functional change. * do_unit_move() passes on "" arguments. Keep it that way. This changes navigate and march sub-commands 'M' and 'B' not to prompt for "" arguments, which is consistent with sub-command 'm' of move, test and transport.
This commit is contained in:
parent
baee0744ff
commit
16daa4007c
2 changed files with 9 additions and 2 deletions
|
@ -73,7 +73,7 @@ map(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->argp[1] == NULL) {
|
if (!player->argp[1] || !*player->argp[1]) {
|
||||||
if (unit_type == EF_BAD) {
|
if (unit_type == EF_BAD) {
|
||||||
str = getstring("(sects)? ", buf);
|
str = getstring("(sects)? ", buf);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -76,7 +76,14 @@ do_map(int bmap, int unit_type, char *arg, char *map_flags_arg)
|
||||||
char *b;
|
char *b;
|
||||||
int map_flags = 0;
|
int map_flags = 0;
|
||||||
|
|
||||||
if (!snxtsct(&ns, arg)) {
|
switch (sarg_type(arg)) {
|
||||||
|
case NS_DIST:
|
||||||
|
case NS_AREA:
|
||||||
|
case NS_ALL:
|
||||||
|
if (!snxtsct(&ns, arg))
|
||||||
|
return RET_SYN;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
if (unit_map(unit_type, atoi(arg), &ns, &origin))
|
if (unit_map(unit_type, atoi(arg), &ns, &origin))
|
||||||
return RET_FAIL;
|
return RET_FAIL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue