| version 1.7, 1993/11/09 18:22:09 |
version 1.8, 1993/11/11 03:21:24 |
| Line 55 fnmatch(pattern, string, flags) |
|
| Line 55 fnmatch(pattern, string, flags) |
|
| register const char *pattern, *string; |
register const char *pattern, *string; |
| int flags; |
int flags; |
| { |
{ |
| |
const char *stringstart = string; |
| register char c; |
register char c; |
| char test; |
char test; |
| |
|
| Line 63 fnmatch(pattern, string, flags) |
|
| Line 64 fnmatch(pattern, string, flags) |
|
| case EOS: |
case EOS: |
| return (*string == EOS ? 0 : FNM_NOMATCH); |
return (*string == EOS ? 0 : FNM_NOMATCH); |
| case '?': |
case '?': |
| if ((test = *string++) == EOS || |
if (*string == EOS) |
| test == '/' && flags & FNM_PATHNAME) |
|
| return (FNM_NOMATCH); |
return (FNM_NOMATCH); |
| |
if (*string == '/' && (flags & FNM_PATHNAME)) |
| |
return (FNM_NOMATCH); |
| |
if (*string == '.' && (flags & FNM_PERIOD) && |
| |
(string == stringstart || ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) |
| |
return (FNM_NOMATCH); |
| |
++string; |
| break; |
break; |
| case '*': |
case '*': |
| c = *pattern; |
c = *pattern; |
| Line 73 fnmatch(pattern, string, flags) |
|
| Line 79 fnmatch(pattern, string, flags) |
|
| while (c == '*') |
while (c == '*') |
| c = *++pattern; |
c = *++pattern; |
| |
|
| |
if (*string == '.' && (flags & FNM_PERIOD) && |
| |
(string == stringstart || ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) |
| |
return (FNM_NOMATCH); |
| |
|
| /* Optimize for pattern with * at end or before /. */ |
/* Optimize for pattern with * at end or before /. */ |
| if (c == EOS) |
if (c == EOS) |
| if (flags & FNM_PATHNAME) |
if (flags & FNM_PATHNAME) |
| Line 88 fnmatch(pattern, string, flags) |
|
| Line 98 fnmatch(pattern, string, flags) |
|
| |
|
| /* General case, use recursion. */ |
/* General case, use recursion. */ |
| while ((test = *string) != EOS) { |
while ((test = *string) != EOS) { |
| if (!fnmatch(pattern, string, flags)) |
if (!fnmatch(pattern, string, flags & ~FNM_PERIOD)) |
| return (0); |
return (0); |
| if (test == '/' && flags & FNM_PATHNAME) |
if (test == '/' && flags & FNM_PATHNAME) |
| break; |
break; |
| Line 96 fnmatch(pattern, string, flags) |
|
| Line 106 fnmatch(pattern, string, flags) |
|
| } |
} |
| return (FNM_NOMATCH); |
return (FNM_NOMATCH); |
| case '[': |
case '[': |
| if ((test = *string++) == EOS || |
if (*string == EOS) |
| test == '/' && flags & FNM_PATHNAME) |
return (FNM_NOMATCH); |
| |
if (*string == '/' && flags & FNM_PATHNAME) |
| return (FNM_NOMATCH); |
return (FNM_NOMATCH); |
| if ((pattern = rangematch(pattern, test, flags)) == NULL) |
if ((pattern = rangematch(pattern, *string, flags)) == NULL) |
| return (FNM_NOMATCH); |
return (FNM_NOMATCH); |
| |
++string; |
| break; |
break; |
| case '\\': |
case '\\': |
| if (!(flags & FNM_NOESCAPE)) { |
if (!(flags & FNM_NOESCAPE)) { |