[cffi-devel] Re: varargs (again)

Hoehle, Joerg-Cyril Joerg-Cyril.Hoehle at t-systems.com
Fri Jan 13 13:21:34 UTC 2006


Luís Oliveira wrote:
>  * (defcfun-varargs "printf" :int (control :string))
>  (defcfun-varargs "printf" :int (constrol :string) (&rest args))

>  (defmacro defcfun-varargs (name return-type &body args)
>           `(foreign-funcall ,',foreign-name
>                             ,@,varargs

Actually, I believe it's not enough to let defcfun know about varargs.  FOREIGN-FUNCALL needs it as well, so it can tell the underlying Lisp where varargs happen.

Regarding TIFFGetValue(), I went to
http://www.remotesensing.org/libtiff/man/TIFFGetField.3tiff.html
and saw that it's all pointers.  Therefore, I don't expect a problem with varargs when interfacing to this particular function on typical platforms (read Intel32).  (But what do I know? some platforms could pass the first 4 pointers in registers, and the rest on the stack, and that would already break with varargs which would all be on the stack).

The TIFFGetValue specification is hairy, though. Pile up WITH-POINTER and submit a working example to the cffi team for inclusion in the manual :-)

An alternative implementation strategy for cffi might be to build up a va_list structure and call the *V() functions (e.g. TIFFVGetField)?? Uhoh...

Regards,
	Jörg Höhle.



More information about the cffi-devel mailing list