diff --git a/ChangeLog b/ChangeLog index 28305e91d..43b251742 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-05-21 Peter Stephenson + + * 18565: Src/subst.c, Test/D04parameter.ztst: when ${(u)...} + reduced an array from more than one element to example one + stuff happened. + 2003-05-19 Peter Stephenson * 18548: Src/Zle/zle_main.c: memory leak when vared'ing arrays diff --git a/Src/subst.c b/Src/subst.c index dc5044959..89ecbab7a 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -1951,17 +1951,6 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) int i; LinkNode on = n; - if (!aval[0] && !plan9) { - if (aptr > (char *) getdata(n) && - aptr[-1] == Dnull && *fstr == Dnull) - *--aptr = '\0', fstr++; - y = (char *) hcalloc((aptr - ostr) + strlen(fstr) + 1); - strcpy(y, ostr); - *str = y + (aptr - ostr); - strcpy(*str, fstr); - setdata(n, y); - return n; - } if (unique) { if(!copied) aval = arrdup(aval); @@ -1970,6 +1959,24 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) 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++; + 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 (sortit) { if (!copied) aval = arrdup(aval); diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index 3327caf9d..5700a0722 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -589,3 +589,13 @@ 0:Parameters associated with (#m) flag >MATCH 16 20 MATCH >5 + + print -l JAMES${(u)${=:-$(echo yes yes)}}JOYCE + print -l JAMES${(u)${=:-$(echo yes yes she said yes i will yes)}}JOYCE +0:Bug with (u) flag reducing arrays to one element +>JAMESyesJOYCE +>JAMESyes +>she +>said +>i +>willJOYCE