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 7ce4b54..199a33c 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 84bfaaa..78b23a6 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 9e0ecea..ff24347 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;