1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-07 11:41:16 +02:00

39019 (cf. PWS 39013): fix SHWORDSPLIT regression introduced by workers/29313

Also add test cases for more join/split combinations
This commit is contained in:
Barton E. Schaefer 2016-08-10 18:33:04 -07:00
parent caf48686d0
commit f7c3aa170b
2 changed files with 21 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2016-08-10 Barton E. Schaefer <schaefer@zsh.org>
* 39019 (cf. PWS 39013): Src/subst.c, Test/D04parameter.ztst:
fix SHWORDSPLIT regression introduced by workers/29313; add
test cases for more join/split combinations.
2016-08-10 Mikael Magnusson <mikachu@gmail.com>
* 39014: Src/zsh_system.h, configure.ac: Use special OpenBSD

View file

@ -3454,13 +3454,22 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
* exception is that ${name:-word} and ${name:+word} will have already
* done any requested splitting of the word value with quoting preserved.
*/
if (ssub || (spbreak && isarr >= 0) || spsep || sep) {
if (ssub || spbreak || spsep || sep) {
int force_split = !ssub && (spbreak || spsep);
if (isarr) {
val = sepjoin(aval, sep, 1);
isarr = 0;
ms_flags = 0;
if (nojoin == 0) {
val = sepjoin(aval, sep, 1);
isarr = 0;
ms_flags = 0;
} else if (force_split && nojoin == 2) {
/* Hack to simulate splitting individual elements:
* first join on what we later use to split
*/
val = sepjoin(aval, spsep, 1);
isarr = 0;
}
}
if (!ssub && (spbreak || spsep)) {
if (force_split && !isarr) {
aval = sepsplit(val, spsep, 0, 1);
if (!aval || !aval[0])
val = dupstring("");
@ -3527,7 +3536,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
}
/*
* TODO: It would be really quite nice to abstract the
* isarr and !issarr code into a function which gets
* isarr and !isarr code into a function which gets
* passed a pointer to a function with the effect of
* the promptexpand bit. Then we could use this for
* a lot of stuff and bury val/aval/isarr inside a structure