diff options
author | Barton E. Schaefer <schaefer@zsh.org> | 2015-12-25 00:26:26 -0800 |
---|---|---|
committer | Barton E. Schaefer <schaefer@zsh.org> | 2015-12-25 00:26:26 -0800 |
commit | a554c7403a0f1b6c29e07410a03599272aeaeaee (patch) | |
tree | eb81b17affd5a6801d30268a0d4c503ef6c304fa /Src | |
parent | 038b1d4b38fca3b2067bcc322096a00179f63b88 (diff) | |
download | zsh-a554c7403a0f1b6c29e07410a03599272aeaeaee.tar.gz zsh-a554c7403a0f1b6c29e07410a03599272aeaeaee.tar.xz zsh-a554c7403a0f1b6c29e07410a03599272aeaeaee.zip |
37434: POSIXBUILTINS "command" should prevent shell exit on errors from special builtins
Diffstat (limited to 'Src')
-rw-r--r-- | Src/exec.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/Src/exec.c b/Src/exec.c index acc867c77..f14fc27a6 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -3475,10 +3475,10 @@ execcmd(Estate state, int input, int output, int how, int last1) restore_queue_signals(q); } else if (is_builtin || is_shfunc) { LinkList restorelist = 0, removelist = 0; + int do_save = 0; /* builtin or shell function */ - if (!forked && varspc) { - int do_save = 0; + if (!forked) { if (isset(POSIXBUILTINS)) { /* * If it's a function or special builtin --- save @@ -3497,7 +3497,7 @@ execcmd(Estate state, int input, int output, int how, int last1) if ((cflags & BINF_COMMAND) || !assign) do_save = 1; } - if (do_save) + if (do_save && varspc) save_params(state, varspc, &restorelist, &removelist); } if (varspc) { @@ -3643,6 +3643,8 @@ execcmd(Estate state, int input, int output, int how, int last1) } dont_queue_signals(); lastval = execbuiltin(args, assigns, (Builtin) hn); + if (do_save & BINF_COMMAND) + errflag &= ~ERRFLAG_ERROR; restore_queue_signals(q); fflush(stdout); if (save[1] == -2) { |