Although discussion has moved on to better solutions...
At Sun, 22 Jan 2012 14:14:47 -0700, Michael W wrote:
> 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) c
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
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
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
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
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
6 matches
Mail list logo