merging from trunk from r209127 to r209863



git-svn-id: https://svn.apache.org/repos/asf/perl/modperl/branches/clone-skip-unstable@209866 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/modules/perl/mod_perl.c b/src/modules/perl/mod_perl.c
index 18c2fc5..6bcf57b 100644
--- a/src/modules/perl/mod_perl.c
+++ b/src/modules/perl/mod_perl.c
@@ -532,6 +532,9 @@
     modperl_global_init_server_rec(pconf, s);
 
     modperl_tls_create_request_rec(pconf);
+
+    /* init the counter to 0 */
+    modperl_global_anon_cnt_init(pconf);
 }
 
 /*
@@ -692,9 +695,17 @@
     }
 #endif
 
+#if PERL_REVISION == 5 && PERL_VERSION < 9
+#define MP_PERL_VERSION_STAMP "Perl/v%vd"
+#else
+#define MP_PERL_VERSION_STAMP "Perl/%" SVf
+#endif
+    
     ap_add_version_component(pconf, MP_VERSION_STRING);
     ap_add_version_component(pconf,
-                             Perl_form(aTHX_ "Perl/v%vd", PL_patchlevel));
+                             Perl_form(aTHX_ MP_PERL_VERSION_STAMP,
+                                       PL_patchlevel));
+
     modperl_mgv_hash_handlers(pconf, s);
     modperl_modglobal_hash_keys(aTHX);
     modperl_env_hash_keys(aTHX);
diff --git a/src/modules/perl/modperl_cmd.c b/src/modules/perl/modperl_cmd.c
index 4d4387e..ffc4484 100644
--- a/src/modules/perl/modperl_cmd.c
+++ b/src/modules/perl/modperl_cmd.c
@@ -554,6 +554,9 @@
         GV *gv = gv_fetchpv("0", TRUE, SVt_PV);
         ENTER;SAVETMPS;
         save_scalar(gv); /* local $0 */
+#if PERL_REVISION == 5 && PERL_VERSION >= 9
+        TAINT_NOT; /* XXX: temp workaround, see my p5p post */
+#endif
         sv_setpv_mg(GvSV(gv), directive->filename);
         eval_sv(code, G_SCALAR|G_KEEPERR);
         SvREFCNT_dec(code);
