From romain at r-enthusiasts.com  Fri Feb  1 13:54:13 2013
From: romain at r-enthusiasts.com (Romain Francois)
Date: Fri, 01 Feb 2013 13:54:13 +0100
Subject: [Rd] Problem using raw vectors with inline cfunction
In-Reply-To: <CAMd4_AeG-shk9q6vsf3C9KP=VnfAdu77D4j=W-qE9vmjJJLcYA@mail.gmail.com>
References: <CAMd4_AeG-shk9q6vsf3C9KP=VnfAdu77D4j=W-qE9vmjJJLcYA@mail.gmail.com>
Message-ID: <510BBAF5.9030207@r-enthusiasts.com>

Hello,

That is a bug in inline indeed. I just commited a fix in r-forge.

The fix is to obviously replace this as.character by an as.raw.

Thanks for teh report.

Romain

Le 01/02/13 10:25, Karl Forner a ?crit :
> Hello,
>
>>From what I understood from the documentation I found, when using the
> inline cfunction with convention=".C",
> R raw vectors should be given as unsigned char* to the C function.
>
> But consider the following script:
>
> library(inline)
>
> testRaw <- cfunction(signature(raw='raw', len='integer')
>      , body='
>          int l = *len;
>          int i = 0;
>          Rprintf("sizeof(raw[0])=%i\\n", sizeof(raw[0]));
>          for (i = 0; i < l; ++i) Rprintf("%i, ", (int)raw[i]);
>          for (i = 0; i < l; ++i) raw[i] = i*10;
>          '
>      , convention=".C", language='C', verbose=TRUE
> )
>
> tt <- as.raw(1:10)
> testRaw(tt, length(tt))
>
>
> When I execute it:
>
> $ R --vanilla --quiet < work/inline_cfunction_raw_bug.R
>
> sizeof(raw[0])=1
> 192, 216, 223, 0, 0, 0, 0, 0, 224, 214,
>   *** caught segfault ***
> address (nil), cause 'unknown'
>
> Traceback:
>   1: .Primitive(".C")(<pointer: 0x7eff8bd605c0>, raw =
> as.character(raw),     len = as.integer(len))
>   2: testRaw(tt, length(tt))
> aborting ...
> Segmentation fault (core dumped)
>
>
> I was expecting to get in the C function a pointer on a byte array of
> values (1,2,3,4,5,6,7,8,9,10).
> Apparently that is not the case. I guess that the "raw =
> as.character(raw)," printed in the traceback is responsible for the
> observed behavior.
>
> If it is expected behavior, how can I get a pointer on my array of bytes ?
>
>
> Thanks.
>
> Karl


-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30

R Graph Gallery: http://gallery.r-enthusiasts.com

blog:            http://romainfrancois.blog.free.fr
|- http://bit.ly/RE6sYH : OOP with Rcpp modules
`- http://bit.ly/Thw7IK : Rcpp modules more flexible



[Rd] Problem using raw vectors with inline cfunction
Romain Francois