33 #define CURLFNM_CHARSET_LEN (sizeof(char) * 256) 34 #define CURLFNM_CHSET_SIZE (CURLFNM_CHARSET_LEN + 15) 36 #define CURLFNM_NEGATE CURLFNM_CHARSET_LEN 38 #define CURLFNM_ALNUM (CURLFNM_CHARSET_LEN + 1) 39 #define CURLFNM_DIGIT (CURLFNM_CHARSET_LEN + 2) 40 #define CURLFNM_XDIGIT (CURLFNM_CHARSET_LEN + 3) 41 #define CURLFNM_ALPHA (CURLFNM_CHARSET_LEN + 4) 42 #define CURLFNM_PRINT (CURLFNM_CHARSET_LEN + 5) 43 #define CURLFNM_BLANK (CURLFNM_CHARSET_LEN + 6) 44 #define CURLFNM_LOWER (CURLFNM_CHARSET_LEN + 7) 45 #define CURLFNM_GRAPH (CURLFNM_CHARSET_LEN + 8) 46 #define CURLFNM_SPACE (CURLFNM_CHARSET_LEN + 9) 47 #define CURLFNM_UPPER (CURLFNM_CHARSET_LEN + 10) 67 #define SETCHARSET_OK 1 68 #define SETCHARSET_FAIL 0 70 static int parsekeyword(
unsigned char **pattern,
unsigned char *charset)
74 char keyword[
KEYLEN] = { 0 };
77 unsigned char *
p = *pattern;
78 for(i = 0; !found; i++) {
101 if(strcmp(keyword,
"digit") == 0)
103 else if(strcmp(keyword,
"alnum") == 0)
105 else if(strcmp(keyword,
"alpha") == 0)
107 else if(strcmp(keyword,
"xdigit") == 0)
109 else if(strcmp(keyword,
"print") == 0)
111 else if(strcmp(keyword,
"graph") == 0)
113 else if(strcmp(keyword,
"space") == 0)
115 else if(strcmp(keyword,
"blank") == 0)
117 else if(strcmp(keyword,
"upper") == 0)
119 else if(strcmp(keyword,
"lower") == 0)
130 unsigned char rangestart = 0;
131 unsigned char lastchar = 0;
132 bool something_found =
FALSE;
143 something_found =
TRUE;
148 something_found =
TRUE;
154 char c2 = *((*p) + 1);
167 something_found =
TRUE;
169 else if(c ==
'?' || c ==
'*') {
170 something_found =
TRUE;
174 else if(c ==
'^' || c ==
'!') {
175 if(!something_found) {
178 something_found =
TRUE;
190 something_found =
TRUE;
205 something_found =
TRUE;
256 if(c >= rangestart) {
260 charset[lastchar] = 0;
262 while(rangestart++ <= c)
263 charset[rangestart-1] = 1;
310 static int loop(
const unsigned char *pattern,
const unsigned char *
string)
313 unsigned char *
p = (
unsigned char *)pattern;
314 unsigned char *
s = (
unsigned char *)
string;
322 while(*(p + 1) ==
'*')
324 if(*s ==
'\0' && *(p + 1) ==
'\0')
344 else if(*p ==
'\0') {
349 else if(*p ==
'\\') {
354 unsigned char *pp = p + 1;
357 if(charset[(
unsigned int)*s])
420 if(!pattern || !
string) {
423 return loop((
unsigned char *)pattern, (
unsigned char *)
string);
static int loop(const unsigned char *pattern, const unsigned char *string)
UNITTEST_START char * ptr
static int setcharset(unsigned char **p, unsigned char *charset)
int Curl_fnmatch(void *ptr, const char *pattern, const char *string)
#define CURL_FNMATCH_FAIL
static int parsekeyword(unsigned char **pattern, unsigned char *charset)
#define CURL_FNMATCH_NOMATCH
#define CURLFNM_CHSET_SIZE
#define CURL_FNMATCH_MATCH