X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=libs%2Ffilematch.c;h=5b01db735b770a40ef291c32b68ff2ecb768c3af;hb=e4287c28bb2dafedc81c66e63951d947cfbeb225;hp=7989cbb2f546dcc692d8ff50515ae67edb1171c8;hpb=203343b01a7ad87cb3d136689c9936ff5bc23c01;p=xonotic%2Fnetradiant.git diff --git a/libs/filematch.c b/libs/filematch.c index 7989cbb2..5b01db73 100644 --- a/libs/filematch.c +++ b/libs/filematch.c @@ -3,67 +3,72 @@ // LordHavoc: some portable directory listing code I wrote for lmp2pcx, now used in darkplaces to load id1/*.pak and such... -int matchpattern(const char *in, const char *pattern, int caseinsensitive) -{ - return matchpattern_with_separator(in, pattern, caseinsensitive, "/\\:", 0); +int matchpattern( const char *in, const char *pattern, int caseinsensitive ){ + return matchpattern_with_separator( in, pattern, caseinsensitive, "/\\:", 0 ); } // wildcard_least_one: if true * matches 1 or more characters // if false * matches 0 or more characters -int matchpattern_with_separator(const char *in, const char *pattern, int caseinsensitive, const char *separators, int wildcard_least_one) -{ +int matchpattern_with_separator( const char *in, const char *pattern, int caseinsensitive, const char *separators, int wildcard_least_one ){ int c1, c2; - while (*pattern) + while ( *pattern ) { - switch (*pattern) + switch ( *pattern ) { case 0: return 1; // end of pattern case '?': // match any single character - if (*in == 0 || strchr(separators, *in)) + if ( *in == 0 || strchr( separators, *in ) ) { return 0; // no match + } in++; pattern++; break; case '*': // match anything until following string - if(wildcard_least_one) - { - if (*in == 0 || strchr(separators, *in)) + if ( wildcard_least_one ) { + if ( *in == 0 || strchr( separators, *in ) ) { return 0; // no match + } in++; } pattern++; - while (*in) + while ( *in ) { - if (strchr(separators, *in)) + if ( strchr( separators, *in ) ) { break; + } // see if pattern matches at this offset - if (matchpattern_with_separator(in, pattern, caseinsensitive, separators, wildcard_least_one)) + if ( matchpattern_with_separator( in, pattern, caseinsensitive, separators, wildcard_least_one ) ) { return 1; + } // nope, advance to next offset in++; } break; default: - if (*in != *pattern) - { - if (!caseinsensitive) + if ( *in != *pattern ) { + if ( !caseinsensitive ) { return 0; // no match + } c1 = *in; - if (c1 >= 'A' && c1 <= 'Z') + if ( c1 >= 'A' && c1 <= 'Z' ) { c1 += 'a' - 'A'; + } c2 = *pattern; - if (c2 >= 'A' && c2 <= 'Z') + if ( c2 >= 'A' && c2 <= 'Z' ) { c2 += 'a' - 'A'; - if (c1 != c2) + } + if ( c1 != c2 ) { return 0; // no match + } } in++; pattern++; break; } } - if (*in) + if ( *in ) { return 0; // reached end of pattern but not end of input + } return 1; // success }