joes        2004/07/24 08:10:13

  Modified:    glue/perl/t/response/TestApReq request.pm
               glue/perl/xsbuilder/Apache/Upload Apache__Upload.h Upload_pm
               glue/perl/xsbuilder/maps apreq_functions.map
  Log:
  Drop bogus ::Request package from Apache::Upload::Brigade error messages, and 
do Apache::Upload::AUTOLOAD's tied dispatch directly in C (instead of perl ops) 
for better efficiency.
  
  Revision  Changes    Path
  1.37      +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.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- request.pm        23 Jul 2004 23:52:14 -0000      1.36
  +++ request.pm        24 Jul 2004 15:10:12 -0000      1.37
  @@ -103,6 +103,10 @@
           read $upload->io, my $io_contents, $upload->size;
           $upload->slurp(my $slurp_data);
           die "io contents != slurp data" unless $io_contents eq $slurp_data;
  +        undef $io_contents;
  +        $upload->io->read($io_contents, $upload->size);
  +        die "io contents != slurp data" unless $io_contents eq $slurp_data;
  +
           my $bb = $upload->bb;
           my $e = $bb->first;
           my $bb_contents = "";
  @@ -111,7 +115,7 @@
               $bb_contents .= $buf;
               $e = $bb->next($e);
           }
  -        die "io contents != brigade contents" 
  +        die "io contents != brigade contents"
               unless $io_contents eq $bb_contents;
           $r->print(<$io>);
       }
  
  
  
  1.29      +34 -8     
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.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- Apache__Upload.h  23 Jul 2004 07:21:15 -0000      1.28
  +++ Apache__Upload.h  24 Jul 2004 15:10:12 -0000      1.29
  @@ -287,17 +287,43 @@
       XSRETURN(1);
   }
   
  +APR_INLINE
  +static SV *apreq_xs_find_bb_obj(pTHX_ SV *in)
  +{
  +    while (in && SvROK(in)) {
  +        SV *sv = SvRV(in);
  +        switch (SvTYPE(sv)) {            
  +            MAGIC *mg;
  +        case SVt_PVIO:
  +            if (SvMAGICAL(sv) && (mg = mg_find(sv,PERL_MAGIC_tiedscalar))) {
  +               in = mg->mg_obj;
  +               break;
  +            }
  +            Perl_croak(aTHX_ "panic: cannot find tied scalar in pvio magic");
  +        case SVt_PVMG:
  +            if (SvOBJECT(sv) && SvIOK(sv))
  +                return sv;
  +        default:
  +             Perl_croak(aTHX_ "panic: unsupported SV type: %d", SvTYPE(sv));
  +       }
  +    }
  +    return NULL;
  +}
  +
  +
   static XS(apreq_xs_upload_brigade_copy)
   {
       dXSARGS;
       apr_bucket_brigade *bb, *bb_copy;
       char *class;
  +    SV *obj;
   
       if (items != 2 || !SvPOK(ST(0)) || !SvROK(ST(1)))
           Perl_croak(aTHX_ "Usage: Apache::Upload::Brigade->new($bb)");
   
       class = SvPV_nolen(ST(0));
  -    bb = (apr_bucket_brigade *)SvIVX(SvRV(ST(1)));
  +    obj = apreq_xs_find_bb_obj(aTHX_ ST(1));
  +    bb = (apr_bucket_brigade *)SvIVX(obj);
       bb_copy = apr_brigade_create(bb->p,bb->bucket_alloc);
       APREQ_BRIGADE_COPY(bb_copy, bb);
   
  @@ -323,7 +349,7 @@
       case 2:
           sv = ST(1);
           if (SvROK(ST(0))) {
  -            obj = SvRV(ST(0));
  +            obj = apreq_xs_find_bb_obj(aTHX_ ST(0));
               bb = (apr_bucket_brigade *)SvIVX(obj);
               break;
           }
  @@ -345,7 +371,7 @@
           s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ);
           if (s != APR_SUCCESS)
               apreq_xs_croak(aTHX_ newHV(), s, 
  -                           "Apache::Request::Upload::Brigade::READ", 
  +                           "Apache::Upload::Brigade::READ", 
                              "APR::Error");
           want = dlen;
           end = APR_BUCKET_NEXT(e);
  @@ -358,7 +384,7 @@
               s = apr_brigade_length(bb, 1, &len);
               if (s != APR_SUCCESS)
                   apreq_xs_croak(aTHX_ newHV(), s, 
  -                               "Apache::Request::Upload::Brigade::READ", 
  +                               "Apache::Upload::Brigade::READ", 
                                  "APR::Error");
               want = len;
   
  @@ -367,7 +393,7 @@
   
           default:
               apreq_xs_croak(aTHX_ newHV(), s, 
  -                           "Apache::Request::Upload::Brigade::READ",
  +                           "Apache::Upload::Brigade::READ",
                              "APR::Error");
           }
       }
  @@ -383,7 +409,7 @@
           s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ);
           if (s != APR_SUCCESS)
               apreq_xs_croak(aTHX_ newHV(), s, 
  -                           "Apache::Request::Upload::Brigade::READ", 
"APR::Error");
  +                           "Apache::Upload::Brigade::READ", "APR::Error");
           memcpy(buf, data, dlen);
           buf += dlen;
           apr_bucket_delete(e);
  @@ -405,7 +431,7 @@
       if (items != 1 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "Usage: $bb->READLINE");
   
  -    obj = SvRV(ST(0));
  +    obj = apreq_xs_find_bb_obj(aTHX_ ST(0));
       bb = (apr_bucket_brigade *)SvIVX(obj);
   
       if (APR_BRIGADE_EMPTY(bb))
  @@ -425,7 +451,7 @@
           s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ);
           if (s != APR_SUCCESS)
               apreq_xs_croak(aTHX_ newHV(), s, 
  -                           "Apache::Request::Upload::Brigade::READLINE",
  +                           "Apache::Upload::Brigade::READLINE",
                              "APR::Error");
   
           eol = memchr(data, '\012', dlen); /* look for LF (linefeed) */
  
  
  
  1.14      +1 -4      httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Upload_pm
  
  Index: Upload_pm
  ===================================================================
  RCS file: 
/home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Upload_pm,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Upload_pm 23 Jul 2004 23:52:14 -0000      1.13
  +++ Upload_pm 24 Jul 2004 15:10:12 -0000      1.14
  @@ -39,7 +39,4 @@
   push our(@ISA), "APR::Brigade";
   
   package Apache::Upload::IO;
  -sub AUTOLOAD {
  -    s/.*:://, tr/a-z/A-Z/ for our $AUTOLOAD;
  -    tied(*{shift()})->$AUTOLOAD(@_);
  -}
  +push our(@ISA), ();
  
  
  
  1.35      +4 -0      
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.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- apreq_functions.map       22 Jul 2004 03:29:09 -0000      1.34
  +++ apreq_functions.map       24 Jul 2004 15:10:13 -0000      1.35
  @@ -59,6 +59,10 @@
    DEFINE_READ | apreq_xs_upload_brigade_read |
    DEFINE_READLINE | apreq_xs_upload_brigade_readline |
   
  +MODULE=Apache::Upload PACKAGE=Apache::Upload::IO  PREFIX=Apache__Upload__IO_
  + DEFINE_read | apreq_xs_upload_brigade_read |
  + DEFINE_readline | apreq_xs_upload_brigade_readline |
  +
   ##########  Apache::Cookie:: Functions  ##########
   
   MODULE=Apache::Cookie PACKAGE=Apache::Cookie
  
  
  

Reply via email to