changed program main data path (for compatibility with macOS 10.12 Sierra)
authorHolger Schemel <info@artsoft.org>
Sun, 8 Jan 2017 12:57:17 +0000 (13:57 +0100)
committerHolger Schemel <info@artsoft.org>
Sun, 8 Jan 2017 12:57:17 +0000 (13:57 +0100)
src/libgame/macosx.h
src/libgame/misc.c

index 2235b88dabefb14e554a2c62345ca93a83f1adfa..236beccf0fd99323551826d7dd9cdc9d623a1251 100644 (file)
@@ -16,6 +16,7 @@
 /* define some Mac OS X specific paths */
 
 #define MAC_APP_BINARY_SUBDIR  "Contents/MacOS"
+#define MAC_APP_FILES_SUBDIR   "Contents/Resources"
 
 
 /* some symbols are already defined on Mac OS X */
index bf40ca9bdfac02fbbf4c6addf2c3dd3b87b2186e..4ffb51c707adb555962ba68876d13e685f369e74 100644 (file)
@@ -682,6 +682,7 @@ static char *getProgramMainDataPath()
 
 #if defined(PLATFORM_MACOSX)
   static char *main_data_binary_subdir = NULL;
+  static char *main_data_files_subdir = NULL;
 
   if (main_data_binary_subdir == NULL)
   {
@@ -693,18 +694,29 @@ static char *getProgramMainDataPath()
            program.program_title, MAC_APP_BINARY_SUBDIR);
   }
 
-  // cut relative path to Mac OS X application binary directory from path
+  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 (strSuffix(main_data_path, main_data_binary_subdir))
-    main_data_path[strlen(main_data_path) -
-                  strlen(main_data_binary_subdir)] = '\0';
+  {
+    char *main_data_path_old = main_data_path;
+
+    // cut relative path to Mac OS X application binary directory from path
+    main_data_path_old[strlen(main_data_path_old) -
+                      strlen(main_data_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, "/"))
-    main_data_path[strlen(main_data_path) - 1] = '\0';
+    // add relative path to Mac OS X application resources directory to path
+    main_data_path = getPath2(main_data_path_old, main_data_files_subdir);
 
-  // replace empty path with current directory
-  if (strEqual(main_data_path, ""))
-    main_data_path = ".";
+    free(main_data_path_old);
+  }
 #endif
 
   return main_data_path;