ash: [EVAL] Revert SKIPEVAL into EXEXIT
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 1 Oct 2016 13:27:44 +0000 (15:27 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 1 Oct 2016 13:27:44 +0000 (15:27 +0200)
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>
shell/ash.c

index d107fa1fd69e4e67ca79d83a59d65b23003dfe5b..644ef6c9d22ab5fa05e2ef458a7d5a3b1a8c1e99 100644 (file)
@@ -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();
 }
 
 /*