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 ChangesPath
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_tMpHV;
+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)