> Ah, TOCTTOU, right. > You could do:
> (let ((hash (catch 'system-error
> (lambda ()
> (call-with-input-file ...))
> (lambda args
> (leave (_ "error ..." (strerror (system-error-errno
> args))))))))
> ...)
Here is what I did (I'll remove "guix hash" when we have "warning"):
(match args
((file)
(catch 'system-error
(lambda ()
(format #t "~a~%"
(call-with-input-file file
(compose fmt sha256 get-bytevector-all))))
(lambda args
(leave (_ "~a: ~a~%")
"guix hash" (strerror (system-error-errno args))))))
(_
(leave (_ "~a: wrong number of arguments~%")
"guix hash")))))
I guess that "wrong number of arguments" can be handled by
(lambda args ...). Still, the above feels much safer.
What do you think?
pgpwiY1r59k9o.pgp
Description: PGP signature
