From a42317f10233cf2fcff033cc705fd14315188374 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Sun, 28 Nov 2010 20:22:00 +0800 Subject: [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 --- src/error.c | 2 ++ src/eval.c | 6 ++++-- src/main.c | 2 -- 3 files changed, 6 insertions(+), 4 deletions(-) (limited to 'src') 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) -- cgit 1.4.1