summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston2015-10-30 19:06:47 +0000
committerDenys Vlasenko2015-10-30 22:19:48 +0100
commit8c55dc79a79d6a16c364e6b1f849bf426f21fcbb (patch)
treec3d16eb9648a81286ab20727b32b61a17f76f63b
parente939856c8724e357b3a7ba878563bfc957605504 (diff)
downloadbusybox-8c55dc79a79d6a16c364e6b1f849bf426f21fcbb.zip
busybox-8c55dc79a79d6a16c364e6b1f849bf426f21fcbb.tar.gz
ash: fix EXEXEC status clobbering
evalcommand always clobbers the exit status in case of an EXEXEC which means that exec always fails with exit status 2 regardless of what it actually returns. This patch adds the missing check for EXEXEC so that the correct exit status is preserved. It causes the test ash-misc/exec.tests to succeed. Based on commit 7f68426 in dash git, by Herbert Xu. Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 9a8bab5..c333b23 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -9432,7 +9432,7 @@ evalcommand(union node *cmd, int flags)
if (evalbltin(cmdentry.u.cmd, argc, argv)) {
int exit_status;
int i = exception_type;
- if (i == EXEXIT)
+ if (i == EXEXIT || i == EXEXEC)
goto raise;
exit_status = 2;
if (i == EXINT)