Re: [racket] FFI: Casting pointers

2012-01-22 Thread Michael W
HMM! Interesting. This function is ov_fopen, which expects a fresh blank OggVorbis_File struct, and it populates that struct's fields. This signature comes close to working but eventually segfaults, likely because the result struct isn't allocated with 'interior. Perhaps something in libvorbisfil

Re: [racket] FFI: Casting pointers

2012-01-22 Thread Jon Rafkind
Actually can't you just use an input specification for the pointer? (_ fun [vf : (_ptr i _OggVorbis_File)]) As long as you can define the OggVorbis_File struct with the ffi. If not your solution is probably fine. On 01/22/2012 03:59 PM, Michael W wrote: > Wow, thanks! > > After a bit of reading

Re: [racket] FFI: Casting pointers

2012-01-22 Thread Michael W
Wow, thanks! After a bit of reading, I arrived at this, which seems to work: (_fun ... [vf : _OggVorbis_File-pointer = (let ([file (malloc _OggVorbis_File 'interior)]) (set-cpointer-tag! file OggVorbis_File-tag) file)] ...) 42 minutes ago, Jon

Re: [racket] FFI: Casting pointers

2012-01-22 Thread Jon Rafkind
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-pointe

[racket] FFI: Casting pointers

2012-01-22 Thread Michael W
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 a