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:
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>
|
||||
|
||||
* 39014: Src/zsh_system.h, configure.ac: Use special OpenBSD
|
||||
|
|
21
Src/subst.c
21
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
|
||||
* 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
|
||||
|
|
Loading…
Reference in a new issue