aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-10-25 17:24:25 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2016-10-25 17:24:25 +0200
commit061a09091f21f8e2d3ac61cb1a5f8c919ddce26e (patch)
tree855cbdc5b7a1b404b623f7a86ee2c7ea97e5a00e
parentb7adf7ac32e65906932935daf3d7a02d94818e09 (diff)
downloadbusybox-w32-061a09091f21f8e2d3ac61cb1a5f8c919ddce26e.tar.gz
busybox-w32-061a09091f21f8e2d3ac61cb1a5f8c919ddce26e.tar.bz2
busybox-w32-061a09091f21f8e2d3ac61cb1a5f8c919ddce26e.zip
ash: [BUILTIN] Use EXEXIT in place of EXEXEC
Upstream commit: Date: Sun, 28 Nov 2010 20:44:37 +0800 [BUILTIN] Use EXEXIT in place of EXEXEC The intended semantics of EXEXEC are identical to EXEXIT, so simplify by using EXEXIT directly. Functional change: in edge cases (exec within a trap handler), this causes the exit status from exec not to be clobbered. For example, without this patch: $ sh -c 'trap "exec nonexistent" EXIT'; echo $? exec: 1: nonexistent: not found 0 And with it: $ sh -c 'trap "exec nonexistent" EXIT'; echo $? exec: 1: nonexistent: not found 127 Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 9798a9675..29d1d57ca 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -302,7 +302,6 @@ struct globals_misc {
302#define EXINT 0 /* SIGINT received */ 302#define EXINT 0 /* SIGINT received */
303#define EXERROR 1 /* a generic error */ 303#define EXERROR 1 /* a generic error */
304#define EXSHELLPROC 2 /* execute a shell procedure */ 304#define EXSHELLPROC 2 /* execute a shell procedure */
305#define EXEXEC 3 /* command execution failed */
306#define EXEXIT 4 /* exit the shell */ 305#define EXEXIT 4 /* exit the shell */
307#define EXSIG 5 /* trapped signal in wait(1) */ 306#define EXSIG 5 /* trapped signal in wait(1) */
308 307
@@ -7618,7 +7617,7 @@ shellexec(char **argv, const char *path, int idx)
7618 exitstatus = exerrno; 7617 exitstatus = exerrno;
7619 TRACE(("shellexec failed for %s, errno %d, suppress_int %d\n", 7618 TRACE(("shellexec failed for %s, errno %d, suppress_int %d\n",
7620 argv[0], e, suppress_int)); 7619 argv[0], e, suppress_int));
7621 ash_msg_and_raise(EXEXEC, "%s: %s", argv[0], errmsg(e, "not found")); 7620 ash_msg_and_raise(EXEXIT, "%s: %s", argv[0], errmsg(e, "not found"));
7622 /* NOTREACHED */ 7621 /* NOTREACHED */
7623} 7622}
7624 7623
@@ -9635,7 +9634,7 @@ evalcommand(union node *cmd, int flags)
9635 if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { 9634 if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) {
9636 int exit_status; 9635 int exit_status;
9637 int i = exception_type; 9636 int i = exception_type;
9638 if (i == EXEXIT || i == EXEXEC) 9637 if (i == EXEXIT)
9639 goto raise; 9638 goto raise;
9640 exit_status = 2; 9639 exit_status = 2;
9641 if (i == EXINT) 9640 if (i == EXINT)