// 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)
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;
#include <io.h>
stringlist_t *listdirectory(char *path)
{
- char pattern[4096];
+ char pattern[4096], *c;
struct _finddata_t n_file;
long hFile;
stringlist_t *start, *current;
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;