Felix Filozov <ffilozov@gmail.com> writes:The issue there is that foreign-funcall will be setting errno.
> 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.So, the pseudo-code for the implementation in foreign-funcall would be
> Could you elaborate where there's a consing issue, if errno is
> returned as the last, or first, value?
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
Felix Filozov <ffilozov@gmail.com> writes:The issue there is that foreign-funcall will be setting errno.
> 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.
So, the pseudo-code for the implementation in foreign-funcall would be
> Could you elaborate where there's a consing issue, if errno is
> returned as the last, or first, value?
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