From 0840c91909dd6a9a676ec105ef1ca5e8d36ce6e8 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 1 Oct 2016 15:27:44 +0200 Subject: [PATCH] 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 --- shell/ash.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) 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(); } /* -- 2.25.1