1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-28 17:10:59 +01:00

31465: fix basic completion and globbing uses of disabled patterns

This commit is contained in:
Peter Stephenson 2013-06-13 18:40:36 +01:00
parent fdf2867e5f
commit 347a63da0c
4 changed files with 87 additions and 36 deletions

View file

@ -3966,3 +3966,78 @@ clearpatterndisables(void)
{
memset(zpc_disables, 0, ZPC_COUNT);
}
/* Check to see if str is eligible for filename generation. */
/**/
mod_export int
haswilds(char *str)
{
char *start;
/* `[' and `]' are legal even if bad patterns are usually not. */
if ((*str == Inbrack || *str == Outbrack) && !str[1])
return 0;
/* If % is immediately followed by ?, then that ? is *
* not treated as a wildcard. This is so you don't have *
* to escape job references such as %?foo. */
if (str[0] == '%' && str[1] == Quest)
str[1] = '?';
/*
* Note that at this point zpc_special has not been set up.
*/
start = str;
for (; *str; str++) {
switch (*str) {
case Inpar:
if ((!isset(SHGLOB) && !zpc_disables[ZPC_INPAR]) ||
(str > start && isset(KSHGLOB) &&
((str[-1] == Quest && !zpc_disables[ZPC_KSH_QUEST]) ||
(str[-1] == Star && !zpc_disables[ZPC_KSH_STAR]) ||
(str[-1] == '+' && !zpc_disables[ZPC_KSH_PLUS]) ||
(str[-1] == '!' && !zpc_disables[ZPC_KSH_BANG]) ||
(str[-1] == '@' && !zpc_disables[ZPC_KSH_AT]))))
return 1;
break;
case Bar:
if (!zpc_disables[ZPC_BAR])
return 1;
break;
case Star:
if (!zpc_disables[ZPC_STAR])
return 1;
break;
case Inbrack:
if (!zpc_disables[ZPC_INBRACK])
return 1;
break;
case Inang:
if (!zpc_disables[ZPC_INANG])
return 1;
break;
case Quest:
if (!zpc_disables[ZPC_QUEST])
return 1;
break;
case Pound:
if (isset(EXTENDEDGLOB) && !zpc_disables[ZPC_HASH])
return 1;
break;
case Hat:
if (isset(EXTENDEDGLOB) && !zpc_disables[ZPC_HAT])
return 1;
break;
}
}
return 0;
}