diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2004-04-23 11:17:13 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2004-04-23 11:17:13 +0000 |
commit | 63442b3eaa58d5fd140306bd2ce85dd994284889 (patch) | |
tree | 651a80eebbdf2fe8b766fb6a260bafa13661169c /Src/builtin.c | |
parent | 5747147afff8a991561a490eca38892c1971a901 (diff) | |
download | zsh-63442b3eaa58d5fd140306bd2ce85dd994284889.tar.gz zsh-63442b3eaa58d5fd140306bd2ce85dd994284889.tar.xz zsh-63442b3eaa58d5fd140306bd2ce85dd994284889.zip |
19810: ksh autoloading
19812: autoloaded traps which are still buggy.
Diffstat (limited to 'Src/builtin.c')
-rw-r--r-- | Src/builtin.c | 14 |
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; } |