[R-pkg-devel] How to pass a connection into a C function (R 3.2)

Duncan Murdoch murdoch.duncan at gmail.com
Thu Jan 21 19:03:14 CET 2016


On 21/01/2016 12:50 PM, Tom Quarendon wrote:
> But that's what I want to do, create the connection in R code and pass it on to the C function.
> My question is, how do I do that?
> You appear to need the C getConnection entry point, but it's not part of the API.
> So I'm wondering how I'm supposed to do what you describe.

Sorry, my advice was wrong.  I remembered that we exposed code to create 
new connections, and assumed it had some code to work with them, but it 
doesn't.

Duncan Murdoch
>
> Sorry if I was unclear.
>
> Sent from my iPhone
>
> >> On 21 Jan 2016, at 5:44 pm, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
> >>
> >> On 21/01/2016 11:39 AM, Tom Quarendon wrote:
> >> I would like to implement a package that contains a C function that writes to a connection.
> >> So the R_ext/Connections.h defines what a connection IS, but not how to get one.
> >>
> >> What seems to work is to manually declare
> >> Rconnection getConnection(int n);
> >> In my C file, and while this works, and I can then use the connection object, it fails package validation with:
> >>
> >> �Found non-API call to R: �getConnection�
> >> Compiled code should not call non-API entry points in R.�
> >>
> >> So how am I supposed to do this? Is there a way? Or do I just live with the check warning (ideally not)?
> >
> > The usual way to do that would be to create the connection in R code, and pass it in with your call.
> >
> > If you don't know what connection you need at the time you call your C code, you can evaluate an R expression from C to do the same, but this is relatively tricky, so I'd advise the other method.
> >
> > Duncan Murdoch



More information about the R-package-devel mailing list