dougm 01/03/12 23:29:03
Modified: xs/Apache/Filter Apache__Filter.h
xs/maps apache_functions.map
Log:
add output filter "stream" interface read/print methods
Revision Changes Path
1.2 +53 -0 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Apache__Filter.h 2001/03/05 03:54:18 1.1
+++ Apache__Filter.h 2001/03/13 07:28:54 1.2
@@ -1,2 +1,55 @@
#define mpxs_Apache__RequestRec_add_output_filter(r, name, ctx) \
ap_add_output_filter(name, ctx, r, NULL)
+
+/* XXX: this should be generated like the others in modperl_xs_sv_convert.h */
+#define mp_xs_sv2_modperl_filter(sv) \
+((SvROK(sv) && (SvTYPE(SvRV(sv)) == SVt_PVMG)) \
+|| (Perl_croak(aTHX_ "argument is not a blessed reference"),0) ? \
+(modperl_filter_t *)SvIV((SV*)SvRV(sv)) : (modperl_filter_t *)NULL)
+
+static MP_INLINE apr_size_t mpxs_Apache__OutputFilter_print(pTHX_ I32 items,
+ SV **MARK, SV **SP)
+{
+ modperl_filter_t *modperl_filter;
+ apr_size_t bytes = 0;
+
+ mpxs_usage_va_1(modperl_filter, "$filter->print(...)");
+
+ if (modperl_filter->mode == MP_OUTPUT_FILTER_MODE) {
+ mpxs_write_loop(modperl_output_filter_write, modperl_filter);
+ modperl_output_filter_flush(modperl_filter);
+ }
+ else {
+ croak("input filters not yet supported");
+ }
+
+ /* XXX: ap_rflush if $| */
+
+ return bytes;
+}
+
+static MP_INLINE apr_size_t mpxs_Apache__OutputFilter_read(pTHX_ I32 items,
+ SV **MARK, SV **SP)
+{
+ modperl_filter_t *modperl_filter;
+ apr_size_t wanted, len=0;
+ SV *buffer;
+
+ mpxs_usage_va_2(modperl_filter, buffer, "$filter->read(buf, [len])");
+
+ if (items > 2) {
+ 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);
+ }
+ else {
+ croak("input filters not yet supported");
+ }
+
+ return len;
+}
1.3 +5 -1 modperl-2.0/xs/maps/apache_functions.map
Index: apache_functions.map
===================================================================
RCS file: /home/cvs/modperl-2.0/xs/maps/apache_functions.map,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- apache_functions.map 2001/03/13 06:32:28 1.2
+++ apache_functions.map 2001/03/13 07:29:00 1.3
@@ -183,7 +183,11 @@
ap_filter_t *:DEFINE_add_output_filter | | \
request_rec *:r, const char *:name, void *:ctx
-MODULE=Apache::Filter PACKAGE=guess
+PACKAGE=Apache::OutputFilter
+ mpxs_Apache__OutputFilter_print | | ...
+ mpxs_Apache__OutputFilter_read | | ...
+
+PACKAGE=guess
~ap_add_output_filter
ap_add_input_filter
ap_get_brigade