diff options
author | Lars Kanis <[email protected]> | 2022-12-18 21:05:54 +0100 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2022-12-24 23:48:47 +0900 |
commit | d0f5dc9eac78ecade459b740ed08795c8df6d129 (patch) | |
tree | 72dab3fcbff2e9deb40dbfce53268438b6bb6bd2 /win32/win32.c | |
parent | 6a55b4601a50144a4c98571a79395b85465fda7f (diff) |
Windows: Prefer USERPROFILE over HOMEPATH
HOMEPATH is set to "\WINDOWS\system32" when running per "runas" session.
This directory is not writable by ordinary users, leading to errors with many ruby tools.
Also config files in the home directory are not recognized.
Still keeping HOME at first which is not used by native Windows,
but by ruby specs and by MSYS2 environment.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6992
Diffstat (limited to 'win32/win32.c')
-rw-r--r-- | win32/win32.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/win32/win32.c b/win32/win32.c index 36335f144f..ca62fe6c6d 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -544,7 +544,7 @@ rb_w32_system_tmpdir(WCHAR *path, UINT len) afterwards with xfree. Try: - HOME, HOMEDRIVE + HOMEPATH and USERPROFILE environment variables + HOME, USERPROFILE, HOMEDRIVE + HOMEPATH environment variables Special Folders - Profile and Personal */ WCHAR * @@ -553,13 +553,17 @@ rb_w32_home_dir(void) WCHAR *buffer = NULL; size_t buffer_len = MAX_PATH, len = 0; enum { - HOME_NONE, ENV_HOME, ENV_DRIVEPATH, ENV_USERPROFILE + HOME_NONE, ENV_HOME, ENV_USERPROFILE, ENV_DRIVEPATH } home_type = HOME_NONE; if ((len = GetEnvironmentVariableW(L"HOME", NULL, 0)) != 0) { buffer_len = len; home_type = ENV_HOME; } + else if ((len = GetEnvironmentVariableW(L"USERPROFILE", NULL, 0)) != 0) { + buffer_len = len; + home_type = ENV_USERPROFILE; + } else if ((len = GetEnvironmentVariableW(L"HOMEDRIVE", NULL, 0)) != 0) { buffer_len = len; if ((len = GetEnvironmentVariableW(L"HOMEPATH", NULL, 0)) != 0) { @@ -567,10 +571,6 @@ rb_w32_home_dir(void) home_type = ENV_DRIVEPATH; } } - else if ((len = GetEnvironmentVariableW(L"USERPROFILE", NULL, 0)) != 0) { - buffer_len = len; - home_type = ENV_USERPROFILE; - } /* allocate buffer */ buffer = ALLOC_N(WCHAR, buffer_len); @@ -579,13 +579,13 @@ rb_w32_home_dir(void) case ENV_HOME: GetEnvironmentVariableW(L"HOME", buffer, buffer_len); break; + case ENV_USERPROFILE: + GetEnvironmentVariableW(L"USERPROFILE", buffer, buffer_len); + break; case ENV_DRIVEPATH: len = GetEnvironmentVariableW(L"HOMEDRIVE", buffer, buffer_len); GetEnvironmentVariableW(L"HOMEPATH", buffer + len, buffer_len - len); break; - case ENV_USERPROFILE: - GetEnvironmentVariableW(L"USERPROFILE", buffer, buffer_len); - break; default: if (!get_special_folder(CSIDL_PROFILE, buffer, buffer_len) && !get_special_folder(CSIDL_PERSONAL, buffer, buffer_len)) { |