[racket-dev] foreign struct access different in 5.1.3?

From: John Clements (clements at brinckerhoff.org)
Date: Fri Sep 16 23:04:24 EDT 2011

On Sep 16, 2011, at 3:06 PM, John Clements wrote:

> I'm trying to backport working FFI code to 5.1.3, and I'm having trouble referring to elements of a C struct. Specifically, in the presence of this definition
> 
> (define-cstruct _rack-audio-closure
>  ([sound         _pointer]
>   [cur-sample    _ulong]
>   [num-samples   _ulong]
>   [stop-now      _bool]
>   [stop-sema-ptr _pointer]))
> 
> using the function (rack-audio-closure-cur-sample) on the result of an FFI call with signature
> 
> (_fun _pointer _ulong _pointer -> _rack-audio-closure-pointer)
> 
> produces this error:
> 
> rack-audio-closure-cur-sample: expected argument of type <struct:rack-audio-closure>; given #<cpointer:rack-audio-closure>
> 
> in 5.1.3, but it works just fine in the git head.

More research suggests that the problem is more limited; it looks like a problem of generativity. That is, if I have two modules that declare the "same" cstruct (same name, same fields, same types) then cpointers to these structures returned by functions from the first module cannot be accessed in the other module.

AFAICT, This is not the case in more recent versions; that is, these cstructs are not generative.  Assuming this is deliberate, I could document it.

John

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4624 bytes
Desc: not available
URL: <http://lists.racket-lang.org/dev/archive/attachments/20110916/10af614f/attachment.p7s>

Posted on the dev mailing list.