ash: respect -p flag when command builtin is run with -v/-V
The command builtin should only check the default path, not $PATH,
when the -p flag is used along with -v/-V.
Based on commits 65ae84b (by Harald van Dijk) and 29ee27d (by Herbert
Xu) from git://git.kernel.org/pub/scm/utils/dash/dash.git).
function old new delta
commandcmd 72 87 +15
describe_command 437 450 +13
typecmd 84 86 +2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 30/0) Total: 30 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/shell/ash.c b/shell/ash.c
index 8f0a5e0..a2e0618 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -7812,14 +7812,15 @@
* Locate and print what a word is...
*/
static int
-describe_command(char *command, int describe_command_verbose)
+describe_command(char *command, const char *path, int describe_command_verbose)
{
struct cmdentry entry;
struct tblentry *cmdp;
#if ENABLE_ASH_ALIAS
const struct alias *ap;
#endif
- const char *path = pathval();
+
+ path = path ? path : pathval();
if (describe_command_verbose) {
out1str(command);
@@ -7919,7 +7920,7 @@
verbose = 0;
}
while (argv[i]) {
- err |= describe_command(argv[i++], verbose);
+ err |= describe_command(argv[i++], NULL, verbose);
}
return err;
}
@@ -7933,6 +7934,7 @@
VERIFY_BRIEF = 1,
VERIFY_VERBOSE = 2,
} verify = 0;
+ const char *path = NULL;
while ((c = nextopt("pvV")) != '\0')
if (c == 'V')
@@ -7943,9 +7945,11 @@
else if (c != 'p')
abort();
#endif
+ else
+ path = bb_default_path;
/* Mimic bash: just "command -v" doesn't complain, it's a nop */
if (verify && (*argptr != NULL)) {
- return describe_command(*argptr, verify - VERIFY_BRIEF);
+ return describe_command(*argptr, path, verify - VERIFY_BRIEF);
}
return 0;
diff --git a/shell/ash_test/ash-misc/command.right b/shell/ash_test/ash-misc/command.right
new file mode 100644
index 0000000..7f746d9
--- /dev/null
+++ b/shell/ash_test/ash-misc/command.right
@@ -0,0 +1 @@
+recho: not found
diff --git a/shell/ash_test/ash-misc/command.tests b/shell/ash_test/ash-misc/command.tests
new file mode 100755
index 0000000..5d445af
--- /dev/null
+++ b/shell/ash_test/ash-misc/command.tests
@@ -0,0 +1 @@
+command -p -V recho