Re: question on implementing C function with binary string as input and output
[email protected] Mon, 7 Apr 2014 10:24:53 +1000
| Newsgroups | perl.inline |
|---|---|
| Message-ID | <2553383D80B947BDAE18F49EFC276342@OwnerPC311012> |
From: Perf Tech
> In another word, the C function should have the similar syntax as the
> following perl function.
>
> sub myRepeat {
> my $str = shift;
> return $str . $str;
> }
I don't know (off the top of my head) how to concatenate binary strings in
C, but the following demonstrates one way of successfully passing binary
strings between perl and C:
##############################
use warnings;
use strict;
use Devel::Peek;
use Inline C => Config =>
BUILD_NOISY => 1,
;
use Inline C => <<'EOC';
SV * foo(SV * in) {
STRLEN len;
char *tmp = SvPV(in, len);
return newSVpv(tmp, len);
}
EOC
my $in = 'hello' . "\x00" . 'world';
my $ret = foo($in);
$ret eq $in ? print "\nok 1\n\n"
: print "\nnot ok 1\n\n";
Dump($in);
print "\n";
Dump ($ret);
##############################
Let us know if you need additional help with the concatenation aspect (or
anything else, for that matter ;-)
Cheers,
Rob