rnd-20020930-2-src
[rocksndiamonds.git] / src / libgame / setup.c
index 943c063a1ab8d48665feb5701a465d6727feaa96..aeb115ef7ec9d5eda62550c1221e3a3cac274392 100644 (file)
@@ -408,7 +408,7 @@ char *getSetupFilename()
 
 static char *getCorrectedImageBasename(char *basename)
 {
-  char *result = basename;
+  char *basename_corrected = basename;
 
 #if defined(PLATFORM_MSDOS)
   if (program.filename_prefix != NULL)
@@ -416,11 +416,25 @@ static char *getCorrectedImageBasename(char *basename)
     int prefix_len = strlen(program.filename_prefix);
 
     if (strncmp(basename, program.filename_prefix, prefix_len) == 0)
-      result = &basename[prefix_len];
+      basename_corrected = &basename[prefix_len];
+
+    /* if corrected filename is still longer than standard MS-DOS filename
+       size (8 characters + 1 dot + 3 characters file extension), shorten
+       filename by writing file extension after 8th basename character */
+    if (strlen(basename_corrected) > 8+1+3)
+    {
+      static char *msdos_filename = NULL;
+
+      if (filename != NULL)
+       free(filename);
+
+      filename = getStringCopy(basename_corrected);
+      strncpy(&filename[8], &basename[strlen(basename) - 1+3], 1+3 + 1);
+    }
   }
 #endif
 
-  return result;
+  return basename_corrected;
 }
 
 static boolean fileExists(char *filename)
@@ -448,10 +462,14 @@ char *getCustomImageFilename(char *basename)
     if (fileExists(filename))
       return filename;
 
+    free(filename);
+
     /* 2nd try: look for special artwork in current level series directory */
     filename = getPath3(getCurrentLevelDir(), GRAPHICS_DIRECTORY, basename);
     if (fileExists(filename))
       return filename;
+
+    free(filename);
   }
 
   /* 3rd try: look for special artwork in configured artwork directory */
@@ -459,11 +477,15 @@ char *getCustomImageFilename(char *basename)
   if (fileExists(filename))
     return filename;
 
+  free(filename);
+
   /* 4th try: look for default artwork in new default artwork directory */
   filename = getPath2(getDefaultGraphicsDir(GRAPHICS_SUBDIR), basename);
   if (fileExists(filename))
     return filename;
 
+  free(filename);
+
   /* 5th try: look for default artwork in old default artwork directory */
   filename = getPath2(options.graphics_directory, basename);
   if (fileExists(filename))
@@ -486,10 +508,14 @@ char *getCustomSoundFilename(char *basename)
     if (fileExists(filename))
       return filename;
 
+    free(filename);
+
     /* 2nd try: look for special artwork in current level series directory */
     filename = getPath3(getCurrentLevelDir(), SOUNDS_DIRECTORY, basename);
     if (fileExists(filename))
       return filename;
+
+    free(filename);
   }
 
   /* 3rd try: look for special artwork in configured artwork directory */
@@ -497,11 +523,15 @@ char *getCustomSoundFilename(char *basename)
   if (fileExists(filename))
     return filename;
 
+  free(filename);
+
   /* 4th try: look for default artwork in new default artwork directory */
   filename = getPath2(getDefaultSoundsDir(SOUNDS_SUBDIR), basename);
   if (fileExists(filename))
     return filename;
 
+  free(filename);
+
   /* 5th try: look for default artwork in old default artwork directory */
   filename = getPath2(options.sounds_directory, basename);
   if (fileExists(filename))
@@ -539,10 +569,14 @@ char *getCustomMusicDirectory(void)
     if (fileExists(directory))
       return directory;
 
+    free(directory);
+
     /* 2nd try: look for special artwork in current level series directory */
     directory = getPath2(getCurrentLevelDir(), MUSIC_DIRECTORY);
     if (fileExists(directory))
       return directory;
+
+    free(directory);
   }
 
   /* 3rd try: look for special artwork in configured artwork directory */
@@ -550,11 +584,15 @@ char *getCustomMusicDirectory(void)
   if (fileExists(directory))
     return directory;
 
+  free(directory);
+
   /* 4th try: look for default artwork in new default artwork directory */
   directory = getStringCopy(getDefaultMusicDir(MUSIC_SUBDIR));
   if (fileExists(directory))
     return directory;
 
+  free(directory);
+
   /* 5th try: look for default artwork in old default artwork directory */
   directory = getStringCopy(options.music_directory);
   if (fileExists(directory))