diff --git a/src/modules/perl/modperl_common_util.c b/src/modules/perl/modperl_common_util.c
index f6b48a3..22cc8da 100644
--- a/src/modules/perl/modperl_common_util.c
+++ b/src/modules/perl/modperl_common_util.c
@@ -95,7 +95,7 @@
                     return mg->mg_obj;
                 }
                 else {
-                    Perl_warn(aTHX_ "Not a tied hash: (magic=%c)", mg);
+                    Perl_warn(aTHX_ "Not a tied hash: (magic=%c)", mg->mg_type);
                 }
             }
             else {
diff --git a/src/modules/perl/modperl_interp.h b/src/modules/perl/modperl_interp.h
index da8bc60..d8299c8 100644
--- a/src/modules/perl/modperl_interp.h
+++ b/src/modules/perl/modperl_interp.h
@@ -27,12 +27,28 @@
  * HvPMROOT will never be used by Perl with PL_modglobal.
  * so we have stolen it as a quick way to stash the interp
  * pointer.
+ *
+ * However in 5.9.3 HvPMROOT was completely removed, so we have moved
+ * to use another struct member that's hopefully won't be used by
+ * anybody else. But if we can find a better place to store the
+ * pointer to the current mod_perl interpreter object it'd be a much
+ * cleaner solution. of course it must be really fast.
  */
+#ifndef HvPMROOT
+#define MP_THX_INTERP_GET(thx)                                  \
+    (modperl_interp_t *) ((XPVMG*)SvANY(*Perl_Imodglobal_ptr(thx)))->xmg_magic
+#else
 #define MP_THX_INTERP_GET(thx) \
     (modperl_interp_t *)HvPMROOT(*Perl_Imodglobal_ptr(thx))
+#endif
 
-#define MP_THX_INTERP_SET(thx, interp) \
+#ifndef HvPMROOT
+#define MP_THX_INTERP_SET(thx, interp)                          \
+    ((XPVMG*)SvANY(*Perl_Imodglobal_ptr(thx)))->xmg_magic = (MAGIC*)interp
+#else
+#define MP_THX_INTERP_SET(thx, interp)                          \
     HvPMROOT(*Perl_Imodglobal_ptr(thx)) = (PMOP*)interp
+#endif
 
 const char *modperl_interp_scope_desc(modperl_interp_scope_e scope);
 
diff --git a/src/modules/perl/modperl_io.c b/src/modules/perl/modperl_io.c
index 1b9403f..99a87d1 100644
--- a/src/modules/perl/modperl_io.c
+++ b/src/modules/perl/modperl_io.c
@@ -124,7 +124,7 @@
         status = Perl_do_open(aTHX_ handle_save, "<&STDIN", 7, FALSE,
                               O_RDONLY, 0, Nullfp);
         if (status == 0) {
-            Perl_croak(aTHX_ "Failed to dup STDIN: %_", get_sv("!", TRUE));
+            Perl_croak(aTHX_ "Failed to dup STDIN: %" SVf, get_sv("!", TRUE));
         }
 
         /* similar to PerlIO::scalar, the PerlIO::Apache layer doesn't
@@ -137,7 +137,7 @@
     status = Perl_do_open9(aTHX_ handle, "<:Apache2", 9, FALSE, O_RDONLY,
                            0, Nullfp, sv, 1);
     if (status == 0) {
-        Perl_croak(aTHX_ "Failed to open STDIN: %_", get_sv("!", TRUE));
+        Perl_croak(aTHX_ "Failed to open STDIN: %" SVf, get_sv("!", TRUE));
     }
 
     MP_TRACE_o(MP_FUNC, "end\n");
@@ -167,7 +167,7 @@
         status = Perl_do_open(aTHX_ handle_save, ">&STDOUT", 8, FALSE,
                               O_WRONLY, 0, Nullfp);
         if (status == 0) {
-            Perl_croak(aTHX_ "Failed to dup STDOUT: %_", get_sv("!", TRUE));
+            Perl_croak(aTHX_ "Failed to dup STDOUT: %" SVf, get_sv("!", TRUE));
         }
 
         /* similar to PerlIO::scalar, the PerlIO::Apache layer doesn't
@@ -180,7 +180,7 @@
     status = Perl_do_open9(aTHX_ handle, ">:Apache2", 9, FALSE, O_WRONLY,
                            0, Nullfp, sv, 1);
     if (status == 0) {
-        Perl_croak(aTHX_ "Failed to open STDOUT: %_", get_sv("!", TRUE));
+        Perl_croak(aTHX_ "Failed to open STDOUT: %" SVf, get_sv("!", TRUE));
     }
 
     MP_TRACE_o(MP_FUNC, "end\n");
@@ -221,7 +221,7 @@
                         GvNAME(handle), GvNAMELEN(handle), G_DISCARD);
 
         if (err != Nullsv) {
-            Perl_croak(aTHX_ "Failed to restore STDIN: %_", err);
+            Perl_croak(aTHX_ "Failed to restore STDIN: %" SVf, err);
         }
     }
 
@@ -243,7 +243,7 @@
      */
     if (GvIOn(handle_orig) && IoOFP(GvIOn(handle_orig)) &&
         (PerlIO_flush(IoOFP(GvIOn(handle_orig))) == -1)) {
-        Perl_croak(aTHX_ "Failed to flush STDOUT: %_", get_sv("!", TRUE));
+        Perl_croak(aTHX_ "Failed to flush STDOUT: %" SVf, get_sv("!", TRUE));
     }
 
     /* close the overriding filehandle */
@@ -268,7 +268,7 @@
                         GvNAME(handle), GvNAMELEN(handle), G_DISCARD);
 
         if (err != Nullsv) {
-            Perl_croak(aTHX_ "Failed to restore STDOUT: %_", err);
+            Perl_croak(aTHX_ "Failed to restore STDOUT: %" SVf, err);
         }
     }
 
