Mark H Weaver <m...@netris.org> skribis: > l...@gnu.org (Ludovic Courtès) writes: > >> Chaos Eternal <chaoseter...@shlug.org> skribis: >> >>> Proposals to solve this bug: >>> >>> Proposal 1. >>> >>> Adding a keyword argument to pointer->procedure, if set to true, the >>> generated wrapper will check 'errno' immediately after ffi_call and >>> return the errno as second value. >>> >>> the proposed pointer->procedure maybe like this: >>> pointer->procedure return_type func_ptr arg_types #:return-errno >>> >>> Proposal 2. >>> >>> let pointer->procedure check return_type, if it is a list: >>> (func_return_type, 'errno) >>> then return multiple values, as errno be second value. >> >> That’s my favorite because it’s both pragmatic and extensible (we can >> also add support for h_errno, etc.) > > We can't do this, because although it's not documented in our manual, a > list passed as a foreign type already has a meaning: it means a struct. > See 'parse_ffi_type' in foreign.c. I mentioned this fact on guile-user: > > https://lists.gnu.org/archive/html/guile-user/2012-05/msg00037.html
Indeed, I had forgotten that. > Of the proposals given here, I would support #1, but maybe there's a > better option. I agree #1 is now the best option so far. Ludo’.