diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2025-08-09 12:23:21 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2025-08-09 12:23:21 +0200 |
| commit | 4eb4141b225e229b7263ded195307dd9d228c2af (patch) | |
| tree | f2967cb7e26eade126946b5a9b88c739d320e565 /shell | |
| parent | 6d4476258993d82a14ec060c53e41199d2f5eef5 (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.c | 13 |
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". |
