1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-09-22 11:51:04 +02:00

41020: Fix "command -p"; "-p" was incorrectly left in command arguments

Also add tests for known precommand modifier issues.
This commit is contained in:
Peter Stephenson 2017-04-28 10:20:35 +01:00
parent d7110d8f01
commit ed4e37e45c
3 changed files with 24 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2017-04-28 Peter Stephenson <p.stephenson@samsung.com>
* 41020: Src/exec.c, Test/A01grammar.ztst: "command -p" was
broken by 41008, also add more tests for precommand modifiers.
2017-04-27 Peter Stephenson <p.w.stephenson@ntlworld.com>
* 41012: Src/builtin.c, Src/exec.c, Src/signals.c,

View File

@ -2824,7 +2824,7 @@ execcmd_exec(Estate state, Execcmd_params eparams,
* Otherwise, just leave marked as BINF_COMMAND
* modifier with no additional action.
*/
LinkNode argnode, oldnode;
LinkNode argnode, oldnode, pnode = NULL;
char *argdata, *cmdopt;
int has_p = 0, has_vV = 0, has_other = 0;
argnode = firstnode(preargs);
@ -2845,6 +2845,7 @@ execcmd_exec(Estate state, Execcmd_params eparams,
* also traditional behaviour.
*/
has_p = 1;
pnode = argnode;
break;
case 'v':
case 'V':
@ -2882,6 +2883,12 @@ execcmd_exec(Estate state, Execcmd_params eparams,
} else if (has_p) {
/* Use default path */
use_defpath = 1;
/*
* We don't need this node as we're not treating
* "command" as a builtin this time.
*/
if (pnode)
uremnode(preargs, pnode);
}
/*
* Else just any trailing

View File

@ -116,9 +116,11 @@
(\exec /bin/sh -c 'echo Test one'; print Not reached)
('exec' /bin/sh -c 'echo Test two'; print Not reached)
0:exec with quotes
(\exec -c /bin/sh -c 'echo Test three'; print Not reached)
0:precommand modifiers with quotes
>Test one
>Test two
>Test three
cat() { echo Function cat executed; }
command cat && unfunction cat
@ -126,6 +128,14 @@
<External command cat executed
>External command cat executed
(command -p echo this is output)
(\command -p echo this is more output)
('command' -p echo this is yet more output)
0: command -p without -v or -V
>this is output
>this is more output
>this is yet more output
command -pv cat
command -pv echo
command -p -V cat