summaryrefslogtreecommitdiff
path: root/Src/exec.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2007-01-09 21:59:31 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2007-01-09 21:59:31 +0000
commite8b56578db3d971b18d59a5c579ae19b70ec50a1 (patch)
tree746613cf3c5d42d24ebe65cad8bca1b0566f042a /Src/exec.c
parentde815e3d22be721c09d6f0bc1896207cc3e3827b (diff)
downloadzsh-e8b56578db3d971b18d59a5c579ae19b70ec50a1.tar.gz
zsh-e8b56578db3d971b18d59a5c579ae19b70ec50a1.zip
users/11111: add DEBUG_BEFORE_CMD option
Diffstat (limited to 'Src/exec.c')
-rw-r--r--Src/exec.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/Src/exec.c b/Src/exec.c
index d65c0a91e..487838a25 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -865,6 +865,22 @@ execlist(Estate state, int dont_change_job, int exiting)
* semi-colon or ampersand (`sublists'). */
code = *state->pc++;
while (wc_code(code) == WC_LIST && !breaks && !retflag) {
+ int donedebug;
+ if (sigtrapped[SIGDEBUG] && isset(DEBUGBEFORECMD)) {
+ exiting = donetrap;
+ ret = lastval;
+ dotrap(SIGDEBUG);
+ lastval = ret;
+ donetrap = exiting;
+ noerrexit = oldnoerrexit;
+ /*
+ * Only execute the trap once per sublist, even
+ * if the DEBUGBEFORECMD option changes.
+ */
+ donedebug = 1;
+ } else
+ donedebug = 0;
+
ltype = WC_LIST_TYPE(code);
csp = cmdsp;
@@ -969,7 +985,7 @@ sublist_done:
noerrexit = oldnoerrexit;
- if (sigtrapped[SIGDEBUG]) {
+ if (sigtrapped[SIGDEBUG] && !isset(DEBUGBEFORECMD) && !donedebug) {
exiting = donetrap;
ret = lastval;
dotrap(SIGDEBUG);