moved code to check for file in level directories to separate function
authorHolger Schemel <holger.schemel@virtion.de>
Tue, 18 Jun 2024 20:02:41 +0000 (22:02 +0200)
committerHolger Schemel <holger.schemel@virtion.de>
Tue, 18 Jun 2024 20:02:45 +0000 (22:02 +0200)
src/files.c
src/libgame/setup.c
src/libgame/setup.h

index 1fe2d9543d644d1cc29a0f9af9376934bf48d958..5c4209d7c45ecc5da189f2092765cf38cd4beb70 100644 (file)
@@ -2929,26 +2929,7 @@ char *getLocalLevelTemplateFilename(void)
 
 char *getGlobalLevelTemplateFilename(void)
 {
-  // global variable "leveldir_current" must be modified in the loop below
-  LevelDirTree *leveldir_current_last = leveldir_current;
-  char *filename = NULL;
-
-  // check for template level in path from current to topmost tree node
-
-  while (leveldir_current != NULL)
-  {
-    filename = getDefaultLevelFilename(-1);
-
-    if (fileExists(filename))
-      break;
-
-    leveldir_current = leveldir_current->node_parent;
-  }
-
-  // restore global variable "leveldir_current" modified in above loop
-  leveldir_current = leveldir_current_last;
-
-  return filename;
+  return getFilenameFromCurrentLevelDirUpward(LEVELTEMPLATE_FILENAME);
 }
 
 static void determineLevelFileInfo_Filename(struct LevelFileInfo *lfi)
index 4104a042e8d1d901404d03998280d938b26feb7b..53659bddbe8a2840e8b514e7f878d5d5119d10ce 100644 (file)
@@ -797,6 +797,32 @@ char *getEditorSetupFilename(void)
   return filename;
 }
 
+char *getFilenameFromCurrentLevelDirUpward(char *basename)
+{
+  // global variable "leveldir_current" must be modified in the loop below
+  LevelDirTree *leveldir_current_last = leveldir_current;
+  static char *filename = NULL;
+
+  // check for filename in path from current to topmost tree node
+
+  while (leveldir_current != NULL)
+  {
+    checked_free(filename);
+
+    filename = getPath2(getCurrentLevelDir(), basename);
+
+    if (fileExists(filename))
+      break;
+
+    leveldir_current = leveldir_current->node_parent;
+  }
+
+  // restore global variable "leveldir_current" modified in above loop
+  leveldir_current = leveldir_current_last;
+
+  return filename;
+}
+
 char *getHelpAnimFilename(void)
 {
   static char *filename = NULL;
index c7a5330267f819b55ac46af771399ed01885d1d7..5692c9da39e56c5c035563ca569f860335c841db 100644 (file)
@@ -279,6 +279,7 @@ char *getSetupFilename(void);
 char *getDefaultSetupFilename(void);
 char *getPlatformSetupFilename(void);
 char *getEditorSetupFilename(void);
+char *getFilenameFromCurrentLevelDirUpward(char *);
 char *getHelpAnimFilename(void);
 char *getHelpTextFilename(void);
 char *getLevelSetInfoFilename(int);