diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2003-05-21 16:20:54 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2003-05-21 16:20:54 +0000 |
commit | c7a2d2225e41e38f54ace2809fd61d3867fdd43b (patch) | |
tree | d4b27fc1e5b51773c0062c60b76eb88e07fe4085 /Src | |
parent | 6d9135befe12593ebc756cc7608d241cb892d096 (diff) | |
download | zsh-c7a2d2225e41e38f54ace2809fd61d3867fdd43b.tar.gz zsh-c7a2d2225e41e38f54ace2809fd61d3867fdd43b.tar.xz zsh-c7a2d2225e41e38f54ace2809fd61d3867fdd43b.zip |
18565: bug when ${(u)...} reduced array to length 1
Diffstat (limited to 'Src')
-rw-r--r-- | Src/subst.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/Src/subst.c b/Src/subst.c index dc5044959..89ecbab7a 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -1951,25 +1951,32 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) int i; LinkNode on = n; - if (!aval[0] && !plan9) { + if (unique) { + if(!copied) + aval = arrdup(aval); + + i = arrlen(aval); + if (i > 1) + zhuniqarray(aval); + } + if ((!aval[0] || !aval[1]) && !plan9) { + int vallen; if (aptr > (char *) getdata(n) && aptr[-1] == Dnull && *fstr == Dnull) *--aptr = '\0', fstr++; - y = (char *) hcalloc((aptr - ostr) + strlen(fstr) + 1); + vallen = aval[0] ? strlen(aval[0]) : 0; + y = (char *) hcalloc((aptr - ostr) + vallen + strlen(fstr) + 1); strcpy(y, ostr); *str = y + (aptr - ostr); + if (vallen) + { + strcpy(*str, aval[0]); + *str += vallen; + } strcpy(*str, fstr); setdata(n, y); return n; } - if (unique) { - if(!copied) - aval = arrdup(aval); - - i = arrlen(aval); - if (i > 1) - zhuniqarray(aval); - } if (sortit) { if (!copied) aval = arrdup(aval); |