I think there is a small contradiction in the documentation for c-lambda in the manual at
http://www.iro.umontreal.ca/~gambit/doc/gambit-c.html#SEC132
[...] the result to be returned from the call should be assigned to the variable `___result' except when the result is of type struct, union, type, pointer, nonnull-pointer, function or nonnull-function in which case a pointer must be assigned to the variable `___result_voidstar' which is of type `void*'. [...]
But then in one of the examples:
(define stdin ((c-lambda () (pointer "FILE") "___result = stdin;")))
Shouldn't that be "___result_voidstar = (void*)stdin;", then?