Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > 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> > --- OK, so ABORT cases where the patterns are either broken or impossible to match are also taken as not-matching, which sounds like the right thing to do. > 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 ac56420..77014e9 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 d0b906a..e3ac6cc 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 > > @@ -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; > } -- 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