diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-01 15:27:44 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-01 15:27:44 +0200 |
commit | 0840c91909dd6a9a676ec105ef1ca5e8d36ce6e8 (patch) | |
tree | ded6730af2aab42ab591dddaea83c669bd3cb3dc | |
parent | 7b3fa1e441bbb34a9edccf17b71efc34499bde9f (diff) |
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 <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/ash.c | 20 |
1 files 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(); } /* |