summaryrefslogtreecommitdiff
path: root/Src/builtin.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2004-04-23 11:17:13 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2004-04-23 11:17:13 +0000
commit63442b3eaa58d5fd140306bd2ce85dd994284889 (patch)
tree651a80eebbdf2fe8b766fb6a260bafa13661169c /Src/builtin.c
parent5747147afff8a991561a490eca38892c1971a901 (diff)
downloadzsh-63442b3eaa58d5fd140306bd2ce85dd994284889.tar.gz
zsh-63442b3eaa58d5fd140306bd2ce85dd994284889.zip
19810: ksh autoloading
19812: autoloaded traps which are still buggy.
Diffstat (limited to 'Src/builtin.c')
-rw-r--r--Src/builtin.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/Src/builtin.c b/Src/builtin.c
index 010c8c1f3..b8fd3f3b8 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -2515,12 +2515,13 @@ bin_functions(char *name, char **argv, Options ops, int func)
shf = (Shfunc) zshcalloc(sizeof *shf);
shf->flags = on;
shf->funcdef = mkautofn(shf);
+ shfunctab->addnode(shfunctab, ztrdup(*argv), shf);
if (!strncmp(*argv, "TRAP", 4) &&
(signum = getsignum(*argv + 4)) != -1) {
if (settrap(signum, shf->funcdef)) {
- freeeprog(shf->funcdef);
- zfree(shf, sizeof(*shf));
+ shfunctab->removenode(shfunctab, *argv);
+ shfunctab->freenode((HashNode)shf);
returnval = 1;
ok = 0;
}
@@ -2528,12 +2529,9 @@ bin_functions(char *name, char **argv, Options ops, int func)
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;
- }
+ if (ok && OPT_ISSET(ops,'X') &&
+ eval_autoload(shf, shf->nam, ops, func))
+ returnval = 1;
} else
returnval = 1;
}