Commit 0c528168 authored by Duy Nguyen's avatar Duy Nguyen Committed by Junio C Hamano

wildmatch: make dowild() take arbitrary flags

Signed-off-by: Duy Nguyen's avatarNguyễn Thái Ngọc Duy <[email protected]>
Signed-off-by: default avatarJunio C Hamano <[email protected]>
parent 9b3497ca
...@@ -52,7 +52,7 @@ typedef unsigned char uchar; ...@@ -52,7 +52,7 @@ typedef unsigned char uchar;
#define ISXDIGIT(c) (ISASCII(c) && isxdigit(c)) #define ISXDIGIT(c) (ISASCII(c) && isxdigit(c))
/* Match pattern "p" against "text" */ /* 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, unsigned int flags)
{ {
uchar p_ch; uchar p_ch;
const uchar *pattern = p; const uchar *pattern = p;
...@@ -62,9 +62,9 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case) ...@@ -62,9 +62,9 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case)
uchar t_ch, prev_ch; uchar t_ch, prev_ch;
if ((t_ch = *text) == '\0' && p_ch != '*') if ((t_ch = *text) == '\0' && p_ch != '*')
return WM_ABORT_ALL; return WM_ABORT_ALL;
if (force_lower_case && ISUPPER(t_ch)) if ((flags & WM_CASEFOLD) && ISUPPER(t_ch))
t_ch = tolower(t_ch); t_ch = tolower(t_ch);
if (force_lower_case && ISUPPER(p_ch)) if ((flags & WM_CASEFOLD) && ISUPPER(p_ch))
p_ch = tolower(p_ch); p_ch = tolower(p_ch);
switch (p_ch) { switch (p_ch) {
case '\\': case '\\':
...@@ -98,7 +98,7 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case) ...@@ -98,7 +98,7 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case)
* both foo/bar and foo/a/bar. * both foo/bar and foo/a/bar.
*/ */
if (p[0] == '/' && if (p[0] == '/' &&
dowild(p + 1, text, force_lower_case) == WM_MATCH) dowild(p + 1, text, flags) == WM_MATCH)
return WM_MATCH; return WM_MATCH;
match_slash = 1; match_slash = 1;
} else } else
...@@ -117,7 +117,7 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case) ...@@ -117,7 +117,7 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case)
while (1) { while (1) {
if (t_ch == '\0') if (t_ch == '\0')
break; break;
if ((matched = dowild(p, text, force_lower_case)) != WM_NOMATCH) { if ((matched = dowild(p, text, flags)) != WM_NOMATCH) {
if (!match_slash || matched != WM_ABORT_TO_STARSTAR) if (!match_slash || matched != WM_ABORT_TO_STARSTAR)
return matched; return matched;
} else if (!match_slash && t_ch == '/') } else if (!match_slash && t_ch == '/')
...@@ -228,6 +228,5 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case) ...@@ -228,6 +228,5 @@ static int dowild(const uchar *p, const uchar *text, int force_lower_case)
int wildmatch(const char *pattern, const char *text, int wildmatch(const char *pattern, const char *text,
unsigned int flags, struct wildopts *wo) unsigned int flags, struct wildopts *wo)
{ {
return dowild((const uchar*)pattern, (const uchar*)text, return dowild((const uchar*)pattern, (const uchar*)text, flags);
flags & WM_CASEFOLD ? 1 :0);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment