summaryrefslogtreecommitdiff
path: root/hash.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-11-11 03:20:21 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-11-11 03:20:21 +0000
commitdc9112dd7ae5ebc10f0a975b35baba4e83051bb2 (patch)
tree4c79e8fb9a98c7b4cba6385fb813ac7156e74969 /hash.c
parent914b36e3f9a9d3da7f5739518e8b0f814599daca (diff)
* hash.c (ruby_setenv): also set CRT workarea. ref [ruby-core:25010]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25715 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/hash.c b/hash.c
index 8b1c68f6f7..bc5e5b3009 100644
--- a/hash.c
+++ b/hash.c
@@ -2032,24 +2032,24 @@ void
ruby_setenv(const char *name, const char *value)
{
#if defined(_WIN32)
- /* The sane way to deal with the environment.
- * Has these advantages over putenv() & co.:
- * * enables us to store a truly empty value in the
- * environment (like in UNIX).
- * * we don't have to deal with RTL globals, bugs and leaks.
- * * Much faster.
- * Why you may want to enable USE_WIN32_RTL_ENV:
- * * environ[] and RTL functions will not reflect changes,
- * which might be an issue if extensions want to access
- * the env. via RTL. This cuts both ways, since RTL will
- * not see changes made by extensions that call the Win32
- * functions directly, either.
- * GSAR 97-06-07
- *
- * REMARK: USE_WIN32_RTL_ENV is already obsoleted since we don't use
- * RTL's environ global variable directly yet.
- */
- SetEnvironmentVariable(name,value);
+ int len;
+ char *buf;
+ if (value) {
+ len = strlen(name) + 1 + strlen(value) + 1;
+ buf = ALLOCA_N(char, len);
+ snprintf(buf, len, "%s=%s", name, value);
+ putenv(buf);
+
+ /* putenv() doesn't handle empty value */
+ if (*value)
+ SetEnvironmentVariable(name,value);
+ }
+ else {
+ len = strlen(name) + 1 + 1;
+ buf = ALLOCA_N(char, len);
+ snprintf(buf, len, "%s=", name);
+ putenv(buf);
+ }
#elif defined(HAVE_SETENV) && defined(HAVE_UNSETENV)
#undef setenv
#undef unsetenv