diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/subst.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/Src/subst.c b/Src/subst.c index e639c96a8..5b1bf8988 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -446,7 +446,7 @@ singsub(char **s) * NULL to use IFS). The return value is true iff the expansion resulted * in an empty list. * - * *ms_flags is set to bits in the enum above as neeed. + * *ms_flags is set to bits in the enum above as needed. */ /**/ @@ -3779,6 +3779,13 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags, * as a scalar.) */ + if (isarr && ssub) { + /* prefork() wants a scalar, so join no matter what else */ + val = sepjoin(aval, NULL, 1); + isarr = 0; + l->list.flags &= ~LF_ARRAY; + } + /* * If a multsub result had whitespace at the start and we're * splitting and there's a previous string, now's the time to do so. @@ -4026,18 +4033,6 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags, y = dupstring(nulstring); setdata(n, (void *) y); } - if (isarr && ssub) { - /* prefork() wants a scalar, so join no matter what else */ - LinkNode tn; - - aval = hlinklist2array(l, 0); - val = sepjoin(aval, NULL, 1); - n = firstnode(l); - for (tn = lastnode(l); tn && tn != n; tn = lastnode(l)) - uremnode(l, tn); - setdata(n, (void *) val); - l->list.flags &= ~LF_ARRAY; - } if (eval) *str = (char *) getdata(n); |