aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonio Ospite <ao2@ao2.it>2018-10-16 14:09:52 +0200
committerBen Hutchings <ben@decadent.org.uk>2020-03-28 21:42:55 +0000
commit7bab7bbbfb0b8914691de08ed22a5cbda336952e (patch)
tree60eed1848000542a6f350b94a4540bbdcbe19281
parent1285f79afbd9686c78c7815203ecbf3e87a81ff8 (diff)
downloadklibc-7bab7bbbfb0b8914691de08ed22a5cbda336952e.tar.gz
[klibc] dash: eval: make traps work when "set -e" is enabled
[ dash commit 06204f0c9f539fcb8cb532166656e80b81bd689a ] When "set -e" is enabled traps are not always executed, in particular the EXIT trap is not executed when the shell exits on an unhandled error. Consider the following test script: #!/bin/dash set -e trap 'ret=$?; echo "EXIT: $ret"' EXIT trap 'exit 2' HUP INT QUIT PIPE TERM read variable By pressing Ctrl-C one would expect the EXIT trap to be called, as it is the case with other shells (bash, zsh), but dash does not do it. By calling dotrap() before jumping to the exit path when checkexit is not zero, dash behaves like other shells. Signed-off-by: Antonio Ospite <ao2@ao2.it> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--usr/dash/eval.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/usr/dash/eval.c b/usr/dash/eval.c
index 01bc5234e36a89..09a5cbf117f0a1 100644
--- a/usr/dash/eval.c
+++ b/usr/dash/eval.c
@@ -307,11 +307,11 @@ setstatus:
break;
}
out:
+ dotrap();
+
if (checkexit & status)
goto exexit;
- dotrap();
-
if (flags & EV_EXIT) {
exexit:
exraise(EXEXIT);