diff options
author | jilles <jilles@FreeBSD.org> | 2010-03-06 17:09:22 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2010-03-06 17:09:22 +0000 |
commit | c30671a949eb9683bebf9a37cc4e35a46fde00d9 (patch) | |
tree | 4b967f0eefc77e4d0c584d3f2269ffeb52a3bfb8 /bin/sh/eval.c | |
parent | 1bfbe947abf36034bc4aa54fb61824fb8153e43f (diff) | |
download | FreeBSD-src-c30671a949eb9683bebf9a37cc4e35a46fde00d9.zip FreeBSD-src-c30671a949eb9683bebf9a37cc4e35a46fde00d9.tar.gz |
sh: Make sure to popredir() even if a special builtin caused an error.
Diffstat (limited to 'bin/sh/eval.c')
-rw-r--r-- | bin/sh/eval.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/bin/sh/eval.c b/bin/sh/eval.c index c0a7601..b1de306 100644 --- a/bin/sh/eval.c +++ b/bin/sh/eval.c @@ -914,6 +914,9 @@ cmddone: backcmd->nleft = memout.nextc - memout.buf; memout.buf = NULL; } + if (cmdentry.u.index != EXECCMD && + (e == -1 || e == EXERROR || e == EXEXEC)) + popredir(); if (e != -1) { if ((e != EXERROR && e != EXEXEC) || cmdentry.special) @@ -922,8 +925,6 @@ cmddone: if (flags != EV_BACKCMD) FORCEINTON; } - if (cmdentry.u.index != EXECCMD) - popredir(); } else { #ifdef DEBUG trputs("normal command: "); trargs(argv); |