mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-06-01 12:56:04 +02:00
26061: fix clash between process subst and numeric glob
26062: additional compmatch change, missed from 26047
This commit is contained in:
parent
0d0e497c69
commit
14231691e1
|
@ -1,3 +1,11 @@
|
|||
2008-11-18 Peter Stephenson <pws@csr.com>
|
||||
|
||||
* 26062: Src/Zle/compmatch.c: missed change needed with 26047.
|
||||
|
||||
* 26061: Src/lex.c, Src/parse.c, Src/subst.c, Src/zsh.h,
|
||||
Test/D02glob.ztst: fix clashes between numeric glob and
|
||||
process substitution such as "<->(N)".
|
||||
|
||||
2008-11-17 Peter Stephenson <pws@csr.com>
|
||||
|
||||
* 26056: Doc/Zsh/expn.yo, Src/exec.c: < <(...)more_stuff is
|
||||
|
|
|
@ -1812,7 +1812,6 @@ bld_line(Cmatcher mp, ZLE_STRING_T line, char *mword, char *word,
|
|||
/* we now reuse mp, lpat, wpat for the global matchers */
|
||||
MB_METACHARINIT();
|
||||
while (llen && wlen) {
|
||||
convchar_t wchr;
|
||||
int wmtp;
|
||||
convchar_t *wp;
|
||||
Cpattern tmpgenpat;
|
||||
|
@ -1835,7 +1834,7 @@ bld_line(Cmatcher mp, ZLE_STRING_T line, char *mword, char *word,
|
|||
if (curgenpat->tp == CPAT_CHAR)
|
||||
lchr = curgenpat->u.chr;
|
||||
else
|
||||
lchr = wchr;
|
||||
lchr = *wp;
|
||||
|
||||
if (sfx)
|
||||
*--line = lchr;
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
/* tokens */
|
||||
|
||||
/**/
|
||||
mod_export char ztokens[] = "#$^*()$=|{}[]`<>?~`,'\"\\\\";
|
||||
mod_export char ztokens[] = "#$^*()$=|{}[]`<>>?~`,'\"\\\\";
|
||||
|
||||
/* parts of the current token */
|
||||
|
||||
|
@ -1160,7 +1160,7 @@ gettokstr(int c, int sub)
|
|||
lexstop = 0;
|
||||
goto brk;
|
||||
}
|
||||
add(Outang);
|
||||
add(OutangProc);
|
||||
if (skipcomm()) {
|
||||
peek = LEXERR;
|
||||
goto brk;
|
||||
|
|
|
@ -1574,7 +1574,7 @@ par_simple(int *complex, int nr)
|
|||
* we need process handling.
|
||||
*/
|
||||
if (p[1] == Inpar &&
|
||||
(*p == Equals || *p == Inang || *p == Outang)) {
|
||||
(*p == Equals || *p == Inang || *p == OutangProc)) {
|
||||
*complex = 1;
|
||||
break;
|
||||
}
|
||||
|
@ -1833,7 +1833,7 @@ par_redir(int *rp, char *idstring)
|
|||
}
|
||||
case REDIR_WRITE:
|
||||
case REDIR_WRITENOW:
|
||||
if (tokstr[0] == Outang && tokstr[1] == Inpar)
|
||||
if (tokstr[0] == OutangProc && tokstr[1] == Inpar)
|
||||
/* > >(...) */
|
||||
type = REDIR_OUTPIPE;
|
||||
else if (tokstr[0] == Inang && tokstr[1] == Inpar)
|
||||
|
@ -1843,11 +1843,12 @@ par_redir(int *rp, char *idstring)
|
|||
if (tokstr[0] == Inang && tokstr[1] == Inpar)
|
||||
/* < <(...) */
|
||||
type = REDIR_INPIPE;
|
||||
else if (tokstr[0] == Outang && tokstr[1] == Inpar)
|
||||
else if (tokstr[0] == OutangProc && tokstr[1] == Inpar)
|
||||
YYERROR(ecused);
|
||||
break;
|
||||
case REDIR_READWRITE:
|
||||
if ((tokstr[0] == Inang || tokstr[0] == Outang) && tokstr[1] == Inpar)
|
||||
if ((tokstr[0] == Inang || tokstr[0] == OutangProc) &&
|
||||
tokstr[1] == Inpar)
|
||||
type = tokstr[0] == Inang ? REDIR_INPIPE : REDIR_OUTPIPE;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -152,12 +152,13 @@ stringsubst(LinkList list, LinkNode node, int ssub, int asssub)
|
|||
char *str = str3, c;
|
||||
|
||||
while (!errflag && (c = *str)) {
|
||||
if (((c = *str) == Inang || c == Outang || (str == str3 && c == Equals))
|
||||
if (((c = *str) == Inang || c == OutangProc ||
|
||||
(str == str3 && c == Equals))
|
||||
&& str[1] == Inpar) {
|
||||
char *subst, *rest, *snew, *sptr;
|
||||
int str3len = str - str3, sublen, restlen;
|
||||
|
||||
if (c == Inang || c == Outang)
|
||||
if (c == Inang || c == OutangProc)
|
||||
subst = getproc(str, &rest); /* <(...) or >(...) */
|
||||
else
|
||||
subst = getoutputfile(str, &rest); /* =(...) */
|
||||
|
|
19
Src/zsh.h
19
Src/zsh.h
|
@ -147,28 +147,29 @@ struct mathfunc {
|
|||
#define Tick ((char) 0x91)
|
||||
#define Inang ((char) 0x92)
|
||||
#define Outang ((char) 0x93)
|
||||
#define Quest ((char) 0x94)
|
||||
#define Tilde ((char) 0x95)
|
||||
#define Qtick ((char) 0x96)
|
||||
#define Comma ((char) 0x97)
|
||||
#define OutangProc ((char) 0x94)
|
||||
#define Quest ((char) 0x95)
|
||||
#define Tilde ((char) 0x96)
|
||||
#define Qtick ((char) 0x97)
|
||||
#define Comma ((char) 0x98)
|
||||
/*
|
||||
* Null arguments: placeholders for single and double quotes
|
||||
* and backslashes.
|
||||
*/
|
||||
#define Snull ((char) 0x98)
|
||||
#define Dnull ((char) 0x99)
|
||||
#define Bnull ((char) 0x9a)
|
||||
#define Snull ((char) 0x99)
|
||||
#define Dnull ((char) 0x9a)
|
||||
#define Bnull ((char) 0x9b)
|
||||
/*
|
||||
* Backslash which will be returned to "\" instead of being stripped
|
||||
* when we turn the string into a printable format.
|
||||
*/
|
||||
#define Bnullkeep ((char) 0x9b)
|
||||
#define Bnullkeep ((char) 0x9c)
|
||||
/*
|
||||
* Null argument that does not correspond to any character.
|
||||
* This should be last as it does not appear in ztokens and
|
||||
* is used to initialise the IMETA type in inittyptab().
|
||||
*/
|
||||
#define Nularg ((char) 0x9c)
|
||||
#define Nularg ((char) 0x9d)
|
||||
|
||||
/*
|
||||
* Take care to update the use of IMETA appropriately when adding
|
||||
|
|
|
@ -386,3 +386,9 @@
|
|||
[[ foo = (#c0)foo ]]
|
||||
1:Misplaced (#c...) flag
|
||||
?(eval):1: bad pattern: (#c0)foo
|
||||
|
||||
mkdir glob.tmp/dir5
|
||||
touch glob.tmp/dir5/N123
|
||||
print glob.tmp/dir5/N<->(N)
|
||||
0:Numeric glob is not usurped by process substitution.
|
||||
>glob.tmp/dir5/N123
|
||||
|
|
Loading…
Reference in New Issue