X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=filematch.c;h=ff243476bc1a208e5e1b90b686e4688a50a89011;hb=05f565607a4fafe1269356ffc72d44ff2ba934aa;hp=996753c1281240cf17e9bce3cf3cd494b65bf269;hpb=5d6fabe47d4cce45d956fdfa4d4dba30e2f6ea06;p=xonotic%2Fdarkplaces.git diff --git a/filematch.c b/filematch.c index 996753c1..ff243476 100644 --- a/filematch.c +++ b/filematch.c @@ -3,8 +3,9 @@ // LordHavoc: some portable directory listing code I wrote for lmp2pcx, now used in darkplaces to load id1/*.pak and such... -int matchpattern(char *in, char *pattern) +int matchpattern(char *in, char *pattern, int caseinsensitive) { + int c1, c2; while (*pattern) { switch (*pattern) @@ -39,7 +40,18 @@ int matchpattern(char *in, char *pattern) break; default: if (*in != *pattern) - return 0; // no match + { + if (!caseinsensitive) + return 0; // no match + c1 = *in; + if (c1 >= 'A' && c1 <= 'Z') + c1 += 'a' - 'A'; + c2 = *pattern; + if (c2 >= 'A' && c2 <= 'Z') + c2 += 'a' - 'A'; + if (c1 != c2) + return 0; // no match + } in++; pattern++; break; @@ -113,7 +125,7 @@ stringlist_t *stringlistsort(stringlist_t *start) #include stringlist_t *listdirectory(char *path) { - char pattern[4096]; + char pattern[4096], *c; struct _finddata_t n_file; long hFile; stringlist_t *start, *current; @@ -129,8 +141,16 @@ stringlist_t *listdirectory(char *path) while (_findnext(hFile, &n_file) == 0) current = stringlistappend(current, n_file.name); _findclose(hFile); + + // convert names to lowercase because windows does not care, but pattern matching code often does + for (current = start;current;current = current->next) + for (c = current->text;*c;c++) + if (*c >= 'A' && *c <= 'Z') + *c += 'a' - 'A'; + // sort the list alphanumerically - return stringlistsort(start); + start = stringlistsort(start); + return start; } else return NULL; @@ -163,4 +183,5 @@ stringlist_t *listdirectory(char *path) void freedirectory(stringlist_t *list) { stringlistfree(list); -} \ No newline at end of file +} +