diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2014-10-06 10:39:47 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2014-10-06 10:39:47 +0800 |
commit | da30b4b787695fbf77e5d941ff350a66ca572bcb (patch) | |
tree | 42950a7661b842fe4279bf5c28684def3c8c8fd8 /src/main.c | |
parent | [EVAL] Do not clobber exitstatus in evalcommand (diff) | |
download | dash-da30b4b787695fbf77e5d941ff350a66ca572bcb.tar.gz dash-da30b4b787695fbf77e5d941ff350a66ca572bcb.zip |
[BUILTIN] Exit without arguments in a trap should use status outside traps
POSIX now requires that exit without arguments in a trap should return the last command status prior to executing traps. This patch implements this behaviour. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
-rw-r--r-- | src/main.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c index f79ad7d..29a258d 100644 --- a/src/main.c +++ b/src/main.c @@ -339,8 +339,15 @@ exitcmd(int argc, char **argv) { if (stoppedjobs()) return 0; - if (argc > 1) - exitstatus = number(argv[1]); + + if (argc > 1) { + int status = number(argv[1]); + + exitstatus = status; + if (savestatus >= 0) + savestatus = status; + } + exraise(EXEXIT); /* NOTREACHED */ } |