mirror of
https://github.com/neovim/neovim.git
synced 2025-10-11 20:36:35 +00:00
XDG: Windows: resolve $LOCALAPPDATA, $TEMP (#5278)
After #4964 environment variables in the XDG "fallback" table are no longer expanded. Fallback to correctly expanded $LOCALAPPDATA, $TEMP. If that fails (unlikely), fallback to hard-coded paths (e.g. ~/AppData/Local). Closes #5255
This commit is contained in:

committed by
Justin M. Keyes

parent
ca7a5c0ce7
commit
32156f06f7
@@ -16,20 +16,29 @@ static const char *xdg_env_vars[] = {
|
||||
[kXDGDataDirs] = "XDG_DATA_DIRS",
|
||||
};
|
||||
|
||||
#ifdef WIN32
|
||||
static const char *const xdg_defaults_env_vars[] = {
|
||||
[kXDGConfigHome] = "LOCALAPPDATA",
|
||||
[kXDGDataHome] = "LOCALAPPDATA",
|
||||
[kXDGCacheHome] = "TEMP",
|
||||
[kXDGRuntimeDir] = NULL,
|
||||
[kXDGConfigDirs] = NULL,
|
||||
[kXDGDataDirs] = NULL,
|
||||
};
|
||||
#endif
|
||||
|
||||
/// Defaults for XDGVarType values
|
||||
///
|
||||
/// Used in case environment variables contain nothing. Need to be expanded.
|
||||
static const char *const xdg_defaults[] = {
|
||||
#ifdef WIN32
|
||||
// Windows
|
||||
[kXDGConfigHome] = "$LOCALAPPDATA",
|
||||
[kXDGDataHome] = "$LOCALAPPDATA",
|
||||
[kXDGCacheHome] = "$TEMP",
|
||||
[kXDGConfigHome] = "~\\AppData\\Local",
|
||||
[kXDGDataHome] = "~\\AppData\\Local",
|
||||
[kXDGCacheHome] = "~\\AppData\\Local\\Temp",
|
||||
[kXDGRuntimeDir] = NULL,
|
||||
[kXDGConfigDirs] = NULL,
|
||||
[kXDGDataDirs] = NULL,
|
||||
#else
|
||||
// Linux, BSD, CYGWIN, Apple
|
||||
[kXDGConfigHome] = "~/.config",
|
||||
[kXDGDataHome] = "~/.local/share",
|
||||
[kXDGCacheHome] = "~/.cache",
|
||||
@@ -50,7 +59,14 @@ char *stdpaths_get_xdg_var(const XDGVarType idx)
|
||||
const char *const env = xdg_env_vars[idx];
|
||||
const char *const fallback = xdg_defaults[idx];
|
||||
|
||||
const char *const env_val = os_getenv(env);
|
||||
const char *env_val = os_getenv(env);
|
||||
|
||||
#ifdef WIN32
|
||||
if (env_val == NULL) {
|
||||
env_val = os_getenv(xdg_defaults_env_vars[idx]);
|
||||
}
|
||||
#endif
|
||||
|
||||
char *ret = NULL;
|
||||
if (env_val != NULL) {
|
||||
ret = xstrdup(env_val);
|
||||
|
Reference in New Issue
Block a user