diff --git a/src/fontfile/fontdir.c b/src/fontfile/fontdir.c index aae1f2e..44124b9 100644 --- a/src/fontfile/fontdir.c +++ b/src/fontfile/fontdir.c @@ -358,59 +358,28 @@ SetupWildMatch(FontTablePtr table, FontN 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++; } } }