Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Bug/misfeature with autoloaded TRAPxxx functions
- X-seq: zsh-workers 19801
- From: Peter Stephenson <pws@xxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: Re: Bug/misfeature with autoloaded TRAPxxx functions
- Date: Tue, 20 Apr 2004 13:09:32 +0100
- In-reply-to: "Bart Schaefer"'s message of "Tue, 13 Apr 2004 05:15:24 -0000." <1040413051524.ZM19991@xxxxxxxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
Bart Schaefer wrote:
> ... autoloaded TRAP functions don't work...
I don't think this ever got added... It might be as simple as the
following, which seems to work.
Index: Src/builtin.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/builtin.c,v
retrieving revision 1.114
diff -u -r1.114 builtin.c
--- Src/builtin.c 6 Apr 2004 09:25:18 -0000 1.114
+++ Src/builtin.c 20 Apr 2004 12:05:12 -0000
@@ -2499,14 +2499,32 @@
/* no flags, so just print */
shfunctab->printnode((HashNode) shf, pflags);
} else if (on & PM_UNDEFINED) {
+ int signum, ok = 1;
+
/* Add a new undefined (autoloaded) function to the *
* hash table with the corresponding flags set. */
shf = (Shfunc) zshcalloc(sizeof *shf);
shf->flags = on;
shf->funcdef = mkautofn(shf);
- shfunctab->addnode(shfunctab, ztrdup(*argv), shf);
- if (OPT_ISSET(ops,'X') && eval_autoload(shf, shf->nam, ops, func))
- returnval = 1;
+
+ if (!strncmp(*argv, "TRAP", 4) &&
+ (signum = getsignum(*argv + 4)) != -1) {
+ if (settrap(signum, shf->funcdef)) {
+ freeeprog(shf->funcdef);
+ zfree(shf, sizeof(*shf));
+ returnval = 1;
+ ok = 0;
+ }
+ else
+ sigtrapped[signum] |= ZSIG_FUNC;
+ }
+
+ if (ok) {
+ shfunctab->addnode(shfunctab, ztrdup(*argv), shf);
+ if (OPT_ISSET(ops,'X') &&
+ eval_autoload(shf, shf->nam, ops, func))
+ returnval = 1;
+ }
} else
returnval = 1;
}
--
Peter Stephenson <pws@xxxxxxx> Software Engineer
CSR Ltd., Science Park, Milton Road,
Cambridge, CB4 0WH, UK Tel: +44 (0)1223 692070
**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.
This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.
www.mimesweeper.com
**********************************************************************
Messages sorted by:
Reverse Date,
Date,
Thread,
Author