summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClint Adams <clint@users.sourceforge.net>2000-09-18 03:31:31 +0000
committerClint Adams <clint@users.sourceforge.net>2000-09-18 03:31:31 +0000
commit04bf2c822fd3ba20438ec2c51186b0cd438a50f0 (patch)
treea96c80be72e54be1c5c09b049307be0fe9db0519
parent2abf9db38184b94f45a07211014f08fe75ed8ee0 (diff)
downloadzsh-04bf2c822fd3ba20438ec2c51186b0cd438a50f0.tar.gz
zsh-04bf2c822fd3ba20438ec2c51186b0cd438a50f0.zip
12823: use zsh heap in lieu of perm. heap in bin_dot
-rw-r--r--ChangeLog3
-rw-r--r--Src/builtin.c8
-rw-r--r--Src/utils.c14
3 files changed, 21 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 377a1661e..1a3ec84c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2000-09-17 Clint Adams <schizo@debian.org>
+ * 12823: Src/builtin.c, Src/utils.c: use zsh heap instead of
+ permanent heap.
+
* 12821: Src/builtin.c: bin_dot is now independent of PATH_MAX.
2000-09-16 Bart Schaefer <schaefer@zsh.org>
diff --git a/Src/builtin.c b/Src/builtin.c
index 7fae149b0..6fa8da6e3 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -3297,25 +3297,25 @@ bin_dot(char *name, char **argv, char *ops, int func)
break;
}
if (!*s || (ret && isset(PATHDIRS) && diddot < 2 && dotdot == 0)) {
+ pushheap();
/* search path for script */
for (t = path; *t; t++) {
if (!(*t)[0] || ((*t)[0] == '.' && !(*t)[1])) {
if (diddot)
continue;
diddot = 1;
- buf = ztrdup(arg0);
+ buf = dupstring(arg0);
} else
- buf = tricat(*t, "/", arg0);
+ buf = zhtricat(*t, "/", arg0);
s = unmeta(buf);
if (access(s, F_OK) == 0 && stat(s, &st) >= 0
&& !S_ISDIR(st.st_mode)) {
ret = source(enam = buf);
- zsfree(buf);
break;
}
- zsfree(buf);
}
+ popheap();
}
}
/* clean up and return */
diff --git a/Src/utils.c b/Src/utils.c
index ab5fbbeb4..e503b6844 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -3473,6 +3473,20 @@ appstr(char *base, char const *append)
}
/**/
+mod_export char *
+zhtricat(char const *s1, char const *s2, char const *s3)
+{
+ char *ptr;
+
+ ptr = (char *)zhalloc(strlen(s1) + strlen(s2) + strlen(s3) + 1);
+ strcpy(ptr, s1);
+ strcat(ptr, s2);
+ strcat(ptr, s3);
+ return ptr;
+}
+
+
+/**/
static int
upchdir(int n)
{