I backported these changes from Embperl2:

   - Fixed compiler warnings and errors when compiling with Perl 5.8.0.   
   - Replaced PL_sv_undef with ep_sv_undef (which is a copy of
     PL_sv_undef), because storing PL_sv_undef in a Perl 5.8.0 hash is
     treated as a placeholder and doesn't work as before.
   - Fixed problem when STDOUT is tied, because storege has changed in
     Perl 5.8.0.

and a few other small fixes to epio.c while I was at it (mostly type
changes).

Seems to pass "make test", I haven't tried it on anything else.
(In particular, I haven't backported the change for imported subs. I
presume either its not a problem in 1.3.x, or make test doesn't test
it)

perl 5.8, apache 1.3.26, mod_perl 1.27

Debian 1.3.4 package will be uploaded shortly, my apologies for the
delay.

 - Gus


Index: epmain.c
===================================================================
RCS file: /var/lib/cvs/debian/libhtml-embperl-perl/epmain.c,v
retrieving revision 1.1.1.5
diff -u -r1.1.1.5 epmain.c
--- epmain.c    5 Dec 2001 05:34:50 -0000       1.1.1.5
+++ epmain.c    30 Oct 2002 21:24:59 -0000
@@ -64,6 +64,13 @@
                                              filename + packagename, 
                                       value=>cache hash for file) */
 
+SV   ep_sv_undef ; /* we need our own undef value, because when
+                      storing a PL_sv_undef with Perl 5.8.0 in a hash
+                      Perl takes it as a placeholder and pretents it
+                      isn't there :-( */
+
+
+
 /* */
 /* print error */
 /* */
@@ -1429,6 +1436,8 @@
     pCurrReq = r ;
 
     r -> nIOType = _nIOType ;
+
+    memcpy (&ep_sv_undef, &PL_sv_undef, sizeof(PL_sv_undef)) ;
 
 #ifdef APACHE
     r -> pApacheReq = NULL ;
Index: epio.c
===================================================================
RCS file: /var/lib/cvs/debian/libhtml-embperl-perl/epio.c,v
retrieving revision 1.1.1.3
diff -u -r1.1.1.3 epio.c
--- epio.c      17 Oct 2001 05:44:47 -0000      1.1.1.3
+++ epio.c      30 Oct 2002 22:06:19 -0000
@@ -57,6 +57,21 @@
 #endif
 
 
+/* Some helper macros for tied handles, taken from mod_perl 2.0 :-) */
+/*
+ * bleedperl change #11639 switch tied handle magic
+ * from living in the gv to the GvIOp(gv), so we have to deal
+ * with both to support 5.6.x
+ */
+#if ((PERL_REVISION == 5) && (PERL_VERSION >= 7))
+#   define TIEHANDLE_SV(handle) (SV*)GvIOp((SV*)handle)
+#else
+#   define TIEHANDLE_SV(handle) (SV*)handle
+#endif
+
+#define HANDLE_GV(name) gv_fetchpv(name, TRUE, SVt_PVIO)
+
+
 
 #ifdef APACHE
 #define DefaultLog "/tmp/embperl.log"
@@ -346,16 +361,21 @@
         return ok ;
 #endif
     
-    handle = gv_fetchpv("STDIN", TRUE, SVt_PVIO) ;
-    if (handle && SvMAGICAL(handle) && (mg = mg_find((SV*)handle, 'q')) && 
mg->mg_obj) 
-       {
-       r -> ifdobj = mg->mg_obj ;
-       if (r -> bDebug)
+    handle = HANDLE_GV("STDIN") ;
+    if (handle)
+        {
+        SV *iohandle = TIEHANDLE_SV(handle) ;
+
+       if (iohandle && SvMAGICAL(iohandle) && (mg = mg_find((SV*)iohandle, 'q')) && 
+mg->mg_obj) 
            {
-           char *package = HvNAME(SvSTASH((SV*)SvRV(mg->mg_obj)));
-           lprintf (r, "[%d]Open TIED STDIN %s...\n", r -> nPid, package) ;
+           r -> ifdobj = mg->mg_obj ;
+           if (r -> bDebug)
+               {
+               char *package = HvNAME(SvSTASH((SV*)SvRV(mg->mg_obj)));
+               lprintf (r, "[%d]Open TIED STDIN %s...\n", r -> nPid, package) ;
+               }
+           return ok ;
            }
-       return ok ;
        }
 
     if (r -> ifd && r -> ifd != PerlIO_stdinF)
@@ -410,6 +430,7 @@
        XPUSHs(r -> ifdobj);
        PUTBACK;
        perl_call_method ("CLOSE", G_VOID | G_EVAL) ; 
+        SPAGAIN ;
        FREETMPS;
        LEAVE;
        r -> ifdobj = NULL ;
@@ -465,7 +486,7 @@
        n = 0 ;
        if (num > 0)
            {
-           int  n = POPi ;
+           STRLEN  n = POPu ;
            char * p ;
            STRLEN l ;
            if (n >= 0)
@@ -576,7 +597,7 @@
         return rcFileOpenErr ;
         }
 
-    if ((long)nFileSize < 0)
+    if ((long)*nFileSize < 0)
        return rcFileOpenErr ;
 
 
@@ -671,18 +692,22 @@
            }
 #endif
 
