handle forbidden dir exclusions properly now
authorRudolf Polzer <divverent@xonotic.org>
Fri, 1 Jul 2011 10:49:31 +0000 (12:49 +0200)
committerRudolf Polzer <divverent@xonotic.org>
Fri, 1 Jul 2011 10:49:31 +0000 (12:49 +0200)
plugins/vfspk3/vfs.cpp
tools/quake3/common/vfs.c

index bea0adb..86a2ac8 100644 (file)
@@ -316,10 +316,17 @@ void InitDirectory(const char* directory, ArchiveModules& archiveModules)
 
   for(j = 0; j < g_numForbiddenDirs; ++j)
   {
-    const char *p = strrchr(directory, '/');
-    p = (p ? (p+1) : directory);
+    char* dbuf = g_strdup(directory);
+    if(*dbuf && dbuf[strlen(dbuf)-1] == '/')
+      dbuf[strlen(dbuf)-1] = 0;
+    const char *p = strrchr(dbuf, '/');
+    p = (p ? (p+1) : dbuf);
     if(matchpattern(p, g_strForbiddenDirs[j], TRUE))
+    {
+      g_free(dbuf);
       break;
+    }
+    g_free(dbuf);
   }
   if(j < g_numForbiddenDirs)
   {
@@ -382,9 +389,13 @@ void InitDirectory(const char* directory, ArchiveModules& archiveModules)
         if(name == 0)
           break;
 
-       for(j = 0; j < g_numForbiddenDirs; ++j)
-         if(!string_compare_nocase_upper(name, g_strForbiddenDirs[j]))
-           break;
+        for(j = 0; j < g_numForbiddenDirs; ++j)
+        {
+          const char *p = strrchr(name, '/');
+          p = (p ? (p+1) : name);
+          if(matchpattern(p, g_strForbiddenDirs[j], TRUE))
+            break;
+        }
        if(j < g_numForbiddenDirs)
          continue;
 
index ef2fad8..9c75cb3 100644 (file)
@@ -161,10 +161,17 @@ void vfsInitDirectory (const char *path)
 
   for(j = 0; j < g_numForbiddenDirs; ++j)
   {
-    const char *p = strrchr(path, '/');
-    p = (p ? (p+1) : path);
+    char* dbuf = g_strdup(path);
+    if(*dbuf && dbuf[strlen(dbuf)-1] == '/')
+      dbuf[strlen(dbuf)-1] = 0;
+    const char *p = strrchr(dbuf, '/');
+    p = (p ? (p+1) : dbuf);
     if(matchpattern(p, g_strForbiddenDirs[j], TRUE))
+    {
+      g_free(dbuf);
       break;
+    }
+    g_free(dbuf);
   }
   if(j < g_numForbiddenDirs)
     return;
@@ -193,8 +200,12 @@ void vfsInitDirectory (const char *path)
           break;
 
         for(j = 0; j < g_numForbiddenDirs; ++j)
-          if(!Q_stricmp(name, g_strForbiddenDirs[j]))
+        {
+          const char *p = strrchr(name, '/');
+          p = (p ? (p+1) : name);
+          if(matchpattern(p, g_strForbiddenDirs[j], TRUE))
             break;
+        }
         if(j < g_numForbiddenDirs)
           continue;