diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/curl_fnmatch.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/curl_fnmatch.c b/lib/curl_fnmatch.c index bd4e61f4e..e8aff6761 100644 --- a/lib/curl_fnmatch.c +++ b/lib/curl_fnmatch.c @@ -30,6 +30,17 @@ /* The last #include file should be: */ #include "memdebug.h" +#ifndef HAVE_FNMATCH + +/* + * TODO: + * + * Make this function match POSIX. Test 1307 includes a set of test patterns + * that returns different results with a POSIX fnmatch() than with this + * implemenation and this is considered a bug where POSIX is the guiding + * light. + */ + #define CURLFNM_CHARSET_LEN (sizeof(char) * 256) #define CURLFNM_CHSET_SIZE (CURLFNM_CHARSET_LEN + 15) @@ -357,3 +368,29 @@ int Curl_fnmatch(void *ptr, const char *pattern, const char *string) } return loop((unsigned char *)pattern, (unsigned char *)string, 2); } +#else +#include <fnmatch.h> +/* + * @unittest: 1307 + */ +int Curl_fnmatch(void *ptr, const char *pattern, const char *string) +{ + int rc; + (void)ptr; /* the argument is specified by the curl_fnmatch_callback + prototype, but not used by Curl_fnmatch() */ + if(!pattern || !string) { + return CURL_FNMATCH_FAIL; + } + rc = fnmatch(pattern, string, 0); + switch(rc) { + case 0: + return CURL_FNMATCH_MATCH; + case FNM_NOMATCH: + return CURL_FNMATCH_NOMATCH; + default: + return CURL_FNMATCH_FAIL; + } + /* not reached */ +} + +#endif |