1
0
Fork 0
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:
Peter Stephenson 2015-04-15 21:16:17 +01:00
parent 493fe2b444
commit 3bf8cab82e
2 changed files with 19 additions and 7 deletions

View File

@ -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

View File

@ -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);