summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunstan2009-06-05 20:32:00 +0000
committerAndrew Dunstan2009-06-05 20:32:00 +0000
commit15d78e9df0133fbe6cb9ea36696c2579dcc1fd19 (patch)
tree5c2e28ad5b3207e8eaa1954199901c80b4e1853f
parent0e21a7d74ba4f519fe27842ad14c002580faa0d9 (diff)
Adjust recent PERL_SYS_INIT3 call to avoid platforms where it might fail, and to remove compilation warning. Backpatch the release 7.4
-rw-r--r--src/pl/plperl/plperl.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 9aa92bb3be..339267d619 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -401,6 +401,8 @@ plperl_init_interp(void)
int nargs = 3;
+ char *dummy_perl_env[1] = { NULL };
+
#ifdef WIN32
/*
@@ -443,11 +445,19 @@ plperl_init_interp(void)
save_time = loc ? pstrdup(loc) : NULL;
#endif
-
-#ifdef PERL_SYS_INIT3
+ /****
+ * The perl API docs state that PERL_SYS_INIT3 should be called before
+ * allocating interprters. Unfortunately, on some platforms this fails
+ * in the Perl_do_taint() routine, which is called when the platform is
+ * using the system's malloc() instead of perl's own. Other platforms,
+ * notably Windows, fail if PERL_SYS_INIT3 is not called. So we call it
+ * if it's available, unless perl is using the system malloc(), which is
+ * true when MYMALLOC is set.
+ */
+#if defined(PERL_SYS_INIT3) && !defined(MYMALLOC)
/* only call this the first time through, as per perlembed man page */
if (interp_state == INTERP_NONE)
- PERL_SYS_INIT3(&nargs, (char ***) &embedding, NULL);
+ PERL_SYS_INIT3(&nargs, (char ***) &embedding, (char***)&dummy_perl_env);
#endif
plperl_held_interp = perl_alloc();