diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2008-11-17 16:11:29 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2008-11-17 16:11:29 +0000 |
commit | 2fbc131ca81470a6b9aa077578f2eb58a7e8e008 (patch) | |
tree | e4299db3af1599c149ef6c3ecd484b8dc8f860b0 /Src/subst.c | |
parent | 0662164f13dc1df9ca2cdf1b5ab78d297eed51d1 (diff) | |
download | zsh-2fbc131ca81470a6b9aa077578f2eb58a7e8e008.tar.gz zsh-2fbc131ca81470a6b9aa077578f2eb58a7e8e008.tar.xz zsh-2fbc131ca81470a6b9aa077578f2eb58a7e8e008.zip |
26055: ensure process substitution is handled before parameter and command
Diffstat (limited to 'Src/subst.c')
-rw-r--r-- | Src/subst.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Src/subst.c b/Src/subst.c index 5cc4748b8..a8f894c68 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -152,8 +152,8 @@ stringsubst(LinkList list, LinkNode node, int ssub, int asssub) char *str = str3, c; while (!errflag && (c = *str)) { - if ((c == Inang || c == Outang || (str == str3 && c == Equals)) && - str[1] == Inpar) { + if (((c = *str) == Inang || c == Outang || (str == str3 && c == Equals)) + && str[1] == Inpar) { char *subst, *rest, *snew, *sptr; int str3len = str - str3, sublen, restlen; @@ -181,8 +181,13 @@ stringsubst(LinkList list, LinkNode node, int ssub, int asssub) str3 = snew; str = snew + str3len + sublen; setdata(node, str3); - continue; - } else if ((qt = c == Qstring) || c == String) { + } else + str++; + } + str = str3; + + while (!errflag && (c = *str)) { + if ((qt = c == Qstring) || c == String) { if ((c = str[1]) == Inpar) { if (!qt) list->list.flags |= LF_ARRAY; |