summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-10-01 15:27:44 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2016-10-01 15:27:44 +0200
commit0840c91909dd6a9a676ec105ef1ca5e8d36ce6e8 (patch)
treeded6730af2aab42ab591dddaea83c669bd3cb3dc
parent7b3fa1e441bbb34a9edccf17b71efc34499bde9f (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.c20
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();
}
/*