[PATCH 1/3] wildmatch: make dowild() take arbitrary flags
From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 22:55:33
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> --- wildmatch.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/wildmatch.c b/wildmatch.c
index 3972e26..9586ed9 100644
--- a/wildmatch.c
+++ b/wildmatch.c@@ -55,7 +55,7 @@ typedef unsigned char uchar; #define ISXDIGIT(c) (ISASCII(c) && isxdigit(c)) /* Match pattern "p" against "text" */ -static int dowild(const uchar *p, const uchar *text, int force_lower_case) +static int dowild(const uchar *p, const uchar *text, int flags) { uchar p_ch;
@@ -64,9 +64,9 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case) uchar t_ch, prev_ch; if ((t_ch = *text) == '\0' && p_ch != '*') return ABORT_ALL; - if (force_lower_case && ISUPPER(t_ch)) + if (flags & FNM_CASEFOLD && ISUPPER(t_ch)) t_ch = tolower(t_ch); - if (force_lower_case && ISUPPER(p_ch)) + if (flags & FNM_CASEFOLD && ISUPPER(p_ch)) p_ch = tolower(p_ch); switch (p_ch) { case '\\':
@@ -100,7 +100,7 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case) * both foo/bar and foo/a/bar. */ if (p[0] == '/' && - dowild(p + 1, text, force_lower_case) == MATCH) + dowild(p + 1, text, flags) == MATCH) return MATCH; special = TRUE; } else
@@ -119,7 +119,7 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case) while (1) { if (t_ch == '\0') break; - if ((matched = dowild(p, text, force_lower_case)) != NOMATCH) { + if ((matched = dowild(p, text, flags)) != NOMATCH) { if (!special || matched != ABORT_TO_STARSTAR) return matched; } else if (!special && t_ch == '/')
@@ -229,6 +229,5 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case) /* Match the "pattern" against the "text" string. */ int wildmatch(const char *pattern, const char *text, int flags) { - return dowild((const uchar*)pattern, (const uchar*)text, - flags & FNM_CASEFOLD ? 1 :0); + return dowild((const uchar*)pattern, (const uchar*)text, flags); }
--
1.8.0.rc2.23.g1fb49df