]> granicus.if.org Git - php/commitdiff
MFH: - Fixed putenv() under win32 (see bug #32957)
authorfoobar <sniper@php.net>
Sun, 8 May 2005 19:50:39 +0000 (19:50 +0000)
committerfoobar <sniper@php.net>
Sun, 8 May 2005 19:50:39 +0000 (19:50 +0000)
ext/standard/basic_functions.c

index 7ef15f34e404cad2026c0c43a184e54ace2c0824..60ea17b70b24de0b716eee9b4ac365afeef8e15f 100644 (file)
@@ -944,6 +944,13 @@ zend_module_entry basic_functions_module = {
 static void php_putenv_destructor(putenv_entry *pe)
 {
        if (pe->previous_value) {
+#if _MSC_VER
+               /* VS.Net has a bug in putenv() when setting a variable that
+                * is already set; if the SetEnvironmentVariable() API call
+                * fails, the Crt will double free() a string.
+                * We try to avoid this by setting our own value first */
+               SetEnvironmentVariable(pe->key, "bugbug");
+#endif
                putenv(pe->previous_value);
        } else {
 # if HAVE_UNSETENV
@@ -1430,6 +1437,14 @@ PHP_FUNCTION(putenv)
                        }
                }
 
+#if _MSC_VER
+               /* VS.Net has a bug in putenv() when setting a variable that
+                * is already set; if the SetEnvironmentVariable() API call
+                * fails, the Crt will double free() a string.
+                * We try to avoid this by setting our own value first */
+               SetEnvironmentVariable(pe.key, "bugbug");
+#endif
+
                if (putenv(pe.putenv_string) == 0) {    /* success */
                        zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len+1, (void **) &pe, sizeof(putenv_entry), NULL);
 #ifdef HAVE_TZSET