ash: fix EXEXEC status clobbering
authorRon Yorston <rmy@pobox.com>
Fri, 30 Oct 2015 19:06:47 +0000 (19:06 +0000)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 30 Oct 2015 21:19:48 +0000 (22:19 +0100)
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>
shell/ash.c

index 9a8bab5abaa0a8e9c34cfe094c6eef083f0d604c..c333b235bba5ec7f0ee9391d48ac0a45478f6e5f 100644 (file)
@@ -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)