[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#18592: FFI should have portable access to ‘errno’
From: |
Frank Terbeck |
Subject: |
bug#18592: FFI should have portable access to ‘errno’ |
Date: |
Tue, 11 Nov 2014 21:02:20 +0100 |
User-agent: |
Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.4.51 (gnu/linux) |
Mark H. Weaver wrote:
> Frank Terbeck <address@hidden> writes:
[...]
>> Mark Weaver on IRC thought it would be a good idea to add portable
>> access to the contents of ‘errno’ (however it's actually implemented) to
>> Guile's FFI. And now the idea has entered the bug tracker. :)
>
> Indeed, thanks for filing this ticket.
>
> I see a problem with this idea: something (e.g. a system async) might
> change 'errno' before the Scheme code fetches the 'errno' value.
Yes. Ludovic hinted at the use of ‘call-with-blocked-asyncs’ to avoid
this. To deal with that, I wrote a macro for guile-termios¹:
(define-syntax-rule (call-with-errno (errno exp) fail0 fail1 ...)
(let-values (((failed? errno) (call-with-blocked-asyncs
(lambda ()
(let* ((f? (termios-failure? exp))
(err (if f? (get-errno) 0)))
(values f? err))))))
(if failed?
(begin fail0 fail1 ...)
#t)))
That seems to work fine, unless I'm missing something.
Regards, Frank
¹ https://github.com/ft/guile-termios