From: Takano Akio <[email protected]>
https://bugs.freedesktop.org/show_bug.cgi?id=7832
---
src/fontfile/fontdir.c | 67 +++++++++++++-----------------------------------
1 files changed, 18 insertions(+), 49 deletions(-)
diff --git a/src/fontfile/fontdir.c b/src/fontfile/fontdir.c
index e052bb3..2f782fa 100644
--- a/src/fontfile/fontdir.c
+++ b/src/fontfile/fontdir.c
@@ -357,59 +357,28 @@ SetupWildMatch(FontTablePtr table, FontNamePtr pat,
static int
PatternMatch(char *pat, int patdashes, char *string, int stringdashes)
{
- char c,
- t;
+ int i;
+ char c;
- if (stringdashes < patdashes)
+ for (i = 0; (c = pat[i]) == string[i] || c == '?'; i++)
+ if (!c)
+ return 1;
+ if (c != '*')
return 0;
for (;;) {
- switch (c = *pat++) {
- case '*':
- if (!(c = *pat++))
- return 1;
- if (c == XK_minus) {
- patdashes--;
- for (;;) {
- while ((t = *string++) != XK_minus)
- if (!t)
- return 0;
- stringdashes--;
- if (PatternMatch(pat, patdashes, string, stringdashes))
- return 1;
- if (stringdashes == patdashes)
- return 0;
- }
- } else {
- for (;;) {
- while ((t = *string++) != c) {
- if (!t)
- return 0;
- if (t == XK_minus) {
- if (stringdashes-- < patdashes)
- return 0;
- }
- }
- if (PatternMatch(pat, patdashes, string, stringdashes))
- return 1;
- }
- }
- case '?':
- if (*string++ == XK_minus)
- stringdashes--;
- break;
- case '\0':
- return (*string == '\0');
- case XK_minus:
- if (*string++ == XK_minus) {
- patdashes--;
- stringdashes--;
- break;
- }
- return 0;
- default:
- if (c == *string++)
+ pat += i + 1;
+ if (!*pat)
+ return 1;
+ string += i;
+ for (;;) {
+ for (i = 0; (c = pat[i]) == string[i] || c == '?'; i++)
+ if (!c)
+ return 1;
+ if (c == '*')
break;
- return 0;
+ if (!*string)
+ return 0;
+ string++;
}
}
}
--
1.7.2.2
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel