summary refs log tree commit diff
path: root/src/main.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2016-06-07 16:47:59 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2016-09-02 22:10:56 +0800
commitda534b740e628512e8e0e62729d6a2ef521e5096 (patch)
tree738f2514591e0de3ba1b38f40d483af3b90cd87d /src/main.c
parentjobs: Handle string-based job descriptors (diff)
downloaddash-da534b740e628512e8e0e62729d6a2ef521e5096.tar.gz
dash-da534b740e628512e8e0e62729d6a2ef521e5096.zip
eval: Return status in eval functions
The exit status is currently clobbered too early for case statements
and loops.  This patch fixes it by making the eval functions return
the current exit status and setting them in one place -- evaltree.

Harald van Dijk pointed out a number of bugs in the original patch.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
-rw-r--r--src/main.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index 497ac16..fcd3e7d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -225,11 +225,13 @@ cmdloop(int top)
 			}
 			numeof++;
 		} else if (nflag == 0) {
+			int i;
+
 			job_warning = (job_warning == 2) ? 1 : 0;
 			numeof = 0;
-			evaltree(n, 0);
+			i = evaltree(n, 0);
 			if (n)
-				status = exitstatus;
+				status = i;
 		}
 		popstackmark(&smark);