From: Tomas Doran Date: Mon, 11 Jan 2010 19:30:32 +0000 (+0000) Subject: PRINT patch take 3 after diving the perl source X-Git-Tag: 0.68_02~1 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=cd90e76fb3045b4f4135da592e1b336a6f93b04c;p=catagits%2Ffcgi2.git PRINT patch take 3 after diving the perl source --- diff --git a/perl/FCGI.XL b/perl/FCGI.XL index 4e8e552..d24ee48 100644 --- a/perl/FCGI.XL +++ b/perl/FCGI.XL @@ -533,35 +533,31 @@ MODULE = FCGI PACKAGE = FCGI::Stream #ifndef USE_SFIO -void +SV * PRINT(stream, ...) FCGI::Stream stream; PREINIT: - int n, sum = 0, ret = 0; + int n; STRLEN len; register char *str; + bool ok = TRUE; CODE: - for (n = 1; n < items; ++n) { + for (n = 1; ok && n < items; ++n) { #ifdef DO_UTF8 - if (DO_UTF8(ST(n)) && !sv_utf8_downgrade(ST(n), 1)) - croak("Wide character in FCGI::Stream::PRINT"); + if (DO_UTF8(ST(n)) && !sv_utf8_downgrade(ST(n), 1)) + croak("Wide character in FCGI::Stream::PRINT"); #endif str = (char *)SvPV(ST(n),len); - if ((ret = FCGX_PutStr(str, len, stream)) < 0) - break; - - sum += ret; + if (FCGX_PutStr(str, len, stream) < 0) + ok = FALSE; } - if (sum == 0 && ret < 0) - XSRETURN_UNDEF; - + if (ok && SvTRUEx(perl_get_sv("|", FALSE)) && FCGX_FFlush(stream) < 0) + ok = FALSE; - if (SvTRUEx(perl_get_sv("|", FALSE))) - FCGX_FFlush(stream); - XSRETURN_YES; + RETVAL = ok ? &PL_sv_yes : &PL_sv_undef; int WRITE(stream, bufsv, len, ...)