Moved the configuration on OS X to ~/Library/Application Support/OpenRCT2

This commit is contained in:
LRFLEW 2015-12-11 17:02:47 -06:00
parent 3ba4677bd9
commit c2202f6260
3 changed files with 63 additions and 26 deletions

View File

@ -22,6 +22,7 @@
#include "platform.h"
#include <dlfcn.h>
#include <stdlib.h>
// 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

View File

@ -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

View File

@ -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
* - <platform dependent>
*/
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);