[PATCH v4 06/12] wildmatch: make wildmatch's return value compatible with fnmatch
- From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
- Date
- Oct 10, 2012, 10:40 UTC
- Message-ID
- <1349865651-31889-7-git-send-email-pclouds@gmail.com>
- In-Reply-To
- <1349865651-31889-1-git-send-email-pclouds@gmail.com>
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> --- 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