]> git.rm.cloudns.org Git - xonotic/netradiant.git/commitdiff
vfs/dpk: properly find the dpkdir, even for maps not in maps/, typically mapmodel...
authorThomas Debesse <dev@illwieckz.net>
Sat, 24 Apr 2021 00:33:31 +0000 (02:33 +0200)
committerThomas Debesse <dev@illwieckz.net>
Sat, 24 Apr 2021 00:44:28 +0000 (02:44 +0200)
plugins/vfspk3/vfs.cpp

index 44c2ebb5290630fe13f17d1415773c27f55dc8eb..5871f9914afa657a3c36ebff8eab1f0e1e597b05 100644 (file)
@@ -347,6 +347,9 @@ static const char* GetLatestDpkPakVersion( const char* name ){
 }
 
 // release string after using
+// Note: it also contains the version string,
+// for …/src/map-castle_src.dpkdir/maps/castle.map
+// it will return map-castle_src
 static char* GetCurrentMapDpkPakName(){
        char* mapdir;
        char* mapname;
@@ -356,21 +359,27 @@ static char* GetCurrentMapDpkPakName(){
        mapname = string_clone( GlobalRadiant().getMapName() );
        mapnamelen = string_length( mapname );
 
-       mapdir = strrchr( mapname, '/' );
-       if ( mapdir ) {
-               mapdir -= 12;
-               if ( strncmp( mapdir, ".dpkdir/maps/", 13 ) == 0 ) {
-                       *mapdir = '\0';
-                       mapdir = strrchr( mapname, '/' );
-                       if ( mapdir ) mapdir++;
-                       else mapdir = mapname;
-                       result = string_clone( mapdir );
+       char pattern[] = ".dpkdir/";
+       char* end = strstr( mapname, ".dpkdir/" );
+       if ( end )
+       {
+               end[ 0 ] = '\0';
+
+               mapdir = strrchr( mapname, '/' );
+               if ( mapdir )
+               {
+                       mapdir++;
+               }
+               else
+               {
+                       mapdir = mapname;
                }
+
+               result = string_clone( mapdir );
        }
 
        string_release( mapname, mapnamelen );
        return result;
-
 }
 
 // prevent loading duplicates or circular references