| version 1.1, 1993/03/21 09:45:37 |
version 1.2, 1993/04/10 00:25:35 |
| Line 87 fnmatch(pattern, string, flags) |
|
| Line 87 fnmatch(pattern, string, flags) |
|
| for (;;) |
for (;;) |
| switch (c = *pattern++) { |
switch (c = *pattern++) { |
| case EOS: |
case EOS: |
| return(*string == EOS); |
return(!(*string == EOS)); |
| case '?': |
case '?': |
| if ((test = *string++) == EOS || |
if (((test = *string++) == EOS) || |
| test == '/' && flags & FNM_PATHNAME) |
((test == '/') && (flags & FNM_PATHNAME))) |
| return(0); |
return(1); |
| break; |
break; |
| case '*': |
case '*': |
| c = *pattern; |
c = *pattern; |
| Line 102 fnmatch(pattern, string, flags) |
|
| Line 102 fnmatch(pattern, string, flags) |
|
| /* 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) |
| return(!index(string, '/')); |
return(index(string, '/') != NULL); |
| else |
else |
| return(1); |
|
| else if (c == '/' && flags & FNM_PATHNAME) { |
|
| if ((string = index(string, '/')) == NULL) |
|
| return(0); |
return(0); |
| |
else if ((c == '/') && (flags & FNM_PATHNAME)) { |
| |
if ((string = index(string, '/')) == NULL) |
| |
return(1); |
| break; |
break; |
| } |
} |
| |
|
| /* 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)) |
| return(1); |
return(0); |
| if (test == '/' && flags & FNM_PATHNAME) |
if (test == '/' && flags & FNM_PATHNAME) |
| break; |
break; |
| ++string; |
++string; |
| } |
} |
| return(0); |
return(1); |
| case '[': |
case '[': |
| if ((test = *string++) == EOS || |
if ((test = *string++) == EOS || |
| test == '/' && flags & FNM_PATHNAME) |
test == '/' && flags & FNM_PATHNAME) |
| return(0); |
return(1); |
| if ((pattern = rangematch(pattern, test)) == NULL) |
if ((pattern = rangematch(pattern, test)) == NULL) |
| return(0); |
return(1); |
| break; |
break; |
| case '\\': |
case '\\': |
| if (flags & FNM_QUOTE) { |
if (flags & FNM_QUOTE) { |
| Line 134 fnmatch(pattern, string, flags) |
|
| Line 134 fnmatch(pattern, string, flags) |
|
| --pattern; |
--pattern; |
| } |
} |
| if (c != *string++) |
if (c != *string++) |
| return(0); |
return(1); |
| break; |
break; |
| } |
} |
| /* FALLTHROUGH */ |
/* FALLTHROUGH */ |
| default: |
default: |
| if (c != *string++) |
if (c != *string++) |
| return(0); |
return(1); |
| break; |
break; |
| } |
} |
| } |
} |