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]