|
@@ -631,8 +631,14 @@ MainLoop *OS_Windows::get_main_loop() const {
|
|
|
}
|
|
|
|
|
|
String OS_Windows::get_config_path() const {
|
|
|
- if (has_environment("XDG_CONFIG_HOME")) { // unlikely, but after all why not?
|
|
|
- return get_environment("XDG_CONFIG_HOME");
|
|
|
+ // The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on Windows as well.
|
|
|
+ if (has_environment("XDG_CONFIG_HOME")) {
|
|
|
+ if (get_environment("XDG_CONFIG_HOME").is_abs_path()) {
|
|
|
+ return get_environment("XDG_CONFIG_HOME");
|
|
|
+ } else {
|
|
|
+ WARN_PRINT_ONCE("`XDG_CONFIG_HOME` is a relative path. Ignoring its value and falling back to `%APPDATA%` or `.` per the XDG Base Directory specification.");
|
|
|
+ return has_environment("APPDATA") ? get_environment("APPDATA") : ".";
|
|
|
+ }
|
|
|
} else if (has_environment("APPDATA")) {
|
|
|
return get_environment("APPDATA");
|
|
|
} else {
|
|
@@ -641,16 +647,28 @@ String OS_Windows::get_config_path() const {
|
|
|
}
|
|
|
|
|
|
String OS_Windows::get_data_path() const {
|
|
|
+ // The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on Windows as well.
|
|
|
if (has_environment("XDG_DATA_HOME")) {
|
|
|
- return get_environment("XDG_DATA_HOME");
|
|
|
+ if (get_environment("XDG_DATA_HOME").is_abs_path()) {
|
|
|
+ return get_environment("XDG_DATA_HOME");
|
|
|
+ } else {
|
|
|
+ WARN_PRINT_ONCE("`XDG_DATA_HOME` is a relative path. Ignoring its value and falling back to `get_config_path()` per the XDG Base Directory specification.");
|
|
|
+ return get_config_path();
|
|
|
+ }
|
|
|
} else {
|
|
|
return get_config_path();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String OS_Windows::get_cache_path() const {
|
|
|
+ // The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on Windows as well.
|
|
|
if (has_environment("XDG_CACHE_HOME")) {
|
|
|
- return get_environment("XDG_CACHE_HOME");
|
|
|
+ if (get_environment("XDG_CACHE_HOME").is_abs_path()) {
|
|
|
+ return get_environment("XDG_CACHE_HOME");
|
|
|
+ } else {
|
|
|
+ WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `%TEMP%` or `get_config_path()` per the XDG Base Directory specification.");
|
|
|
+ return has_environment("TEMP") ? get_environment("TEMP") : get_config_path();
|
|
|
+ }
|
|
|
} else if (has_environment("TEMP")) {
|
|
|
return get_environment("TEMP");
|
|
|
} else {
|