IO:: PRINT returns a bool, not no of bytes written, pointed out by chansen
[catagits/fcgi2.git] / perl / FCGI.XL
index 01742cc..a7d0213 100644 (file)
@@ -12,7 +12,7 @@ unless ($] >= 5.005) {
 print OUT while <DATA>;
 close OUT;
 __END__
-/* $Id: FCGI.XL,v 1.9 2002/11/11 13:51:20 skimo Exp $ */
+/* $Id: FCGI.XL,v 1.10 2003/06/22 00:24:11 robs Exp $ */
 
 #include "EXTERN.h"
 #include "perl.h"
@@ -487,8 +487,10 @@ Detach(request)
     PROTOTYPE: $
 
     CODE:
-    if (request->accepted && request->bound)
-       FCGI_UndoBinding(request);
+    if (request->accepted && request->bound) {
+        FCGI_UndoBinding(request);
+        FCGX_Detach(request->requestPtr);
+    }
 
 void
 Attach(request)
@@ -497,8 +499,10 @@ Attach(request)
     PROTOTYPE: $
 
     CODE:
-    if (request->accepted && !request->bound)
-       FCGI_Bind(request);
+    if (request->accepted && !request->bound) {
+        FCGI_Bind(request);
+        FCGX_Attach(request->requestPtr);
+    }
 
 void
 LastCall(request)
@@ -529,7 +533,7 @@ MODULE = FCGI               PACKAGE = FCGI::Stream
 
 #ifndef USE_SFIO
 
-void
+int
 PRINT(stream, ...)
        FCGI::Stream    stream;
 
@@ -537,13 +541,22 @@ PRINT(stream, ...)
        int     n;
 
        CODE:
-       for (n = 1; n < items; ++n) {
+    for (n = 1; n < items; ++n) {
             STRLEN len;
-            register char *tmps = (char *)SvPV(ST(n),len);
-            FCGX_PutStr(tmps, len, stream);
-       }
+            register char *tmps; 
+#ifdef DO_UTF8
+            if (DO_UTF8(ST(n)) && !sv_utf8_downgrade(ST(n), 1))
+                croak("Wide character in FCGI::Stream::PRINT");
+#endif
+            tmps = (char *)SvPV(ST(n),len);
+               FCGX_PutStr(tmps, len, stream);
+    }
        if (SvTRUEx(perl_get_sv("|", FALSE))) 
            FCGX_FFlush(stream);
+    RETVAL = 1;
+
+    OUTPUT:
+    RETVAL
 
 int
 WRITE(stream, bufsv, len, ...)
@@ -559,6 +572,10 @@ WRITE(stream, bufsv, len, ...)
 
        CODE:
        offset = (items == 4) ? (int)SvIV(ST(3)) : 0;
+#ifdef DO_UTF8
+    if (DO_UTF8(bufsv) && !sv_utf8_downgrade(bufsv, 1))
+         croak("Wide character in FCGI::Stream::WRITE");
+#endif
        buf = SvPV(bufsv, blen);
        if (offset < 0) offset += blen;
        if (len > blen - offset)
@@ -568,7 +585,7 @@ WRITE(stream, bufsv, len, ...)
            ST(0) = &PL_sv_undef;
        else {
            ST(0) = sv_newmortal();
-           sv_setpvf(ST(0), "%c", n);
+           sv_setiv(ST(0), n);
        }
 
 int
@@ -583,6 +600,10 @@ READ(stream, bufsv, len, ...)
 
        CODE:
        offset = (items == 4) ? (int)SvIV(ST(3)) : 0;
+#ifdef DO_UTF8
+    if (DO_UTF8(bufsv) && !sv_utf8_downgrade(bufsv, 1))
+         croak("Wide character in FCGI::Stream::READ");
+#endif
        if (! SvOK(bufsv))
            sv_setpvn(bufsv, "", 0);
        buf = SvGROW(bufsv, len+offset+1);