mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-12-08 06:21:40 +01:00
41828, 41830: skip SHFILEEXPANSION for new nodes added by stringsubst() in prefork()
This commit is contained in:
parent
82c26793e4
commit
b84d69cf52
3 changed files with 36 additions and 2 deletions
|
|
@ -1,3 +1,10 @@
|
||||||
|
2017-10-08 Barton E. Schaefer <schaefer@zsh.org>
|
||||||
|
|
||||||
|
* 41830: Test/E01options.ztst: test for 41828.
|
||||||
|
|
||||||
|
* 41828: Src/subst.c: skip SHFILEEXPANSION for new nodes added
|
||||||
|
by stringsubst() in prefork().
|
||||||
|
|
||||||
2017-10-07 Oliver Kiddle <opk@zsh.org>
|
2017-10-07 Oliver Kiddle <opk@zsh.org>
|
||||||
|
|
||||||
* 41827: Completion/Zsh/Context/_brace_parameter: correct
|
* 41827: Completion/Zsh/Context/_brace_parameter: correct
|
||||||
|
|
|
||||||
19
Src/subst.c
19
Src/subst.c
|
|
@ -106,15 +106,20 @@ prefork(LinkList list, int flags, int *ret_flags)
|
||||||
ret_flags = &ret_flags_local; /* will be discarded */
|
ret_flags = &ret_flags_local; /* will be discarded */
|
||||||
|
|
||||||
queue_signals();
|
queue_signals();
|
||||||
for (node = firstnode(list); node; incnode(node)) {
|
node = firstnode(list);
|
||||||
|
while (node) {
|
||||||
|
LinkNode nextnode = 0;
|
||||||
if ((flags & (PREFORK_SINGLE|PREFORK_ASSIGN)) == PREFORK_ASSIGN &&
|
if ((flags & (PREFORK_SINGLE|PREFORK_ASSIGN)) == PREFORK_ASSIGN &&
|
||||||
(insnode = keyvalpairelement(list, node))) {
|
(insnode = keyvalpairelement(list, node))) {
|
||||||
node = insnode;
|
node = insnode;
|
||||||
|
incnode(node);
|
||||||
*ret_flags |= PREFORK_KEY_VALUE;
|
*ret_flags |= PREFORK_KEY_VALUE;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (errflag)
|
if (errflag) {
|
||||||
|
unqueue_signals();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (isset(SHFILEEXPANSION)) {
|
if (isset(SHFILEEXPANSION)) {
|
||||||
/*
|
/*
|
||||||
* Here and below we avoid taking the address
|
* Here and below we avoid taking the address
|
||||||
|
|
@ -132,6 +137,12 @@ prefork(LinkList list, int flags, int *ret_flags)
|
||||||
* testing if cptr changed...
|
* testing if cptr changed...
|
||||||
*/
|
*/
|
||||||
setdata(node, cptr);
|
setdata(node, cptr);
|
||||||
|
/*
|
||||||
|
* Advance now because we must not expand filenames again
|
||||||
|
* after string substitution (which may insert new nodes).
|
||||||
|
*/
|
||||||
|
nextnode = node;
|
||||||
|
incnode(nextnode);
|
||||||
}
|
}
|
||||||
if (!(node = stringsubst(list, node,
|
if (!(node = stringsubst(list, node,
|
||||||
flags & ~(PREFORK_TYPESET|PREFORK_ASSIGN),
|
flags & ~(PREFORK_TYPESET|PREFORK_ASSIGN),
|
||||||
|
|
@ -139,6 +150,10 @@ prefork(LinkList list, int flags, int *ret_flags)
|
||||||
unqueue_signals();
|
unqueue_signals();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (isset(SHFILEEXPANSION))
|
||||||
|
node = nextnode;
|
||||||
|
else
|
||||||
|
incnode(node);
|
||||||
}
|
}
|
||||||
for (node = firstnode(list); node; incnode(node)) {
|
for (node = firstnode(list); node; incnode(node)) {
|
||||||
if (node == stop)
|
if (node == stop)
|
||||||
|
|
|
||||||
|
|
@ -1026,6 +1026,18 @@
|
||||||
>$lspath $lspath =
|
>$lspath $lspath =
|
||||||
>$lspath
|
>$lspath
|
||||||
|
|
||||||
|
() {
|
||||||
|
emulate -L sh
|
||||||
|
v='~/one ~/two'
|
||||||
|
print -l -- $v $v
|
||||||
|
}
|
||||||
|
0:SH_FILE_EXPANSION option with GLOB_SUBST et al.
|
||||||
|
F:Regression test for workers/41811
|
||||||
|
>~/one
|
||||||
|
>~/two
|
||||||
|
>~/one
|
||||||
|
>~/two
|
||||||
|
|
||||||
testpat() {
|
testpat() {
|
||||||
if [[ $1 = ${~2} ]]; then print $1 $2 yes; else print $1 $2 no; fi
|
if [[ $1 = ${~2} ]]; then print $1 $2 yes; else print $1 $2 no; fi
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue