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@xxxxxxxxx> --- test-wildmatch.c | 4 ++-- wildmatch.c | 21 ++++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/test-wildmatch.c b/test-wildmatch.c index 08962d5..596029c 100644 --- a/test-wildmatch.c +++ b/test-wildmatch.c @@ -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 diff --git a/wildmatch.c b/wildmatch.c index 6092bde..7c180e3 100644 --- a/wildmatch.c +++ b/wildmatch.c @@ -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 @@ -79,12 +82,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 == '*') { @@ -97,14 +100,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 == '/') @@ -203,18 +206,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. */ @@ -222,7 +225,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; } -- 1.7.12.1.406.g6ab07c4 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html