summary refs log tree commit diff
path: root/src/main.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2014-10-06 10:39:47 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2014-10-06 10:39:47 +0800
commitda30b4b787695fbf77e5d941ff350a66ca572bcb (patch)
tree42950a7661b842fe4279bf5c28684def3c8c8fd8 /src/main.c
parent[EVAL] Do not clobber exitstatus in evalcommand (diff)
downloaddash-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 'src/main.c')
-rw-r--r--src/main.c11
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 */
 }