From 4301bbbe0f115b7d7389d0b37e8c8bfcc9b2ab49 Mon Sep 17 00:00:00 2001 From: usa Date: Tue, 12 Jan 2010 05:54:47 +0000 Subject: * win32/win32.c (init_env): use _wputenv() instead of SetEnvironmentVariableW() because latter doesn't set msvcrt's environ work area, of course. [Bug #2552] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26296 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ win32/win32.c | 13 ++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e0c93d8c13..67d050326b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue Jan 12 14:53:07 2010 NAKAMURA Usaku + + * win32/win32.c (init_env): use _wputenv() instead of + SetEnvironmentVariableW() because latter doesn't set msvcrt's environ + work area, of course. + [Bug #2552] + Tue Jan 12 13:33:54 2010 NAKAMURA Usaku * file.c (realpath_rec): trace symbolic link only when supporting diff --git a/win32/win32.c b/win32/win32.c index e046b548d1..215752210d 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -435,6 +435,7 @@ init_env(void) { static const WCHAR TMPDIR[] = L"TMPDIR"; WCHAR env[_MAX_PATH]; + WCHAR *buf; DWORD len; BOOL f; @@ -458,7 +459,9 @@ init_env(void) } if (f) { regulate_path(env); - SetEnvironmentVariableW(L"HOME", env); + buf = ALLOCA_N(WCHAR, 5 + lstrlenW(env) + 1); + wsprintfW(buf, L"HOME=%s", env); + _wputenv(buf); } } @@ -468,7 +471,9 @@ init_env(void) NTLoginName = ""; return; } - SetEnvironmentVariableW(L"USER", env); + buf = ALLOCA_N(WCHAR, 5 + lstrlenW(env) + 1); + wsprintfW(buf, L"USER=%s", env); + _wputenv(buf); } NTLoginName = strdup(rb_w32_getenv("USER")); @@ -482,7 +487,9 @@ init_env(void) if (*(p - 1) != L'/') *p++ = L'/'; if (p - env + numberof(temp) < numberof(env)) { memcpy(p, temp, sizeof(temp)); - SetEnvironmentVariableW(TMPDIR, env); + buf = ALLOCA_N(WCHAR, lstrlenW(TMPDIR) + 1 + lstrlenW(env) + 1); + wsprintfW(buf, L"%s=%s", TMPDIR, env); + _wputenv(buf); } } } -- cgit v1.2.3