Integrate Jarkko's Encode.pm tweak.
[p5sagit/p5-mst-13.2.git] / perl.c
diff --git a/perl.c b/perl.c
index f199e46..b1d70b1 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -445,8 +445,9 @@ perl_destruct(pTHXx)
        I32 i;
 
        for (i = 0; environ[i]; i++)
-           Safefree(environ[i]);
-       Safefree(environ);
+           safesysfree(environ[i]);
+       /* Must use safesysfree() when working with environ. */
+       safesysfree(environ);           
 
        environ = PL_origenviron;
     }
@@ -3357,12 +3358,15 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register
            for (env_base = env; *env; env++) 
                dup_env_count++;
            if ((dup_env_base = (char **)
-                safemalloc( sizeof(char *) * (dup_env_count+1) ))) {
+                safesysmalloc( sizeof(char *) * (dup_env_count+1) ))) {
                char **dup_env;
                for (env = env_base, dup_env = dup_env_base;
                     *env;
-                    env++, dup_env++)
-                   *dup_env = savepv(*env);
+                    env++, dup_env++) {
+                   /* With environ one needs to use safesysmalloc(). */
+                   *dup_env = safesysmalloc(strlen(*env) + 1);
+                   (void)strcpy(*dup_env, *env);
+               }
                *dup_env = Nullch;
                env = dup_env_base;
            } /* else what? */
@@ -3378,17 +3382,15 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register
            sv = newSVpv(s--,0);
            (void)hv_store(hv, *env, s - *env, sv, 0);
            *s = '=';
-#if defined(__BORLANDC__) && defined(USE_WIN32_RTL_ENV)
-           /* Sins of the RTL. See note in my_setenv(). */
-           (void)PerlEnv_putenv(savepv(*env));
-#endif
        }
+#ifdef NEED_ENVIRON_DUP_FOR_MODIFY
        if (dup_env_base) {
            char **dup_env;
            for (dup_env = dup_env_base; *dup_env; dup_env++)
-               Safefree(*dup_env);
-           Safefree(dup_env_base);
+               safesysfree(*dup_env);
+           safesysfree(dup_env_base);
        }
+#endif /* NEED_ENVIRON_DUP_FOR_MODIFY */
 #endif /* USE_ENVIRON_ARRAY */
 #ifdef DYNAMIC_ENV_FETCH
        HvNAME(hv) = savepv(ENV_HV_NAME);