diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/subst.c | 21 |
2 files changed, 13 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog index 044bbb0df..892d1f25e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-04-02 Barton E. Schaefer <schaefer@zsh.org> + + * 40929 (replaces 40598): Src/subst.c: paramsubst() should always + return scalar when PREFORK_SINGLE was passed in from prefork() + 2017-04-01 Barton E. Schaefer <schaefer@zsh.org> * Sebastian: 40782: Completion/Unix/Type/_hosts: avoid dependency 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); |