diff options
-rw-r--r-- | win32/env.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/win32/env.c b/win32/env.c index 4d4e9c8fd..5de581e3d 100644 --- a/win32/env.c +++ b/win32/env.c | |||
@@ -78,7 +78,7 @@ int clearenv(void) | |||
78 | 78 | ||
79 | int mingw_putenv(const char *env) | 79 | int mingw_putenv(const char *env) |
80 | { | 80 | { |
81 | char *s, **envp; | 81 | char *s; |
82 | int ret = 0; | 82 | int ret = 0; |
83 | 83 | ||
84 | if ( (s=strchr(env, '=')) == NULL ) { | 84 | if ( (s=strchr(env, '=')) == NULL ) { |
@@ -90,17 +90,13 @@ int mingw_putenv(const char *env) | |||
90 | return _putenv(env); | 90 | return _putenv(env); |
91 | } | 91 | } |
92 | else { | 92 | else { |
93 | /* set empty value by setting a non-empty one then truncating */ | 93 | /* set empty value using WIN32 API*/ |
94 | char *envstr = xasprintf("%s0", env); | 94 | char *name = xstrdup(env); |
95 | ret = _putenv(envstr); | 95 | name[s - env] = '\0'; |
96 | 96 | SetEnvironmentVariable(name, ""); | |
97 | for (envp = environ; *envp; ++envp) { | 97 | free(name); |
98 | if (strcmp(*envp, envstr) == 0) { | 98 | /* set a dummy variable to force CRT housekeeping */ |
99 | (*envp)[s - env + 1] = '\0'; | 99 | _putenv("BB_DUMMY=0"); |
100 | break; | ||
101 | } | ||
102 | } | ||
103 | free(envstr); | ||
104 | } | 100 | } |
105 | 101 | ||
106 | return ret; | 102 | return ret; |