summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2025-08-09 12:23:21 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2025-08-09 12:23:21 +0200
commit4eb4141b225e229b7263ded195307dd9d228c2af (patch)
treef2967cb7e26eade126946b5a9b88c739d320e565 /shell
parent6d4476258993d82a14ec060c53e41199d2f5eef5 (diff)
ash: eval: Always set exitstatus in evaltree
Upstream commit: Date: Tue, 6 Dec 2022 16:49:14 +0800 eval: Always set exitstatus in evaltree There is no harm in setting exitstatus unconditionally in evaltree. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/shell/ash.c b/shell/ash.c
index aaea641a9..f1339cf3c 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -9357,7 +9357,7 @@ evaltree(union node *n, int flags)
#endif
case NNOT:
status = !evaltree(n->nnot.com, EV_TESTED);
- goto setstatus;
+ break;
case NREDIR:
errlinno = lineno = n->nredir.linno;
expredir(n->nredir.redirect);
@@ -9368,7 +9368,7 @@ evaltree(union node *n, int flags)
}
if (n->nredir.redirect)
popredir(/*drop:*/ 0);
- goto setstatus;
+ break;
case NCMD:
evalfn = evalcommand;
checkexit:
@@ -9412,7 +9412,7 @@ evaltree(union node *n, int flags)
evalfn = evaltree;
calleval:
status = evalfn(n, flags);
- goto setstatus;
+ break;
}
case NIF:
status = evaltree(n->nif.test, EV_TESTED);
@@ -9426,17 +9426,18 @@ evaltree(union node *n, int flags)
goto evaln;
}
status = 0;
- goto setstatus;
+ break;
case NDEFUN:
defun(n);
/* Not necessary. To test it:
* "false; f() { qwerty; }; echo $?" should print 0.
*/
/* status = 0; */
- setstatus:
- exitstatus = status;
break;
}
+
+ exitstatus = status;
+
out:
/* Order of checks below is important:
* signal handlers trigger before exit caused by "set -e".