mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-05-20 06:56:05 +02:00
34900: assignment before an "exec".
Without POSXIBUILTIN: restore after, so we only get side effects. With POSXIBUILTIN: keep set variable
This commit is contained in:
parent
493fe2b444
commit
3bf8cab82e
|
@ -1,3 +1,8 @@
|
|||
2015-04-15 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||
|
||||
* 34900: Src/exec.c: assignment before an "exec" with
|
||||
a redirection, with and without POSIXBUILTINS.
|
||||
|
||||
2015-04-15 Peter Stephenson <p.stephenson@samsung.com>
|
||||
|
||||
* unposted: Src/math.c: rewrite last commit to look more
|
||||
|
|
21
Src/exec.c
21
Src/exec.c
|
@ -3305,6 +3305,20 @@ execcmd(Estate state, int input, int output, int how, int last1)
|
|||
closemn(mfds, i, REDIR_CLOSE);
|
||||
|
||||
if (nullexec) {
|
||||
/*
|
||||
* If nullexec is 2, we have variables to add with the redirections
|
||||
* in place. If nullexec is 1, we may have variables but they
|
||||
* need the standard restore logic.
|
||||
*/
|
||||
if (varspc) {
|
||||
LinkList restorelist = 0, removelist = 0;
|
||||
if (!isset(POSIXBUILTINS) && nullexec != 2)
|
||||
save_params(state, varspc, &restorelist, &removelist);
|
||||
addvars(state, varspc, 0);
|
||||
if (restorelist)
|
||||
restore_params(restorelist, removelist);
|
||||
}
|
||||
lastval = errflag ? errflag : cmdoutval;
|
||||
if (nullexec == 1) {
|
||||
/*
|
||||
* If nullexec is 1 we specifically *don't* restore the original
|
||||
|
@ -3315,13 +3329,6 @@ execcmd(Estate state, int input, int output, int how, int last1)
|
|||
zclose(save[i]);
|
||||
goto done;
|
||||
}
|
||||
/*
|
||||
* If nullexec is 2, we have variables to add with the redirections
|
||||
* in place.
|
||||
*/
|
||||
if (varspc)
|
||||
addvars(state, varspc, 0);
|
||||
lastval = errflag ? errflag : cmdoutval;
|
||||
if (isset(XTRACE)) {
|
||||
fputc('\n', xtrerr);
|
||||
fflush(xtrerr);
|
||||
|
|
Loading…
Reference in New Issue