-       handle = gv_fetchpv("STDOUT", TRUE, SVt_PVIO) ;
-       if (handle && SvMAGICAL(handle) && (mg = mg_find((SV*)handle, 'q')) && 
mg->mg_obj) 
-           {
-           r -> ofdobj = mg->mg_obj ;
-           if (r -> bDebug)
-               {
-               char *package = HvNAME(SvSTASH((SV*)SvRV(mg->mg_obj)));
-               lprintf (r, "[%d]Open TIED STDOUT %s for output...\n", r -> nPid, 
package) ;
-               }
-           return ok ;
-           }
-       
+        handle = HANDLE_GV("STDOUT") ;
+        if (handle)
+            {
+            SV *iohandle = TIEHANDLE_SV(handle) ;
+
+           if (iohandle && SvMAGICAL(iohandle) && (mg = mg_find((SV*)iohandle, 'q')) 
+&& mg->mg_obj) 
+               {
+               r -> ofdobj = mg->mg_obj ;
+               if (r -> bDebug)
+                   {
+                   char *package = HvNAME(SvSTASH((SV*)SvRV(mg->mg_obj)));
+                   lprintf (r,  "[%d]Open TIED STDOUT %s for output...\n", r -> nPid, 
+package) ;
+                   }
+               return ok ;
+               }
+            }
        r -> ofd = PerlIO_stdoutF ;
         
         if (r -> bDebug)
@@ -744,6 +769,7 @@
        XPUSHs(r -> ifdobj);
        PUTBACK;
        perl_call_method ("CLOSE", G_VOID | G_EVAL) ; 
+        SPAGAIN ;
        FREETMPS;
        LEAVE;
        r -> ofdobj = NULL ;
@@ -825,7 +851,7 @@
            /*in*/ const void * ptr, size_t size) 
 
     {
-    int n = size ;
+    size_t n = size ;
 
     if (n == 0 || r -> bDisableOutput)
         return 0 ;
@@ -833,10 +859,10 @@
     if (r -> pMemBuf)
         {
         char * p ;
-        int s = r -> nMemBufSize ;
+        size_t s = r -> nMemBufSize ;
         if (n >= r -> nMemBufSizeFree)
             {
-            int oldsize = s ;
+            size_t oldsize = s ;
             if (s < n)
                 s = n + r -> nMemBufSize ;
             
@@ -875,6 +901,7 @@
        XPUSHs(sv_2mortal(newSVpv((char *)ptr,size)));
        PUTBACK;
        perl_call_method ("PRINT", G_SCALAR) ; 
+        SPAGAIN ;
        FREETMPS;
        LEAVE;
        return size ;
@@ -895,7 +922,7 @@
             return 0 ;
         }
 #endif
-    if (n > 0)
+    if (n > 0 && r -> ofd)
         {
         n = PerlIO_write (r -> ofd, (void *)ptr, size) ;
 
Index: ep.h
===================================================================
RCS file: /var/lib/cvs/debian/libhtml-embperl-perl/ep.h,v
retrieving revision 1.1.1.5
diff -u -r1.1.1.5 ep.h
--- ep.h        2 Nov 2001 10:25:58 -0000       1.1.1.5
+++ ep.h        30 Oct 2002 21:28:56 -0000
@@ -21,7 +21,15 @@
 #include <ctype.h>
 #include <time.h>
 
-#if !defined(PERLIO_IS_STDIO)
+#ifndef PERL_VERSION
+#include <patchlevel.h>
+#ifndef PERL_VERSION
+#define PERL_VERSION PATCHLEVEL
+#define PERL_SUBVERSION SUBVERSION
+#endif
+#endif
+
+#if !defined(PERLIO_IS_STDIO) && PERL_VERSION < 8
 #define PERLIO_IS_STDIO
 #endif
 
@@ -96,12 +104,6 @@
 #undef sleep
 #endif
 
-#ifndef PERL_VERSION
-#include <patchlevel.h>
-#define PERL_VERSION PATCHLEVEL
-#define PERL_SUBVERSION SUBVERSION
-#endif
-
 #if PERL_VERSION >= 6
 
 #ifdef opendir
@@ -171,6 +173,12 @@
 #define PATH_MAX 512
 #endif
 
+
+#ifdef sv_undef
+#undef sv_undef 
+#endif
+#define sv_undef ep_sv_undef
+extern SV ep_sv_undef ;
 
 /* ---- global variables ---- */
 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to