diff options
author | Bart Schaefer <barts@users.sourceforge.net> | 2005-12-15 04:24:04 +0000 |
---|---|---|
committer | Bart Schaefer <barts@users.sourceforge.net> | 2005-12-15 04:24:04 +0000 |
commit | 174ad4a80fa13a843a319c516e703ae74858ad39 (patch) | |
tree | 1423c7b97cf838be9f0d8af3913475d4914c700d /Src/signals.c | |
parent | c3e8aec7592bc9957c86a8be7883fdb6ae738095 (diff) | |
download | zsh-174ad4a80fa13a843a319c516e703ae74858ad39.tar.gz zsh-174ad4a80fa13a843a319c516e703ae74858ad39.tar.xz zsh-174ad4a80fa13a843a319c516e703ae74858ad39.zip |
21814: error handling for traps in "always" constructs.
Diffstat (limited to 'Src/signals.c')
-rw-r--r-- | Src/signals.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Src/signals.c b/Src/signals.c index e9571ef5b..0b508f869 100644 --- a/Src/signals.c +++ b/Src/signals.c @@ -1003,6 +1003,7 @@ dotrapargs(int sig, int *sigtr, void *sigfn) int trapret = 0; int obreaks = breaks; int isfunc; + int traperr; /* if signal is being ignored or the trap function * * is NULL, then return * @@ -1097,8 +1098,8 @@ dotrapargs(int sig, int *sigtr, void *sigfn) * execrestore. */ trapret = trapreturn + 1; - } else if (errflag) - trapret = 1; + } + traperr = errflag; execrestore(); lexrestore(); @@ -1110,6 +1111,10 @@ dotrapargs(int sig, int *sigtr, void *sigfn) lastval = trapret-1; } } else { + if (traperr && emulation != EMULATE_SH) + lastval = 1; + if (try_tryflag) + errflag = traperr; breaks += obreaks; if (breaks > loops) breaks = loops; |