matchpattern can now be case insensitive if desired
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 18 Sep 2002 03:50:21 +0000 (03:50 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 18 Sep 2002 03:50:21 +0000 (03:50 +0000)
pak filename matching is now case insensitive

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@2388 d7cf8633-e32d-0410-b094-e92efae38249

common.c
common.h
filematch.c

index 7ce4b548eb07e34e1fc647e26208349e2ade7244..199a33c02b0d934a989386290e7e58332a205b14 100644 (file)
--- a/common.c
+++ b/common.c
@@ -1386,7 +1386,7 @@ void COM_AddGameDirectory (char *dir)
        list = listdirectory(dir);
        for (current = list;current;current = current->next)
        {
-               if (matchpattern(current->text, "*.pak"))
+               if (matchpattern(current->text, "*.pak", true))
                {
                        sprintf (pakfile, "%s/%s", dir, current->text);
                        pak = COM_LoadPackFile (pakfile);
index 84bfaaaad3b48001c946a915f9b4f5945a1d0343..78b23a6a605de4630813b4a4905077dc92263a57 100644 (file)
--- a/common.h
+++ b/common.h
@@ -187,7 +187,7 @@ typedef struct stringlist_s
        char *text;
 } stringlist_t;
 
-int matchpattern(char *in, char *pattern);
+int matchpattern(char *in, char *pattern, int caseinsensitive);
 stringlist_t *listdirectory(char *path);
 void freedirectory(stringlist_t *list);
 
index 9e0eceafdf3c2726d8e50bc1f9bc58d1f467b4f4..ff243476bc1a208e5e1b90b686e4688a50a89011 100644 (file)
@@ -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;