From b4ccaf61ab7e125bfbf789094a5c2e4eb47b5d36 Mon Sep 17 00:00:00 2001 From: Julie Marchant Date: Wed, 3 Jul 2019 17:00:46 -0400 Subject: [PATCH] Use XDG environment varaible standards, plus Windows env variable for win32 The Windows variable is untested, but hopefully should work and be better than all that Windows API nonsense. --- src/engine.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/engine.c b/src/engine.c index bda4094..96519c2 100644 --- a/src/engine.c +++ b/src/engine.c @@ -198,36 +198,43 @@ This gets the user's home directory, then creates the config directory. void engine_setupConfigDirectory() { const char *userHome; + const char *subdir; char dir[PATH_MAX]; #ifdef _WIN32 - userHome = "."; -#else - if ((userHome = getenv("HOME")) == NULL) - userHome = getpwuid(getuid())->pw_dir; -#endif + subdir = "pr-starfighter-config"; - strcpy(dir, ""); + if ((userHome = getenv("APPDATA")) == NULL) + userHome = "."; - snprintf(dir, PATH_MAX, "%s/.config", userHome); - -#ifdef _WIN32 + snprintf(dir, PATH_MAX, "%s/%s", userHome, subdir); if ((mkdir(dir) != 0) && (errno != EEXIST)) engine_showError(2, dir); - snprintf(dir, PATH_MAX, "%s/.config/starfighter", userHome); - if ((mkdir(dir) != 0) && (errno != EEXIST)) - engine_showError(2, dir); + snprintf(engine.configDirectory, PATH_MAX, "%s/", dir); #else - if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST)) - engine_showError(2, dir); + subdir = "starfighter"; + + if ((userHome = getenv("XDG_CONFIG_HOME")) != NULL) + { + snprintf(dir, PATH_MAX, "%s/%s", userHome, subdir); + } + { + if ((userHome = getenv("HOME")) == NULL) + userHome = getpwuid(getuid())->pw_dir; + + snprintf(dir, PATH_MAX, "%s/.config", userHome); + if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST)) + engine_showError(2, dir); + + snprintf(dir, PATH_MAX, "%s/.config/%s", userHome, subdir); + } - snprintf(dir, PATH_MAX, "%s/.config/starfighter", userHome); if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST)) engine_showError(2, dir); + + snprintf(engine.configDirectory, PATH_MAX, "%s/", dir); #endif - - snprintf(engine.configDirectory, PATH_MAX, "%s/.config/starfighter/", userHome); } /*