about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/subst.c7
-rw-r--r--Test/D04parameter.ztst10
3 files changed, 17 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index c3953ec7d..a4a141eb1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-08-12  Barton E. Schaefer  <schaefer@zsh.org>
+
+	* 39028: Src/subst.c, Test/D04parameter.ztst: more join/split
+	cases fixed and tested.
+
 2016-08-10  Barton E. Schaefer  <schaefer@zsh.org>
 
 	* 39019 (cf. PWS 39013): Src/subst.c, Test/D04parameter.ztst:
diff --git a/Src/subst.c b/Src/subst.c
index ae3e4c40c..99e1650d0 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -3461,11 +3461,12 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
 		val = sepjoin(aval, sep, 1);
 		isarr = 0;
 		ms_flags = 0;
-	    } else if (force_split && nojoin == 2) {
+	    } else if (force_split && (spsep || nojoin == 2)) {
 		/* Hack to simulate splitting individual elements:
-		 * first join on what we later use to split
+		 * forced joining as previously determined, or
+		 * join on what we later use to forcibly split
 		 */
-		val = sepjoin(aval, spsep, 1);
+		val = sepjoin(aval, (nojoin == 1 ? sep : spsep), 1);
 		isarr = 0;
 	    }
 	}
diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst
index 35630c5ca..460a841c3 100644
--- a/Test/D04parameter.ztst
+++ b/Test/D04parameter.ztst
@@ -1970,8 +1970,14 @@
   set -- one:two bucklemy:shoe
   IFS=
   setopt shwordsplit
-  print -l ${@}
+  print -l ${@} ${(s.:.)*} ${(s.:.j.-.)*}
   )
-0:Joining of $@ does not happen when IFS is empty
+0:Joining of $@ does not happen when IFS is empty, but splitting $* does
 >one:two
 >bucklemy:shoe
+>one
+>twobucklemy
+>shoe
+>one
+>two-bucklemy
+>shoe