From e72fe468a46be9b209a30d15af91d2e76018d697 Mon Sep 17 00:00:00 2001 From: Ray Lee Date: Sun, 16 Aug 2015 16:34:35 +0800 Subject: [PATCH] Bugfix:function setenv()and unsetenv() The original setenv() and unsetenv() function is invalid,I have rewrited to fix. --- contrib/win32/stdlib.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/contrib/win32/stdlib.c b/contrib/win32/stdlib.c index 95e3a1d..fc27042 100644 --- a/contrib/win32/stdlib.c +++ b/contrib/win32/stdlib.c @@ -34,21 +34,24 @@ // Handle platform specific includes #include "contrib/windows.h" +//There is no setenv()and unsetenv() in windows,but we can use putenv() instead. int setenv(const char *name, const char *value, int overwrite) { - int exists = GetEnvironmentVariableA(name, NULL, 0); - if ((exists && overwrite) || (!exists)) { - if (!SetEnvironmentVariableA(name, value)) { - // Set errno here correctly - return -1; - } - return 0; + char* env = getenv(name); + if ((env && overwrite) || (!env)) { + char* str[32]; + strcpy(str,name); + strcat(str,"="); + strcat(str,value); + return putenv(str); } - // Exists and overwrite is 0. return -1; } void unsetenv(const char *name) { - SetEnvironmentVariableA(name, NULL); + char* str[32]; + strcpy(str,name); + strcat(str,"="); + putenv(str); }