When you use 0 as the second arg to newSVpv(), the variable is deemed to finish at the first NULL character (\0). Therefore if htmlFileBuffer contains one or more embedded NULLs (which I would think is unlikely) you won't get what you want. In that case you would need to specify the actual size as the second arg to newSVpv().
Here's a little demo Inline::C script:
use warnings;
use Inline C => Config =>
BUILD_NOISY => 1;
use Inline C => <<'EOC';
SV * foo(char * sv) {
return newSVpv(sv, 0);
}
SV * foo2(char * sv, int len) {
return newSVpv(sv, len);
}
EOC
$x = 'hello' . "\0" . 'world';
print $x, " ", length($x), "\n";
$y = foo($x);
print $y, " ", length($y), "\n";
$z = foo2($x, length($x));
print $z, " ", length($z), "\n";
It prints: hello world 11
hello 5 hello world 11
Cheers, Rob |