diff options
author | dana <dana@dana.is> | 2017-12-10 12:17:30 -0600 |
---|---|---|
committer | Peter Stephenson <p.stephenson@samsung.com> | 2018-05-11 09:29:14 +0100 |
commit | 805192311f3426b852026b03e8ca4b421189fcf1 (patch) | |
tree | e1c82fd71cb3ae4e79cdef83d9653b2484851dbc /Src/exec.c | |
parent | fa441fa20e6d7d93e613f339d0c67ba8b0ab09c4 (diff) | |
download | zsh-805192311f3426b852026b03e8ca4b421189fcf1.tar.gz zsh-805192311f3426b852026b03e8ca4b421189fcf1.tar.xz zsh-805192311f3426b852026b03e8ca4b421189fcf1.zip |
42101 (tweaked): assigning shell status to array was broken
Diffstat (limited to 'Src/exec.c')
-rw-r--r-- | Src/exec.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Src/exec.c b/Src/exec.c index 08c4ea95a..963b0a5c3 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -2750,7 +2750,7 @@ execcmd_exec(Estate state, Execcmd_params eparams, char *text; int save[10]; int fil, dfil, is_cursh, do_exec = 0, redir_err = 0, i; - int nullexec = 0, magic_assign = 0, forked = 0; + int nullexec = 0, magic_assign = 0, forked = 0, old_lastval; int is_shfunc = 0, is_builtin = 0, is_exec = 0, use_defpath = 0; /* Various flags to the command. */ int cflags = 0, orig_cflags = 0, checked = 0, oautocont = -1; @@ -2775,6 +2775,7 @@ execcmd_exec(Estate state, Execcmd_params eparams, * If assignment but no command get the status from variable * assignment. */ + old_lastval = lastval; if (!args && varspc) lastval = errflag ? errflag : cmdoutval; /* @@ -3209,8 +3210,11 @@ execcmd_exec(Estate state, Execcmd_params eparams, return; } cmdoutval = use_cmdoutval ? lastval : 0; - if (varspc) + if (varspc) { + /* Make sure $? is still correct for assignment */ + lastval = old_lastval; addvars(state, varspc, 0); + } if (errflag) lastval = 1; else |