39#if defined(LIBC_SCCS) && !defined(lint)
40static char sccsid[] =
"@(#)fnmatch.c 8.2 (Berkeley) 4/16/94";
56static const char *rangematch(
const char *,
char,
int);
60 const char *stringstart;
63 for (stringstart =
string;;)
64 switch (c = *pattern++) {
75 (
string == stringstart ||
87 (
string == stringstart ||
106 while ((
test = *
string) !=
EOS) {
120 rangematch(pattern, *
string,
flags)) ==
NULL)
126 if ((c = *pattern++) ==
EOS) {
136 (tolower((
unsigned char)c) ==
137 tolower((
unsigned char)*
string)))
140 (c ==
'/' &&
string != stringstart ||
141 string == stringstart+1 && *stringstart ==
'/') )
152rangematch(
const char *pattern,
char test,
int flags)
164 if ( (negate = (*pattern ==
'!' || *pattern ==
'^')) )
168 test = tolower((
unsigned char)
test);
170 for (ok = 0; (c = *pattern++) !=
']';) {
177 c = tolower((
unsigned char)c);
180 && (c2 = *(pattern+1)) !=
EOS && c2 !=
']') {
188 c2 = tolower((
unsigned char)c2);
190 if ((
unsigned char)c <= (
unsigned char)
test &&
191 (
unsigned char)
test <= (
unsigned char)c2)
193 }
else if (c ==
test)
196 return (ok == negate ?
NULL : pattern);
strchr(string $haystack, string $needle, bool $before_needle=false)
PHPAPI int fnmatch(const char *pattern, const char *string, int flags)