Re: question on implementing C function with binary string as input and output

[email protected] Mon, 7 Apr 2014 10:53:01 +1000
Newsgroups perl.inline
Message-ID <26464BF8C8FE42ECB9F3A8DCC97DA668@OwnerPC311012>

-----Original Message----- 
From: [email protected]

> I don't know (off the top of my head) how to concatenate binary strings in 
> C ...

Thankfully, perl's API provides a simple solution:

##############################

use warnings;
use strict;
use Devel::Peek;

use Inline C => Config =>
BUILD_NOISY => 1,
;

use Inline C => <<'EOC';

SV * foo(SV * in) {
  SV * ret;
  STRLEN len;
  char *tmp = SvPV(in, len);
  ret = newSVpv(tmp, len);
  sv_catpvn(ret, tmp, len);
  return ret;
}

EOC

my $in = 'hello' . "\x00" . 'world';
my $ret = foo($in);

$ret eq $in . $in ? print "\nok 1\n\n"
                  : print "\nnot ok 1\n\n";

Dump($in);
print "\n";
Dump ($ret);
##############################

Cheers,
Rob