mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-13 01:31:18 +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:
parent
caf48686d0
commit
f7c3aa170b
2 changed files with 21 additions and 6 deletions
|
@ -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>
|
2016-08-10 Mikael Magnusson <mikachu@gmail.com>
|
||||||
|
|
||||||
* 39014: Src/zsh_system.h, configure.ac: Use special OpenBSD
|
* 39014: Src/zsh_system.h, configure.ac: Use special OpenBSD
|
||||||
|
|
15
Src/subst.c
15
Src/subst.c
|
@ -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
|
* exception is that ${name:-word} and ${name:+word} will have already
|
||||||
* done any requested splitting of the word value with quoting preserved.
|
* 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) {
|
if (isarr) {
|
||||||
|
if (nojoin == 0) {
|
||||||
val = sepjoin(aval, sep, 1);
|
val = sepjoin(aval, sep, 1);
|
||||||
isarr = 0;
|
isarr = 0;
|
||||||
ms_flags = 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);
|
aval = sepsplit(val, spsep, 0, 1);
|
||||||
if (!aval || !aval[0])
|
if (!aval || !aval[0])
|
||||||
val = dupstring("");
|
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
|
* 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
|
* passed a pointer to a function with the effect of
|
||||||
* the promptexpand bit. Then we could use this for
|
* the promptexpand bit. Then we could use this for
|
||||||
* a lot of stuff and bury val/aval/isarr inside a structure
|
* a lot of stuff and bury val/aval/isarr inside a structure
|
||||||
|
|
Loading…
Reference in a new issue