aboutsummaryrefslogtreecommitdiff
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)
downloadbusybox-w32-4eb4141b225e229b7263ded195307dd9d228c2af.tar.gz
busybox-w32-4eb4141b225e229b7263ded195307dd9d228c2af.tar.bz2
busybox-w32-4eb4141b225e229b7263ded195307dd9d228c2af.zip
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)
9357#endif 9357#endif
9358 case NNOT: 9358 case NNOT:
9359 status = !evaltree(n->nnot.com, EV_TESTED); 9359 status = !evaltree(n->nnot.com, EV_TESTED);
9360 goto setstatus; 9360 break;
9361 case NREDIR: 9361 case NREDIR:
9362 errlinno = lineno = n->nredir.linno; 9362 errlinno = lineno = n->nredir.linno;
9363 expredir(n->nredir.redirect); 9363 expredir(n->nredir.redirect);
@@ -9368,7 +9368,7 @@ evaltree(union node *n, int flags)
9368 } 9368 }
9369 if (n->nredir.redirect) 9369 if (n->nredir.redirect)
9370 popredir(/*drop:*/ 0); 9370 popredir(/*drop:*/ 0);
9371 goto setstatus; 9371 break;
9372 case NCMD: 9372 case NCMD:
9373 evalfn = evalcommand; 9373 evalfn = evalcommand;
9374 checkexit: 9374 checkexit:
@@ -9412,7 +9412,7 @@ evaltree(union node *n, int flags)
9412 evalfn = evaltree; 9412 evalfn = evaltree;
9413 calleval: 9413 calleval:
9414 status = evalfn(n, flags); 9414 status = evalfn(n, flags);
9415 goto setstatus; 9415 break;
9416 } 9416 }
9417 case NIF: 9417 case NIF:
9418 status = evaltree(n->nif.test, EV_TESTED); 9418 status = evaltree(n->nif.test, EV_TESTED);
@@ -9426,17 +9426,18 @@ evaltree(union node *n, int flags)
9426 goto evaln; 9426 goto evaln;
9427 } 9427 }
9428 status = 0; 9428 status = 0;
9429 goto setstatus; 9429 break;
9430 case NDEFUN: 9430 case NDEFUN:
9431 defun(n); 9431 defun(n);
9432 /* Not necessary. To test it: 9432 /* Not necessary. To test it:
9433 * "false; f() { qwerty; }; echo $?" should print 0. 9433 * "false; f() { qwerty; }; echo $?" should print 0.
9434 */ 9434 */
9435 /* status = 0; */ 9435 /* status = 0; */
9436 setstatus:
9437 exitstatus = status;
9438 break; 9436 break;
9439 } 9437 }
9438
9439 exitstatus = status;
9440
9440 out: 9441 out:
9441 /* Order of checks below is important: 9442 /* Order of checks below is important:
9442 * signal handlers trigger before exit caused by "set -e". 9443 * signal handlers trigger before exit caused by "set -e".