aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2014-12-18 10:08:26 +0000
committerRon Yorston <rmy@pobox.com>2014-12-18 10:08:26 +0000
commit067f2e7eaf36deac1175eaf24eeb118adcd37179 (patch)
treed46f16becc3f0d731dbe7cbfe55ccec29e2c674d
parent425eb69dfc56ee2e1a85cdd2ccab8c40121edf59 (diff)
downloadbusybox-w32-067f2e7eaf36deac1175eaf24eeb118adcd37179.tar.gz
busybox-w32-067f2e7eaf36deac1175eaf24eeb118adcd37179.tar.bz2
busybox-w32-067f2e7eaf36deac1175eaf24eeb118adcd37179.zip
Revert "Use putenv to implement unsetenv/clearenv"
This reverts commit fa147bd7ecb086f4fb9a4afea16b946693a822ce.
-rw-r--r--include/mingw.h4
-rw-r--r--win32/env.c57
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);
180 180
181int clearenv(void); 181int clearenv(void);
182char *mingw_getenv(const char *name); 182char *mingw_getenv(const char *name);
183int mingw_putenv(const char *env);
184char *mingw_mktemp(char *template); 183char *mingw_mktemp(char *template);
185int mkstemp(char *template); 184int mkstemp(char *template);
186char *realpath(const char *path, char *resolved_path); 185char *realpath(const char *path, char *resolved_path);
187int setenv(const char *name, const char *value, int replace); 186int setenv(const char *name, const char *value, int replace);
188int unsetenv(const char *env); 187void unsetenv(const char *env);
189 188
190#define getenv mingw_getenv 189#define getenv mingw_getenv
191#define putenv mingw_putenv
192#define mktemp mingw_mktemp 190#define mktemp mingw_mktemp
193 191
194/* 192/*
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)
104 else { 104 else {
105 for (; env[i]; i++) 105 for (; env[i]; i++)
106 env[i] = env[i+1]; 106 env[i] = env[i+1];
107 SetEnvironmentVariable(name, NULL);
107 } 108 }
108 } 109 }
109 return env; 110 return env;
110} 111}
111 112
112/* 113void unsetenv(const char *env)
113 * Removing an environment variable with WIN32 putenv requires an argument
114 * like "NAME="; glibc omits the '='. The implementations of unsetenv and
115 * clearenv allow for this.
116 *
117 * It isn't possible to create an environment variable with an empty value
118 * using WIN32 putenv.
119 */
120#undef putenv
121int unsetenv(const char *env)
122{ 114{
123 char *name; 115 env_setenv(environ, env);
124 int ret;
125
126 name = xmalloc(strlen(env)+2);
127 strcat(strcpy(name, env), "=");
128 ret = putenv(name);
129 free(name);
130
131 return ret;
132} 116}
133 117
134int clearenv(void) 118int clearenv(void)
135{ 119{
136 char *name, *s; 120 char **env = environ;
137 121 if (!env)
138 while ( environ && *environ ) { 122 return 0;
139 if ( (s=strchr(*environ, '=')) != NULL ) { 123 while (*env) {
140 name = xstrndup(*environ, s-*environ+1); 124 free(*env);
141 putenv(name); 125 env++;
142 free(name);
143 }
144 else {
145 return -1;
146 }
147 }
148 return 0;
149}
150
151int mingw_putenv(const char *env)
152{
153 char *s;
154
155 if ( (s=strchr(env, '=')) == NULL ) {
156 return unsetenv(env);
157 } 126 }
158 127 free(env);
159 if ( s[1] != '\0' ) { 128 environ = NULL;
160 return putenv(env);
161 }
162
163 /* can't set empty value */
164 return 0; 129 return 0;
165} 130}