joes 2003/04/12 14:49:49
Modified: Request Request.xs
Log:
Revert to original ->fh for pre-5.8 perl.
Revision Changes Path
1.34 +23 -2 httpd-apreq/Request/Request.xs
Index: Request.xs
===================================================================
RCS file: /home/cvs/httpd-apreq/Request/Request.xs,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- Request.xs 27 Feb 2003 20:03:58 -0000 1.33
+++ Request.xs 12 Apr 2003 21:49:49 -0000 1.34
@@ -525,9 +525,8 @@
fp = ApacheUpload_fh(upload);
if (fp == NULL)
XSRETURN_UNDEF;
-
+#if PERL_VERSION > 500703
fd = PerlLIO_dup(fileno(fp));
-
/* XXX: user should check errno on undef returns */
if (fd < 0)
@@ -535,17 +534,39 @@
if ( !(RETVAL = PerlIO_fdopen(fd, "r")) )
XSRETURN_UNDEF;
+#else
+ if ( ( RETVAL = PerlIO_importFILE(fp,0) ) == NULL )
+ XSRETURN_UNDEF;
+#endif
OUTPUT:
RETVAL
CLEANUP:
/* XXX: there may be a leak/segfault in here somewhere */
+#if PERL_VERSION > 500703
if (ST(0) != &PL_sv_undef) {
IO *io = GvIOn((GV*)SvRV(ST(0)));
if (upload->req->parsed)
PerlIO_seek(IoIFP(io), 0, 0);
}
+#else
+ if (ST(0) != &PL_sv_undef) {
+ IO *io = GvIOn((GV*)SvRV(ST(0)));
+ int fd = PerlIO_fileno(IoIFP(io));
+ PerlIO *fp;
+
+ fd = PerlLIO_dup(fd);
+ if (!(fp = PerlIO_fdopen(fd, "r"))) {
+ PerlLIO_close(fd);
+ croak("fdopen failed!");
+ }
+ if (upload->req->parsed)
+ PerlIO_seek(fp, 0, 0);
+
+ IoIFP(io) = fp;
+ }
+#endif
long
ApacheUpload_size(upload)