Mark H. Weaver wrote: > Frank Terbeck <f...@bewatermyfriend.org> 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