I was sad to see that Inline::C's documentation doesn't even really hint at what happens if your C function returns a value of type "char*".
If you find your ExtUtils/typemap file you'll find the following lines (not together):
char * T_PV INPUT T_PV $var = ($type)SvPV_nolen($arg) OUTPUT T_PV sv_setpv((SV*)$arg, $var);
so returning a "char*" calls sv_setpv(). If you read perlguts you'll see a disappointingly vague hint that sv_setpv() sets the length of the scalar's string value based on strlen(str), which isn't appropriate for your "binary" string.
So you instead want to return a SV* type of value and (again, it is sad here that Inline::C doesn't even show how to do this) use something more like return svNEWpvn( str, len );.
So now you also have several places that could use documentation patches. /:
- tye
In reply to Re: keeping binary data raw (char*)
by tye
in thread keeping binary data raw
by downer
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |