From f2f57632842a5978151c1dfb081872923d37389c Mon Sep 17 00:00:00 2001
From: havoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Date: Wed, 18 Sep 2002 03:50:21 +0000
Subject: [PATCH] matchpattern can now be case insensitive if desired 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    |  2 +-
 common.h    |  2 +-
 filematch.c | 16 ++++++++++++++--
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/common.c b/common.c
index 7ce4b548..199a33c0 100644
--- 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);
diff --git a/common.h b/common.h
index 84bfaaaa..78b23a6a 100644
--- 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);
 
diff --git a/filematch.c b/filematch.c
index 9e0eceaf..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;
-- 
2.39.5