dougm       01/04/28 16:03:08

  Modified:    lib/ModPerl WrapXS.pm
               src/modules/perl modperl_types.h
               xs       typemap
  Log:
  since input typemap for char* already calls SvPV(), make use of the length parameter 
for strings that are copied using the given pool
  
  Revision  Changes    Path
  1.10      +12 -4     modperl-2.0/lib/ModPerl/WrapXS.pm
  
  Index: WrapXS.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/ModPerl/WrapXS.pm,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- WrapXS.pm 2001/04/28 22:35:19     1.9
  +++ WrapXS.pm 2001/04/28 23:03:07     1.10
  @@ -152,9 +152,7 @@
           if (my $pool = $e->{pool}) {
               $pool .= '(obj)';
               $val = "((ST(1) == &PL_sv_undef) ? NULL :
  -                    (SvPOK(ST(1)) ?
  -                    apr_pstrndup($pool, SvPVX(ST(1)), SvCUR(ST(1))) :
  -                    apr_pstrdup($pool, val)))";
  +                    apr_pstrndup($pool, val, val_len))"
           }
       }
   
  @@ -179,11 +177,21 @@
               (my $cast = $type) =~ s/:/_/g;
               my $val = get_value($e);
   
  +            my $type_in = $type;
  +            my $preinit = "/*nada*/";
  +            if ($e->{class} eq 'PV' and $val ne 'val') {
  +                $type_in =~ s/char/char_len/;
  +                $preinit = "STRLEN val_len;";
  +            }
  +
               my $code = <<EOF;
   $type
   $name(obj, val=$default)
       $class obj
  -    $type val
  +    $type_in val
  +
  +    PREINIT:
  +    $preinit
   
       CODE:
       RETVAL = ($cast) obj->$name;
  
  
  
  1.38      +1 -0      modperl-2.0/src/modules/perl/modperl_types.h
  
  Index: modperl_types.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- modperl_types.h   2001/04/24 05:10:40     1.37
  +++ modperl_types.h   2001/04/28 23:03:08     1.38
  @@ -14,6 +14,7 @@
   typedef request_rec subrequest_rec;
   typedef apr_array_header_t MpAV;
   typedef apr_table_t        MpHV;
  +typedef char char_len; /* see xs/typemap */
   
   /* mod_perl structures */
   
  
  
  
  1.2       +8 -0      modperl-2.0/xs/typemap
  
  Index: typemap
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/xs/typemap,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- typemap   2001/03/05 04:01:13     1.1
  +++ typemap   2001/04/28 23:03:08     1.2
  @@ -1,5 +1,7 @@
   TYPEMAP
   void *                       T_VPTR
  +char_len *              T_CHAR_LEN
  +const char_len *        T_CONST_CHAR_LEN
   
   ######################################################################
   OUTPUT
  @@ -10,3 +12,9 @@
   INPUT
   T_VPTR
        $var = INT2PTR($type,SvIV(SvROK($arg) ? SvRV($arg) : $arg))
  +
  +T_CHAR_LEN
  +        $var = (char *)SvPV($arg, ${var}_len)
  +
  +T_CONST_CHAR_LEN
  +        $var = (const char *)SvPV($arg, ${var}_len)
  
  
  

Reply via email to