Felix Filozov <ffilo...@gmail.com> writes: > Maybe we can even do this using lexical binding, since GET-ERRNO could > be a macro that expands to a lexical variable introduced by > WITH-ERRNO.
The issue there is that foreign-funcall will be setting errno. > Could you elaborate where there's a consing issue, if errno is > returned as the last, or first, value? So, the pseudo-code for the implementation in foreign-funcall would be something like: (multiple-value-bind (return-value errno) (%foreign-funcal ...) (let ((translated-return-values (multiple-value-list (translate-from-foreign ...)))) (values-list (cons errno translated-return-values)) ;; or (values-list (nconc translated-return-values (list errno))) )) Right now I'm inclined to discard all but the first translated return value. (This is your initial solution, isn't it?) Luís