wildmatch: make wildmatch's return value compatible with fnmatch
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Mon, 15 Oct 2012 06:25:57 +0000 (13:25 +0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Oct 2012 21:58:18 +0000 (14:58 -0700)
wildmatch returns non-zero if matched, zero otherwise. This patch
makes it return zero if matches, non-zero otherwise, like fnmatch().

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
test-wildmatch.c
wildmatch.c

index ac5642037d3f31f4ce5e84aa63ca690712683dc6..77014e99dc614d5db62f829616bad585635bf469 100644 (file)
@@ -4,9 +4,9 @@
 int main(int argc, char **argv)
 {
        if (!strcmp(argv[1], "wildmatch"))
-               return wildmatch(argv[3], argv[2]) ? 0 : 1;
+               return !!wildmatch(argv[3], argv[2]);
        else if (!strcmp(argv[1], "iwildmatch"))
-               return iwildmatch(argv[3], argv[2]) ? 0 : 1;
+               return !!iwildmatch(argv[3], argv[2]);
        else if (!strcmp(argv[1], "fnmatch"))
                return !!fnmatch(argv[3], argv[2], FNM_PATHNAME);
        else
index ac29471660168cc01fad90b2b901148f3e14f091..6d992d314abccf675c2b3bc0e3285ee7c6abe1b7 100644 (file)
@@ -20,6 +20,9 @@ typedef unsigned char uchar;
 
 #define FALSE 0
 #define TRUE 1
+
+#define NOMATCH 1
+#define MATCH 0
 #define ABORT_ALL -1
 #define ABORT_TO_STARSTAR -2
 
@@ -78,12 +81,12 @@ static int dowild(const uchar *p, const uchar *text)
                        /* FALLTHROUGH */
                default:
                        if (t_ch != p_ch)
-                               return FALSE;
+                               return NOMATCH;
                        continue;
                case '?':
                        /* Match anything but '/'. */
                        if (t_ch == '/')
-                               return FALSE;
+                               return NOMATCH;
                        continue;
                case '*':
                        if (*++p == '*') {
@@ -96,14 +99,14 @@ static int dowild(const uchar *p, const uchar *text)
                                 * only if there are no more slash characters. */
                                if (!special) {
                                        if (strchr((char*)text, '/') != NULL)
-                                               return FALSE;
+                                               return NOMATCH;
                                }
-                               return TRUE;
+                               return MATCH;
                        }
                        while (1) {
                                if (t_ch == '\0')
                                        break;
-                               if ((matched = dowild(p, text)) != FALSE) {
+                               if ((matched = dowild(p, text)) != NOMATCH) {
                                        if (!special || matched != ABORT_TO_STARSTAR)
                                                return matched;
                                } else if (!special && t_ch == '/')
@@ -202,18 +205,18 @@ static int dowild(const uchar *p, const uchar *text)
                                        matched = TRUE;
                        } while (prev_ch = p_ch, (p_ch = *++p) != ']');
                        if (matched == special || t_ch == '/')
-                               return FALSE;
+                               return NOMATCH;
                        continue;
                }
        }
 
-       return *text ? FALSE : TRUE;
+       return *text ? NOMATCH : MATCH;
 }
 
 /* Match the "pattern" against the "text" string. */
 int wildmatch(const char *pattern, const char *text)
 {
-       return dowild((const uchar*)pattern, (const uchar*)text) == TRUE;
+       return dowild((const uchar*)pattern, (const uchar*)text);
 }
 
 /* Match the "pattern" against the forced-to-lower-case "text" string. */
@@ -221,7 +224,7 @@ int iwildmatch(const char *pattern, const char *text)
 {
        int ret;
        force_lower_case = 1;
-       ret = dowild((const uchar*)pattern, (const uchar*)text) == TRUE;
+       ret = dowild((const uchar*)pattern, (const uchar*)text);
        force_lower_case = 0;
        return ret;
 }