diff --git a/docs/ssnes.1 b/docs/ssnes.1 index 9d27fdf7ee..205b217109 100644 --- a/docs/ssnes.1 +++ b/docs/ssnes.1 @@ -47,7 +47,7 @@ Should this not be defined, \fBssnes\fR will look in platform specific paths to /etc/ssnes.cfg (when installed), or ssnes.cfg in the source tarball serves as a skeleton configuration file. .IP -Unix-like systems will look in $XDG_CONFIG_HOME/ssnes/ssnes.cfg first. Then it will try $HOME/.ssnesrc. Last, it will try /etc/ssnes.cfg. If no configuration is found, default settings will be assumed. A configuration file does not need to define every possible option, only those that should be overridden. +Unix-like systems will look in $XDG_CONFIG_HOME/ssnes/ssnes.cfg first. Then it will try $HOME/.ssnes.cfg. Last, it will try /etc/ssnes.cfg. If no configuration is found, default settings will be assumed. A configuration file does not need to define every possible option, only those that should be overridden. .IP Windows will look in ssnes.cfg in same folder where ssnes.exe resides. diff --git a/settings.c b/settings.c index a4ab99f190..1cb9728af4 100644 --- a/settings.c +++ b/settings.c @@ -165,6 +165,62 @@ void parse_config(void) #endif } +static config_file_t *open_default_config_file(void) +{ + config_file_t *conf = NULL; +#ifdef _WIN32 + // Just do something for now. + conf = config_file_new("ssnes.cfg"); + if (!conf) + { + const char *appdata = getenv("APPDATA"); + if (appdata) + { + char conf_path[strlen(appdata) + strlen("/ssnes.cfg ")]; + strcpy(conf_path, appdata); + strcat(conf_path, "/ssnes.cfg"); + conf = config_file_new(conf_path); + } + } +#elif defined(__APPLE__) + const char *home = getenv("HOME"); + if (home) + { + char conf_path[strlen(home) + strlen("/.ssnes.cfg ")]; + strcpy(conf_path, home); + strcat(conf_path, "/.ssnes.cfg"); + conf = config_file_new(conf_path); + } + if (!conf) + conf = config_file_new("/etc/ssnes.cfg"); +#else + const char *xdg = getenv("XDG_CONFIG_HOME"); + if (!xdg) + SSNES_WARN("XDG_CONFIG_HOME is not defined. Will look for config in $HOME/.ssnesrc ...\n"); + + const char *home = getenv("HOME"); + if (xdg) + { + char conf_path[strlen(xdg) + strlen("/ssnes/ssnes.cfg ")]; + strcpy(conf_path, xdg); + strcat(conf_path, "/ssnes/ssnes.cfg"); + conf = config_file_new(conf_path); + } + else if (home) + { + char conf_path[strlen(home) + strlen("/.ssnes.cfg ")]; + strcpy(conf_path, home); + strcat(conf_path, "/.ssnes.cfg"); + conf = config_file_new(conf_path); + } + // Try this as a last chance... + if (!conf) + conf = config_file_new("/etc/ssnes.cfg"); +#endif + + return conf; +} + // Macros to ease config getting. #define CONFIG_GET_BOOL(var, key) if (config_get_bool(conf, key, &tmp_bool)) \ g_settings.var = tmp_bool @@ -198,35 +254,7 @@ static void parse_config_file(void) } } else - { -#ifdef _WIN32 - // Just do something for now. - conf = config_file_new("ssnes.cfg"); -#else - const char *xdg = getenv("XDG_CONFIG_HOME"); - if (!xdg) - SSNES_WARN("XDG_CONFIG_HOME is not defined. Will look for config in $HOME/.ssnesrc ...\n"); - - const char *home = getenv("HOME"); - if (xdg) - { - char conf_path[strlen(xdg) + strlen("/ssnes/ssnes.cfg ")]; - strcpy(conf_path, xdg); - strcat(conf_path, "/ssnes/ssnes.cfg"); - conf = config_file_new(conf_path); - } - else if (home) - { - char conf_path[strlen(home) + strlen("/.ssnesrc ")]; - strcpy(conf_path, home); - strcat(conf_path, "/.ssnesrc"); - conf = config_file_new(conf_path); - } - // Try this as a last chance... - if (!conf) - conf = config_file_new("/etc/ssnes.cfg"); -#endif - } + conf = open_default_config_file(); if (conf == NULL) return; diff --git a/ssnes.c b/ssnes.c index 0f6248f764..05701676a6 100644 --- a/ssnes.c +++ b/ssnes.c @@ -278,6 +278,8 @@ static void fill_pathname(char *out_path, char *in_path, const char *replace) #ifdef _WIN32 #define SSNES_DEFAULT_CONF_PATH_STR "\n\tDefaults to ssnes.cfg in same directory as ssnes.exe" +#elif defined(__APPLE__) +#define SSNES_DEFAULT_CONF_PATH_STR " Defaults to $HOME/.ssnes.cfg" #else #define SSNES_DEFAULT_CONF_PATH_STR " Defaults to $XDG_CONFIG_HOME/ssnes/ssnes.cfg" #endif