diff --git a/src/modules/perl/modperl_mgv.c b/src/modules/perl/modperl_mgv.c
index 6ca7a16..bf05df1 100644
--- a/src/modules/perl/modperl_mgv.c
+++ b/src/modules/perl/modperl_mgv.c
@@ -320,8 +320,17 @@
             MpHandlerMETHOD_On(handler);
         }
 
+        if (!stash) {
+            return 0;
+        }
+        
+        
         if (MpHandlerMETHOD(handler) && !handler->mgv_obj) {
-            modperl_mgv_new_name(handler->mgv_obj, p, HvNAME(stash));
+            char *name = HvNAME(stash);
+            if (!name) {
+                name = "";
+            }
+            modperl_mgv_new_name(handler->mgv_obj, p, name);
         }
 
         handler->attrs = (U32)MP_CODE_ATTRS(cv);
diff --git a/src/modules/perl/modperl_util.c b/src/modules/perl/modperl_util.c
index 069888b..a7156fd 100644
--- a/src/modules/perl/modperl_util.c
+++ b/src/modules/perl/modperl_util.c
@@ -136,7 +136,7 @@
             break;
           default:
             Perl_croak(aTHX_ "panic: unsupported request_rec type %d",
-                       SvTYPE(rv));
+                       (int)SvTYPE(rv));
         }
     }
 
@@ -408,7 +408,7 @@
     register HE *entry;
 
     xhv = (XPVHV *)SvANY(hv);
-    if (!xhv->xhv_array) {
+    if (!HvARRAY(hv)) {
         return 0;
     }
 
@@ -422,7 +422,7 @@
 	PERL_HASH(hash, key, klen);
     }
 
-    entry = ((HE**)xhv->xhv_array)[hash & (I32)xhv->xhv_max];
+    entry = ((HE**)HvARRAY(hv))[hash & (I32)xhv->xhv_max];
 
     for (; entry; entry = HeNEXT(entry)) {
         if (HeHASH(entry) != hash) {
@@ -633,7 +633,7 @@
     if (r->finfo.size != size) {
         SvREFCNT_dec(sv); 
         Perl_croak(aTHX_ "Error: read %d bytes, expected %d ('%s')",
-                   size, r->finfo.size, r->filename);
+                   size, (apr_size_t)r->finfo.size, r->filename);
     }
 
     rc = apr_file_close(file);
diff --git a/xs/APR/Socket/APR__Socket.h b/xs/APR/Socket/APR__Socket.h
index 9fa8116..e7951a0 100644
--- a/xs/APR/Socket/APR__Socket.h
+++ b/xs/APR/Socket/APR__Socket.h
@@ -43,7 +43,7 @@
         if (buf_len < SvIV(sv_len)) {
             Perl_croak(aTHX_ "the 3rd arg (%d) is bigger than the "
                        "length (%d) of the 2nd argument",
-                       SvIV(sv_len), buf_len);
+                       (int)SvIV(sv_len), buf_len);
         }
         buf_len = SvIV(sv_len);
     }
diff --git a/xs/ModPerl/Util/ModPerl__Util.h b/xs/ModPerl/Util/ModPerl__Util.h
index 15afecc..924afcb 100644
--- a/xs/ModPerl/Util/ModPerl__Util.h
+++ b/xs/ModPerl/Util/ModPerl__Util.h
@@ -18,7 +18,7 @@
     Perl_newSVpvf(aTHX_ "0x%lx", (unsigned long)aTHX)
 #else
 #define mpxs_ModPerl__Util_current_perl_id() \
-    Perl_newSVpvf(aTHX_ "0x%lx", 0)
+    Perl_newSVpvf(aTHX_ "0x%lx", (unsigned long)0)
 #endif
 
 static MP_INLINE void mpxs_ModPerl__Util_untaint(pTHX_ I32 items,