From c2202f62605f487d08489f2c1e8c449d360ea532 Mon Sep 17 00:00:00 2001 From: LRFLEW Date: Fri, 11 Dec 2015 17:02:47 -0600 Subject: [PATCH] Moved the configuration on OS X to ~/Library/Application Support/OpenRCT2 --- src/platform/linux.c | 33 +++++++++++++++++++++++++++++++++ src/platform/osx.c | 23 +++++++++++++++++++++++ src/platform/posix.c | 33 +++++++-------------------------- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/src/platform/linux.c b/src/platform/linux.c index f1f2a911fd..3c0fb7e08d 100644 --- a/src/platform/linux.c +++ b/src/platform/linux.c @@ -22,6 +22,7 @@ #include "platform.h" #include +#include // See http://syprog.blogspot.ru/2011/12/listing-loaded-shared-objects-in-linux.html struct lmap { @@ -78,4 +79,36 @@ bool platform_check_steam_overlay_attached() { return false; } +/** + * Default directory fallback is: + * - (command line argument) + * - $XDG_CONFIG_HOME/OpenRCT2 + * - /home/[uid]/.config/OpenRCT2 + */ +void platform_posix_sub_user_data_path(char *buffer, const char *homedir, const char *separator) { + const char *configdir = getenv("XDG_CONFIG_HOME"); + log_verbose("configdir = '%s'", configdir); + if (configdir == NULL) + { + log_verbose("configdir was null, used getuid, now is = '%s'", homedir); + if (homedir == NULL) + { + log_fatal("Couldn't find user data directory"); + exit(-1); + return; + } + + strncat(buffer, homedir, MAX_PATH - 1); + strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, ".config", MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + } + else + { + strncat(buffer, configdir, MAX_PATH - 1); + } + strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, "OpenRCT2", MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); +} + #endif diff --git a/src/platform/osx.c b/src/platform/osx.c index e18f51cc41..6171af885b 100644 --- a/src/platform/osx.c +++ b/src/platform/osx.c @@ -52,4 +52,27 @@ void platform_get_exe_path(utf8 *outPath) outPath[exeDelimiterIndex] = '\0'; } +/** + * Default directory fallback is: + * - (command line argument) + * - ~/Library/Application Support/OpenRCT2 + */ +void platform_posix_sub_user_data_path(char *buffer, const char *homedir, const char *separator) { + if (homedir == NULL) + { + log_fatal("Couldn't find user data directory"); + exit(-1); + return; + } + + strncat(buffer, homedir, MAX_PATH - 1); + strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, "Library", MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, "Application Support", MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, "OpenRCT2", MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); +} + #endif diff --git a/src/platform/posix.c b/src/platform/posix.c index f26c861d44..d927f5791d 100644 --- a/src/platform/posix.c +++ b/src/platform/posix.c @@ -528,11 +528,12 @@ wchar_t *regular_to_wchar(const char* src) return w_buffer; } +void platform_posix_sub_user_data_path(char *buffer, const char *homedir, const char *separator); + /** * Default directory fallback is: * - (command line argument) - * - $XDG_CONFIG_HOME/OpenRCT2 - * - /home/[uid]/.config/OpenRCT2 + * - */ void platform_resolve_user_data_path() { @@ -552,30 +553,10 @@ void platform_resolve_user_data_path() char buffer[MAX_PATH]; buffer[0] = '\0'; log_verbose("buffer = '%s'", buffer); - const char *homedir = getenv("XDG_CONFIG_HOME"); - log_verbose("homedir = '%s'", homedir); - if (homedir == NULL) - { - homedir = getpwuid(getuid())->pw_dir; - log_verbose("homedir was null, used getuid, now is = '%s'", homedir); - if (homedir == NULL) - { - log_fatal("Couldn't find user data directory"); - exit(-1); - return; - } - - strncat(buffer, homedir, MAX_PATH - 1); - strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); - strncat(buffer, ".config", MAX_PATH - strnlen(buffer, MAX_PATH) - 1); - } - else - { - strncat(buffer, homedir, MAX_PATH - 1); - } - strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); - strncat(buffer, "OpenRCT2", MAX_PATH - strnlen(buffer, MAX_PATH) - 1); - strncat(buffer, separator, MAX_PATH - strnlen(buffer, MAX_PATH) - 1); + + const char *homedir = getpwuid(getuid())->pw_dir; + platform_posix_sub_user_data_path(buffer, homedir, separator); + log_verbose("OpenRCT2 user data directory = '%s'", buffer); int len = strnlen(buffer, MAX_PATH); wchar_t *w_buffer = regular_to_wchar(buffer);