Return-Path: Delivered-To: apmail-modperl-cvs-archive@apache.org Received: (qmail 85010 invoked by uid 500); 15 Jan 2003 06:11:10 -0000 Mailing-List: contact modperl-cvs-help@perl.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: dev@perl.apache.org Delivered-To: mailing list modperl-cvs@apache.org Received: (qmail 84999 invoked by uid 500); 15 Jan 2003 06:11:10 -0000 Delivered-To: apmail-modperl-2.0-cvs@apache.org Date: 15 Jan 2003 06:11:09 -0000 Message-ID: <20030115061109.5632.qmail@icarus.apache.org> From: stas@apache.org To: modperl-2.0-cvs@apache.org Subject: cvs commit: modperl-2.0/xs/Apache/Filter Apache__Filter.h X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N stas 2003/01/14 22:11:09 Modified: xs/Apache/Filter Apache__Filter.h Log: input filters are now supported Revision Changes Path 1.22 +21 -8 modperl-2.0/xs/Apache/Filter/Apache__Filter.h Index: Apache__Filter.h =================================================================== RCS file: /home/cvs/modperl-2.0/xs/Apache/Filter/Apache__Filter.h,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- Apache__Filter.h 12 Jan 2003 02:33:27 -0000 1.21 +++ Apache__Filter.h 15 Jan 2003 06:11:08 -0000 1.22 @@ -26,7 +26,7 @@ mpxs_write_loop(modperl_output_filter_write, modperl_filter); } else { - Perl_croak(aTHX_ "input filters not yet supported"); + mpxs_write_loop(modperl_input_filter_write, modperl_filter); } /* XXX: ap_rflush if $| */ @@ -38,23 +38,36 @@ SV **MARK, SV **SP) { modperl_filter_t *modperl_filter; + ap_input_mode_t mode = 0; + apr_read_type_e block = 0; + apr_off_t readbytes = 0; apr_size_t wanted, len=0; SV *buffer; - - mpxs_usage_va_2(modperl_filter, buffer, "$filter->read(buf, [len])"); - - if (items > 2) { + + if (items < 4) { + mpxs_usage_va_2(modperl_filter, buffer, "$filter->read(buf, [len])"); + } + else { + modperl_filter = mp_xs_sv2_modperl_filter(*MARK); MARK++; + mode = (ap_input_mode_t)SvIV(*MARK); MARK++; + block = (apr_read_type_e)SvIV(*MARK); MARK++; + readbytes = (apr_off_t)SvIV(*MARK); MARK++; + buffer = *MARK++; + } + + if (items == 3 || items == 6) { wanted = SvIV(*MARK); } else { wanted = MP_IOBUFSIZE; } - if (modperl_filter->mode == MP_OUTPUT_FILTER_MODE) { - len = modperl_output_filter_read(aTHX_ modperl_filter, buffer, wanted); + if (modperl_filter->mode == MP_INPUT_FILTER_MODE) { + len = modperl_input_filter_read(aTHX_ modperl_filter, mode, + block, readbytes, buffer, wanted); } else { - Perl_croak(aTHX_ "input filters not yet supported"); + len = modperl_output_filter_read(aTHX_ modperl_filter, buffer, wanted); } return len;