in reply to keeping binary data raw
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: keeping binary data raw (char*)
by syphilis (Archbishop) on Oct 26, 2007 at 16:32 UTC | |
by tye (Sage) on Oct 26, 2007 at 18:25 UTC | |
by downer (Monk) on Oct 29, 2007 at 18:59 UTC |