From: Denys Vlasenko Date: Sat, 1 Oct 2016 13:27:44 +0000 (+0200) Subject: ash: [EVAL] Revert SKIPEVAL into EXEXIT X-Git-Tag: 1_26_0~211 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0840c91909dd6a9a676ec105ef1ca5e8d36ce6e8;p=oweals%2Fbusybox.git ash: [EVAL] Revert SKIPEVAL into EXEXIT Upstream commit: Date: Tue Aug 11 20:56:53 2009 +1000 [EVAL] Revert SKIPEVAL into EXEXIT Now that eval handles EV_TESTED correctly, we can remove the SKIPEVAL hack and simply use EXEXIT for set -e. Signed-off-by: Herbert Xu Signed-off-by: Denys Vlasenko --- diff --git a/shell/ash.c b/shell/ash.c index d107fa1fd..644ef6c9d 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -8407,7 +8407,6 @@ defun(char *name, union node *func) #define SKIPBREAK (1 << 0) #define SKIPCONT (1 << 1) #define SKIPFUNC (1 << 2) -#define SKIPEVAL (1 << 4) static smallint evalskip; /* set to SKIPxxx if we are skipping commands */ static int skipcount; /* number of levels to skip */ static int funcnest; /* depth of function calls */ @@ -8612,13 +8611,10 @@ evaltree(union node *n, int flags) /* Order of checks below is important: * signal handlers trigger before exit caused by "set -e". */ - if (pending_sig && dotrap()) - goto exexit; - if (checkexit & status) - evalskip |= SKIPEVAL; - - if (flags & EV_EXIT) { - exexit: + if ((pending_sig && dotrap()) + || (checkexit & status) + || (flags & EV_EXIT) + ) { raise_exception(EXEXIT); } @@ -12360,7 +12356,7 @@ cmdloop(int top) if (skip) { evalskip &= ~SKIPFUNC; - return skip & SKIPEVAL; + break; } } return status; @@ -13263,14 +13259,10 @@ procargs(char **argv) static void read_profile(const char *name) { - int skip; - if (setinputfile(name, INPUT_PUSH_FILE | INPUT_NOFILE_OK) < 0) return; - skip = cmdloop(0); + cmdloop(0); popfile(); - if (skip) - exitshell(); } /*