diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Src/builtin.c | 14 |
2 files changed, 9 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog index 31a31c6f6..c8f41ce75 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2000-09-19 Clint Adams <schizo@debian.org> + * 12847: Src/builtin.c: dynamically allocate z and buf in + bin_whence(). + * 12846: Src/.distfiles, Src/mem.c, Src/string.c, Src/utils.c, Src/zsh.mdd: Move dupstring(), ztrdup(), tricat(), zhtricat(), dyncat(), dupstrpfx(), ztrduppfx(), and appstr() to string.c. diff --git a/Src/builtin.c b/Src/builtin.c index 6fa8da6e3..efbbd20d9 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -2390,17 +2390,14 @@ bin_whence(char *nam, char **argv, char *ops, int func) /* Option -a is to search the entire path, * * rather than just looking for one match. */ if (all) { - char **pp, buf[PATH_MAX], *z; + char **pp, *buf, *z; + pushheap(); for (pp = path; *pp; pp++) { - z = buf; if (**pp) { - strucpy(&z, *pp); - *z++ = '/'; - } - if ((z - buf) + strlen(*argv) >= PATH_MAX) - continue; - strcpy(z, *argv); + z = dyncat(*pp, "/"); + } else z = NULL; + buf = dyncat(z, *argv); if (iscom(buf)) { if (wd) { printf("%s: command\n", *argv); @@ -2420,6 +2417,7 @@ bin_whence(char *nam, char **argv, char *ops, int func) puts(wd ? ": none" : " not found"); returnval = 1; } + popheap(); } else if ((cnam = findcmd(*argv, 1))) { /* Found external command. */ if (wd) { |