From 067f2e7eaf36deac1175eaf24eeb118adcd37179 Mon Sep 17 00:00:00 2001 From: Ron Yorston <rmy@pobox.com> Date: Thu, 18 Dec 2014 10:08:26 +0000 Subject: Revert "Use putenv to implement unsetenv/clearenv" This reverts commit fa147bd7ecb086f4fb9a4afea16b946693a822ce. --- include/mingw.h | 4 +--- win32/env.c | 57 +++++++++++---------------------------------------------- 2 files changed, 12 insertions(+), 49 deletions(-) diff --git a/include/mingw.h b/include/mingw.h index 80d9b7987..5f6016dee 100644 --- a/include/mingw.h +++ b/include/mingw.h @@ -180,15 +180,13 @@ int mingw_system(const char *cmd); int clearenv(void); char *mingw_getenv(const char *name); -int mingw_putenv(const char *env); char *mingw_mktemp(char *template); int mkstemp(char *template); char *realpath(const char *path, char *resolved_path); int setenv(const char *name, const char *value, int replace); -int unsetenv(const char *env); +void unsetenv(const char *env); #define getenv mingw_getenv -#define putenv mingw_putenv #define mktemp mingw_mktemp /* diff --git a/win32/env.c b/win32/env.c index eb2e1f004..f8d231a8f 100644 --- a/win32/env.c +++ b/win32/env.c @@ -104,62 +104,27 @@ char **env_setenv(char **env, const char *name) else { for (; env[i]; i++) env[i] = env[i+1]; + SetEnvironmentVariable(name, NULL); } } return env; } -/* - * Removing an environment variable with WIN32 putenv requires an argument - * like "NAME="; glibc omits the '='. The implementations of unsetenv and - * clearenv allow for this. - * - * It isn't possible to create an environment variable with an empty value - * using WIN32 putenv. - */ -#undef putenv -int unsetenv(const char *env) +void unsetenv(const char *env) { - char *name; - int ret; - - name = xmalloc(strlen(env)+2); - strcat(strcpy(name, env), "="); - ret = putenv(name); - free(name); - - return ret; + env_setenv(environ, env); } int clearenv(void) { - char *name, *s; - - while ( environ && *environ ) { - if ( (s=strchr(*environ, '=')) != NULL ) { - name = xstrndup(*environ, s-*environ+1); - putenv(name); - free(name); - } - else { - return -1; - } - } - return 0; -} - -int mingw_putenv(const char *env) -{ - char *s; - - if ( (s=strchr(env, '=')) == NULL ) { - return unsetenv(env); + char **env = environ; + if (!env) + return 0; + while (*env) { + free(*env); + env++; } - - if ( s[1] != '\0' ) { - return putenv(env); - } - - /* can't set empty value */ + free(env); + environ = NULL; return 0; } -- cgit v1.2.3-55-g6feb