Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: TRAPZERR() in chpwd()
- X-seq: zsh-workers 11066
- From: Peter Stephenson <pws@xxxxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx (Zsh hackers list)
- Subject: Re: TRAPZERR() in chpwd()
- Date: Tue, 02 May 2000 13:01:53 +0100
- In-reply-to: "Your message of Tue, 02 May 2000 13:15:15 +0200." <200005021115.NAA02390@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
Sven wrote
> It made things like `false && echo a; echo b' fail. The `echo b'
> wasn't executed.
>
> The simplest way to solve this is by saving and
> restoring donetrap around the execution of the pipelines.
>
>
> I haven't committed the patch... does anyone see a problem with it?
Yes, the `donetrap' test which makes sure that the trap is only executed
once for each occurrence of a non-zero return status isn't working. (I
think this is pretty much the only reason for having donetrap as a static
variable, so saving it and restoring it essentially disables its staticness
altogether, although there may well be some subtlety I'm missing.)
% trap 'print ERRR-or!' ZERR
% f() { false; }
% f
ERRR-or!
ERRR-or!
How about a less drastic version of my previous patch? I think the point
is that we just need the `donetrap' effect but not the goto effect (which I
should have realised before).
We also need some more TRAPZERR stuff in Test/08traps.ztst for this kind of
thing.
Index: Src/exec.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/exec.c,v
retrieving revision 1.5
diff -u -r1.5 exec.c
--- Src/exec.c 2000/04/10 09:18:27 1.5
+++ Src/exec.c 2000/05/02 11:58:56
@@ -842,7 +842,8 @@
* for this sublist. */
donetrap = 1;
goto sublist_done;
- }
+ } else if (WC_SUBLIST_TYPE(code) == WC_SUBLIST_END)
+ donetrap = 1;
}
cmdpush(CS_CMDAND);
break;
@@ -867,7 +868,8 @@
* for this sublist. */
donetrap = 1;
goto sublist_done;
- }
+ } else if (WC_SUBLIST_TYPE(code) == WC_SUBLIST_END)
+ donetrap = 1;
}
cmdpush(CS_CMDOR);
break;
--
Peter Stephenson <pws@xxxxxxxxxxxxxxxxxxxxxxxxx>
Cambridge Silicon Radio, Unit 300, Science Park, Milton Road,
Cambridge, CB4 0XL, UK Tel: +44 (0)1223 392070
Messages sorted by:
Reverse Date,
Date,
Thread,
Author