From dd02ad2a8621e2be160c6042e283202285799c28 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Tue, 29 Feb 2000 16:04:29 +0000 Subject: zsh-workers/9937 --- Src/subst.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'Src/subst.c') diff --git a/Src/subst.c b/Src/subst.c index 62ff69beb..1d4ace65e 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -428,7 +428,7 @@ strcatsub(char **d, char *pb, char *pe, char *src, int l, char *s, int glbsub, int pl = pe - pb; if (!pl && (!s || !*s)) { - dest = (*d = (copied ? src : dupstring(src))); + *d = dest = (copied ? src : dupstring(src)); if (glbsub) tokenize(dest); } else { @@ -701,9 +701,13 @@ get_intarg(char **s) /* Parsing for the (e) flag. */ -static int -subst_parse_str(char *s, int single) +static char * +subst_parse_str(char **sp, int single) { + char *s; + + *sp = s = dupstring(*sp); + if (!parsestr(s)) { if (!single) { for (; *s; s++) @@ -1788,7 +1792,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) if (prenum || postnum) x = dopadding(x, prenum, postnum, preone, postone, premul, postmul); - if (eval && subst_parse_str(x, (qt && !nojoin))) + if (eval && subst_parse_str(&x, (qt && !nojoin))) return NULL; xlen = strlen(x); for (tn = firstnode(&tl); @@ -1824,7 +1828,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) if (prenum || postnum) x = dopadding(x, prenum, postnum, preone, postone, premul, postmul); - if (eval && subst_parse_str(x, (qt && !nojoin))) + if (eval && subst_parse_str(&x, (qt && !nojoin))) return NULL; xlen = strlen(x); strcatsub(&y, ostr, aptr, x, xlen, NULL, globsubst, copied); @@ -1839,7 +1843,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) if (prenum || postnum) x = dopadding(x, prenum, postnum, preone, postone, premul, postmul); - if (eval && subst_parse_str(x, (qt && !nojoin))) + if (eval && subst_parse_str(&x, (qt && !nojoin))) return NULL; if (qt && !*x && isarr != 2) y = dupstring(nulstring); @@ -1855,7 +1859,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) if (prenum || postnum) x = dopadding(x, prenum, postnum, preone, postone, premul, postmul); - if (eval && subst_parse_str(x, (qt && !nojoin))) + if (eval && subst_parse_str(&x, (qt && !nojoin))) return NULL; xlen = strlen(x); *str = strcatsub(&y, aptr, aptr, x, xlen, fstr, globsubst, copied); @@ -1874,7 +1878,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) if (prenum || postnum) x = dopadding(x, prenum, postnum, preone, postone, premul, postmul); - if (eval && subst_parse_str(x, (qt && !nojoin))) + if (eval && subst_parse_str(&x, (qt && !nojoin))) return NULL; xlen = strlen(x); *str = strcatsub(&y, ostr, aptr, x, xlen, fstr, globsubst, copied); -- cgit 1.4.1