summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--win32/win32.c13
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 <usa@ruby-lang.org>
+
+ * 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 <usa@ruby-lang.org>
* 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 = "<Unknown>";
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);
}
}
}