# include <strings.h>
#endif
-#ifdef STDC_HEADERS
+#if defined STDC_HEADERS || defined _LIBC
# include <stdlib.h>
#endif
/* Nonzero if the sense of the character class is inverted. */
static int posixly_correct;
register int not;
+ char cold;
if (posixly_correct == 0)
posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
(n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
return FNM_NOMATCH;
+ if (*n == '/' && (flags & FNM_FILE_NAME))
+ /* `/' cannot be matched. */
+ return FNM_NOMATCH;
+
not = (*p == '!' || (posixly_correct < 0 && *p == '^'));
if (not)
++p;
else if (FOLD (c) == fn)
goto matched;
+ cold = c;
c = *p++;
+ if (c == '-' && *p != ']')
+ {
+ /* It is a range. */
+ char cend = *p++;
+ if (!(flags & FNM_NOESCAPE) && cend == '\\')
+ cend = *p++;
+ if (cend == '\0')
+ return FNM_NOMATCH;
+
+ if (cold <= fn && fn <= FOLD (cend))
+ goto matched;
+
+ c = *p++;
+ }
if (c == ']')
break;
}