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>
This commit is contained in:
Ron Yorston 2015-10-30 19:06:47 +00:00 committed by Denys Vlasenko
parent e939856c87
commit 8c55dc79a7

View File

@ -9432,7 +9432,7 @@ evalcommand(union node *cmd, int flags)
if (evalbltin(cmdentry.u.cmd, argc, argv)) { if (evalbltin(cmdentry.u.cmd, argc, argv)) {
int exit_status; int exit_status;
int i = exception_type; int i = exception_type;
if (i == EXEXIT) if (i == EXEXIT || i == EXEXEC)
goto raise; goto raise;
exit_status = 2; exit_status = 2;
if (i == EXINT) if (i == EXINT)