diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/subst.c | 8 | ||||
-rw-r--r-- | Src/utils.c | 6 |
2 files changed, 9 insertions, 5 deletions
diff --git a/Src/subst.c b/Src/subst.c index df60a27ab..d76215838 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -2738,8 +2738,8 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) char *tmps; unmetafy(*ap, &len); untokenize(*ap); - tmps = unmetafy(promptexpand(metafy(*ap, len, META_NOALLOC), - 0, NULL, NULL, NULL), &len); + tmps = promptexpand(metafy(*ap, len, META_NOALLOC), + 0, NULL, NULL, NULL); *ap = dupstring(tmps); free(tmps); } @@ -2749,8 +2749,8 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) val = dupstring(val), copied = 1; unmetafy(val, &len); untokenize(val); - tmps = unmetafy(promptexpand(metafy(val, len, META_NOALLOC), - 0, NULL, NULL, NULL), &len); + tmps = promptexpand(metafy(val, len, META_NOALLOC), + 0, NULL, NULL, NULL); val = dupstring(tmps); free(tmps); } diff --git a/Src/utils.c b/Src/utils.c index 1dd8c3577..550f7bfa7 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -857,7 +857,9 @@ finddir(char *s) scanhashtable(nameddirtab, 0, 0, 0, finddir_scan, 0); if (func) { - char **ares = subst_string_by_func(func, "d", finddir_full); + char *dir_meta = metafy(finddir_full, strlen(finddir_full), + META_ALLOC); + char **ares = subst_string_by_func(func, "d", dir_meta); int len; if (ares && arrlen(ares) >= 2 && (len = (int)zstrtol(ares[1], NULL, 10)) > finddir_best) { @@ -868,6 +870,8 @@ finddir(char *s) finddir_last->diff = len - strlen(finddir_last->node.nam); finddir_best = len; } + if (dir_meta != finddir_full) + zsfree(dir_meta); } return finddir_last; |