4 // LordHavoc: some portable directory listing code I wrote for lmp2pcx, now used in darkplaces to load id1/*.pak and such...
6 int matchpattern( const char *in, const char *pattern, int caseinsensitive ){
7 return matchpattern_with_separator( in, pattern, caseinsensitive, "/\\:", 0 );
10 // wildcard_least_one: if true * matches 1 or more characters
11 // if false * matches 0 or more characters
12 int matchpattern_with_separator( const char *in, const char *pattern, int caseinsensitive, const char *separators, int wildcard_least_one ){
19 return 1; // end of pattern
20 case '?': // match any single character
21 if ( *in == 0 || strchr( separators, *in ) ) {
27 case '*': // match anything until following string
28 if ( wildcard_least_one ) {
29 if ( *in == 0 || strchr( separators, *in ) ) {
37 if ( strchr( separators, *in ) ) {
40 // see if pattern matches at this offset
41 if ( matchpattern_with_separator( in, pattern, caseinsensitive, separators, wildcard_least_one ) ) {
44 // nope, advance to next offset
49 if ( *in != *pattern ) {
50 if ( !caseinsensitive ) {
54 if ( c1 >= 'A' && c1 <= 'Z' ) {
58 if ( c2 >= 'A' && c2 <= 'Z' ) {
71 return 0; // reached end of pattern but not end of input