move check for configured program base directory to appropriate function
[rocksndiamonds.git] / src / libgame / misc.c
index 3ff1f8aa9c269d18e84b4bcb8ecf9d806287acd3..7ac8d566362aef4a052b16909e9d1a3b3f92e963 100644 (file)
@@ -696,41 +696,26 @@ char *getBasePath(char *filename)
   return basepath;
 }
 
-static char *getProgramMainDataPath()
+static char *getProgramMainDataPath(char *command_filename, char *base_path)
 {
-  char *main_data_path = getStringCopy(program.command_basepath);
+  /* check if the program's main data base directory is configured */
+  if (!strEqual(base_path, "."))
+    return base_path;
 
-#if defined(PLATFORM_MACOSX)
-  static char *main_data_binary_subdir = NULL;
-  static char *main_data_files_subdir = NULL;
-
-  if (main_data_binary_subdir == NULL)
-  {
-    main_data_binary_subdir = checked_malloc(strlen(program.program_title) + 1 +
-                                            strlen("app") + 1 +
-                                            strlen(MAC_APP_BINARY_SUBDIR) + 1);
-
-    sprintf(main_data_binary_subdir, "%s.app/%s",
-           program.program_title, MAC_APP_BINARY_SUBDIR);
-  }
-
-  if (main_data_files_subdir == NULL)
-  {
-    main_data_files_subdir = checked_malloc(strlen(program.program_title) + 1 +
-                                           strlen("app") + 1 +
-                                           strlen(MAC_APP_FILES_SUBDIR) + 1);
-
-    sprintf(main_data_files_subdir, "%s.app/%s",
-           program.program_title, MAC_APP_FILES_SUBDIR);
-  }
+  /* if the program is configured to start from current directory (default),
+     determine program package directory from program binary (some versions
+     of KDE/Konqueror and Mac OS X (especially "Mavericks") apparently do not
+     set the current working directory to the program package directory) */
+  char *main_data_path = getBasePath(command_filename);
 
-  if (strSuffix(main_data_path, main_data_binary_subdir))
+#if defined(PLATFORM_MACOSX)
+  if (strSuffix(main_data_path, MAC_APP_BINARY_SUBDIR))
   {
     char *main_data_path_old = main_data_path;
 
     // cut relative path to Mac OS X application binary directory from path
     main_data_path[strlen(main_data_path) -
-                  strlen(main_data_binary_subdir)] = '\0';
+                  strlen(MAC_APP_BINARY_SUBDIR)] = '\0';
 
     // cut trailing path separator from path (but not if path is root directory)
     if (strSuffix(main_data_path, "/") && !strEqual(main_data_path, "/"))
@@ -741,7 +726,7 @@ static char *getProgramMainDataPath()
       main_data_path = ".";
 
     // add relative path to Mac OS X application resources directory to path
-    main_data_path = getPath2(main_data_path, main_data_files_subdir);
+    main_data_path = getPath2(main_data_path, MAC_APP_FILES_SUBDIR);
 
     free(main_data_path_old);
   }
@@ -963,8 +948,8 @@ void GetOptions(int argc, char *argv[],
                void (*print_usage_function)(void),
                void (*print_version_function)(void))
 {
-  char *ro_base_path = RO_BASE_PATH;
-  char *rw_base_path = RW_BASE_PATH;
+  char *ro_base_path = getProgramMainDataPath(argv[0], RO_BASE_PATH);
+  char *rw_base_path = getProgramMainDataPath(argv[0], RW_BASE_PATH);
   char **argvplus = checked_calloc((argc + 1) * sizeof(char **));
   char **options_left = &argvplus[1];
 
@@ -972,16 +957,6 @@ void GetOptions(int argc, char *argv[],
   while (argc--)
     argvplus[argc] = argv[argc];
 
-  /* if the program is configured to start from current directory (default),
-     determine program package directory from program binary (some versions
-     of KDE/Konqueror and Mac OS X (especially "Mavericks") apparently do not
-     set the current working directory to the program package directory) */
-
-  if (strEqual(ro_base_path, "."))
-    ro_base_path = getProgramMainDataPath();
-  if (strEqual(rw_base_path, "."))
-    rw_base_path = getProgramMainDataPath();
-
   /* initialize global program options */
   options.server_host = NULL;
   options.server_port = 0;