summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/subst.c21
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);