[racket] FFI: Casting pointers

From: Jon Rafkind (rafkind at cs.utah.edu)
Date: Sun Jan 22 17:13:24 EST 2012

I'm pretty sure you can use cpointer-push-tag!


(let ([file (malloc)])
  (cpointer-push-tag! file _OggVorbis-file-pointer

On 01/22/2012 02:14 PM, Michael W wrote:
> Hello!
> In the FFI library, is there a way to cast one pointer type
> straight to another? I'm working with libvorbisfile (PLaneT
> package forthcoming) which expects me to allocate my own
> OggVorbis_File cstruct and pass that everywhere.
> I ask because (malloc _OggVorbis_File) returns a _pointer, not an
> _OggVorbis_File-pointer, and _fun and friends don't accept either
> type in place of the other.
> If I say:
>    (cast
>     (malloc _OggVorbis_File)
>     _pointer _OggVorbis_File-pointer)
> ...That's bad -- because I never keep the original pointer
> returned by the (malloc) call, the garbage collector reclaims
> that memory even though the _OggVorbis_File-pointer still points
> to it.
> My current workaround is to just use (malloc _OggVorbis_File)
> everywhere and have _pointer types in my (_fun ...) declarations.
> Is this the preferred way of doing it?
> Is there a way to ask (malloc) to return a different pointer type
> than _pointer?
> Thanks for your help.

Posted on the users mailing list.