joes 2004/06/26 14:35:11
Modified: build xsbuilder.pl
glue/perl/t/response/TestApReq request.pm
glue/perl/xsbuilder/Apache/Upload Apache__Upload.h
glue/perl/xsbuilder/maps apreq_functions.map
Log:
Move f2g assignment to BOOT block for efficiency.
Revision Changes Path
1.24 +75 -0 httpd-apreq-2/build/xsbuilder.pl
Index: xsbuilder.pl
===================================================================
RCS file: /home/cvs/httpd-apreq-2/build/xsbuilder.pl,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- xsbuilder.pl 7 Apr 2004 02:55:42 -0000 1.23
+++ xsbuilder.pl 26 Jun 2004 21:35:10 -0000 1.24
@@ -354,6 +354,81 @@
close $fh;
}
+use constant GvSHARED => 0;
+
+sub write_xs {
+ my($self, $module, $functions) = @_;
+
+ my $fh = $self->open_class_file($module, '.xs');
+ print $fh "$self->{noedit_warning_c}\n";
+
+ my @includes = @{ $self->includes };
+
+ if (my $mod_h = $self->mod_h($module)) {
+ push @includes, $mod_h;
+ }
+
+ for (@includes) {
+ print $fh qq{\#include "$_"\n\n};
+ }
+
+ my $last_prefix = "";
+ my $fmap = $self -> typemap -> {function_map} ;
+ my $myprefix = $self -> my_xs_prefix ;
+
+ for my $func (@$functions) {
+ my $class = $func->{class};
+ if ($class)
+ {
+ my $prefix = $func->{prefix};
+ $last_prefix = $prefix if $prefix;
+
+ if ($func->{name} =~ /^$myprefix/o) {
+ #e.g. mpxs_Apache__RequestRec_
+ my $class_prefix = $fmap -> class_c_prefix($class);
+ if ($func->{name} =~ /$class_prefix/) {
+ $prefix = $fmap -> class_xs_prefix($class);
+ }
+ }
+
+ $prefix = $prefix ? " PREFIX = $prefix" : "";
+ print $fh "MODULE = $module PACKAGE = $class $prefix\n\n";
+ }
+
+ print $fh $func->{code};
+ }
+
+ if (my $destructor = $self->typemap->destructor($last_prefix)) {
+ my $arg = $destructor->{argspec}[0];
+
+ print $fh <<EOF;
+void
+$destructor->{name}($arg)
+ $destructor->{class} $arg
+
+EOF
+ }
+
+ print $fh "PROTOTYPES: disabled\n\n";
+ print $fh "BOOT:\n";
+ print $fh $self->boot($module);
+ print $fh " items = items; /* -Wall */\n";
+ print $fh <<'EOT' if $module eq "Apache::Upload";
+ f2g = APR_RETRIEVE_OPTIONAL_FN(apr_perlio_apr_file_to_glob);
+ if (f2g == NULL)
+ Perl_croak(aTHX_ "Failed to locate apr_perlio_apr_file_to_glob
during BOOT");
+EOT
+ print $fh "\n";
+ if (my $newxs = $self->{newXS}->{$module}) {
+ for my $xs (@$newxs) {
+ print $fh qq{ cv = newXS("$xs->[0]", $xs->[1], __FILE__);\n};
+ print $fh qq{ GvSHARED_on(CvGV(cv));\n} if GvSHARED;
+ }
+ }
+
+ close $fh;
+}
+
package My::TypeMap;
use base 'ExtUtils::XSBuilder::TypeMap';
1.11 +5 -1 httpd-apreq-2/glue/perl/t/response/TestApReq/request.pm
Index: request.pm
===================================================================
RCS file: /home/cvs/httpd-apreq-2/glue/perl/t/response/TestApReq/request.pm,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- request.pm 26 Jun 2004 20:30:40 -0000 1.10
+++ request.pm 26 Jun 2004 21:35:10 -0000 1.11
@@ -25,6 +25,10 @@
elsif ($test eq 'slurp') {
my ($upload) = values %{$req->upload};
$upload->slurp(my $data);
+ if ($upload->size != length $data) {
+ $req->print("Size mismatch: size() reports ", $upload->size,
+ " but slurp() length is ", length $data, "\n");
+ }
$req->print($data);
}
elsif ($test eq 'bb_read') {
@@ -38,7 +42,7 @@
}
}
elsif ($test eq 'fh_read') {
- my (undef, $upload) = each %{$req->upload};
+ my $upload = $req->upload(($req->upload)[0]);
my $fh = $upload->fh;
$r->print(<$fh>);
}
1.4 +1 -9
httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h
Index: Apache__Upload.h
===================================================================
RCS file:
/home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Apache__Upload.h 26 Jun 2004 20:30:40 -0000 1.3
+++ Apache__Upload.h 26 Jun 2004 21:35:11 -0000 1.4
@@ -267,7 +267,6 @@
apr_status_t s;
apr_off_t len;
apr_file_t *file;
- SV *sv;
if (items != 1 || !SvROK(ST(0)))
Perl_croak(aTHX_ "Usage: $upload->fh()");
@@ -279,11 +278,6 @@
bb = apreq_xs_sv2param(ST(0))->bb;
file = apreq_brigade_spoolfile(bb);
- if (f2g == NULL)
- f2g = APR_RETRIEVE_OPTIONAL_FN(apr_perlio_apr_file_to_glob);
- if (f2g == NULL)
- Perl_croak(aTHX_ "can't locate apr_perlio_apr_file_to_glob");
-
if (file == NULL) {
apr_bucket *last;
const char *tmpdir = apreq_env_temp_dir(env, NULL);
@@ -313,8 +307,6 @@
apr_file_seek(file, 0, &len);
/* Should we pass a dup(2) of the file instead? */
- sv = f2g(aTHX_ file, bb->p, APR_PERLIO_HOOK_READ);
-// ST(0) = sv_2mortal(sv);
- ST(0) = sv;
+ ST(0) = f2g(aTHX_ file, bb->p, APR_PERLIO_HOOK_READ);
XSRETURN(1);
}
1.20 +0 -2
httpd-apreq-2/glue/perl/xsbuilder/maps/apreq_functions.map
Index: apreq_functions.map
===================================================================
RCS file:
/home/cvs/httpd-apreq-2/glue/perl/xsbuilder/maps/apreq_functions.map,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- apreq_functions.map 26 Jun 2004 20:30:40 -0000 1.19
+++ apreq_functions.map 26 Jun 2004 21:35:11 -0000 1.20
@@ -39,8 +39,6 @@
MODULE=Apache::Upload PACKAGE=Apache::Request PREFIX=Apache__Request_
DEFINE_upload | apreq_xs_upload_get |
-
-
########## Apache::Cookie:: Functions ##########
MODULE=Apache::Cookie PACKAGE=Apache::Cookie