I'm pretty sure you can use cpointer-push-tag! http://docs.racket-lang.org/foreign/foreign_tagged-pointers.html?q=cpointer-push&q=in-lines&q=read-bytes&q=command&q=for/fold#(def._((lib._ffi/unsafe..rkt)._cpointer-push-tag!))
(let ([file (malloc)]) (cpointer-push-tag! file _OggVorbis-file-pointer file) 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. > ____________________ Racket Users list: http://lists.racket-lang.org/users