diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2010-11-28 20:22:00 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2010-11-28 20:22:00 +0800 |
commit | a42317f10233cf2fcff033cc705fd14315188374 (patch) | |
tree | cc08389d11e461fee8f30d931df34bc8ae434158 /src | |
parent | [MAN] Document optional open parenthesis for case patterns (diff) | |
download | dash-a42317f10233cf2fcff033cc705fd14315188374.tar.gz dash-a42317f10233cf2fcff033cc705fd14315188374.zip |
[ERROR] Allow the originator of EXERROR to set the exit status
Some errors have exit status values specified by POSIX and it is therefore desirable to be able to set the exit status at the EXERROR source rather than in main.c. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'src')
-rw-r--r-- | src/error.c | 2 | ||||
-rw-r--r-- | src/eval.c | 6 | ||||
-rw-r--r-- | src/main.c | 2 |
3 files changed, 6 insertions, 4 deletions
diff --git a/src/error.c b/src/error.c index e304d3d..f1a358d 100644 --- a/src/error.c +++ b/src/error.c @@ -163,6 +163,8 @@ sh_error(const char *msg, ...) { va_list ap; + exitstatus = 2; + va_start(ap, msg); exverror(EXERROR, msg, ap); /* NOTREACHED */ diff --git a/src/eval.c b/src/eval.c index ea4afc6..013a8dd 100644 --- a/src/eval.c +++ b/src/eval.c @@ -823,11 +823,13 @@ evalcommand(union node *cmd, int flags) } if (status) { +bail: + exitstatus = status; + /* We have a redirection error. */ if (spclbltin > 0) exraise(EXERROR); -bail: - exitstatus = status; + goto out; } diff --git a/src/main.c b/src/main.c index 2bff956..1735c67 100644 --- a/src/main.c +++ b/src/main.c @@ -113,8 +113,6 @@ main(int argc, char **argv) reset(); e = exception; - if (e == EXERROR) - exitstatus = 2; s = state; if (e == EXEXIT || s == 0 || iflag == 0 || shlvl) |