Unify config file search order Linux/Unix and Windows #69

This means we have some XDG support on Windows, too,
although some global locations like /etc/xdg are unlikely to exist.
This commit is contained in:
Thomas Jensen 2021-02-24 21:15:11 +01:00
parent 68098e4480
commit d952bd6eea
No known key found for this signature in database
GPG Key ID: A4ACEE270D0FB7DB
3 changed files with 15 additions and 47 deletions

View File

@ -264,47 +264,9 @@ static char *exe_to_cfg()
return exepath;
}
#endif
static char *determine_config_file()
{
int error_printed = 0;
char *result = locate_config_common(&error_printed);
if (result == NULL && !error_printed) {
const char *dirs[] = {
".",
from_env_var("HOME", "")
};
for (size_t i = 0; i < (sizeof(dirs) / sizeof(const char *)); i++) {
const char *dir = dirs[i];
if (can_read_dir(dir)) {
result = locate_config_in_dir(dir);
if (result != NULL) {
break;
}
}
}
if (result == NULL) { // TODO same determine_config_file(), but globalconf_marker triggers different things
char *exepath = exe_to_cfg();
if (can_read_file(exepath)) {
result = exepath;
} else {
fprintf(stderr, "%s: Couldn\'t find config file at \'%s\'\n", PROJECT, exepath);
error_printed = 1;
}
}
}
if (result == NULL && !error_printed) {
fprintf(stderr, "%s: Can't find config file.\n", PROJECT);
}
return result;
}
#else
static char *determine_config_file()
{
int error_printed = 0;
@ -323,8 +285,20 @@ static char *determine_config_file()
};
for (size_t i = 0; i < (sizeof(dirs) / sizeof(const char *)); i++) {
const char *dir = dirs[i];
if (dir == globalconf_marker && can_read_file(GLOBALCONF)) {
result = strdup(GLOBALCONF);
if (dir == globalconf_marker) {
#ifdef __MINGW32__
char *exepath = exe_to_cfg();
if (can_read_file(exepath)) {
result = exepath;
} else {
fprintf(stderr, "%s: Couldn\'t find config file at \'%s\'\n", PROJECT, exepath);
error_printed = 1;
}
#else
if (can_read_file(GLOBALCONF)) {
result = strdup(GLOBALCONF);
}
#endif
}
else if (can_read_dir(dir)) {
result = locate_config_in_dir(dir);
@ -341,8 +315,6 @@ static char *determine_config_file()
return result;
}
#endif
static int open_yy_config_file(const char *config_file_name)

View File

@ -2,8 +2,6 @@
Tests that the config file is found by looking in $HOME/.config/boxes.
Also tests a shape length problem, where the least common multiple must be found (here: 3 x 5 = 15).
:SKIP-IF
Msys
:ENV
export HOME="`pwd`/123_data"
:ARGS

View File

@ -2,8 +2,6 @@
Tests that the config file is found by looking in $XDG_CONFIG_HOME/boxes with higher precedence
than $HOME/.config/boxes. Also tests a particular shape length problem.
:SKIP-IF
Msys
:ENV
export HOME="`pwd`/124_data/home"
export XDG_CONFIG_HOME="`pwd`/124_data/xdg"