Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: TRAPZERR() in chpwd()



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