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

Reply via email to