From 3b5cd17a975d18ec200fa8cb835bcb58d3a61af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludovic.courtes@inria.fr> Date: Fri, 21 Apr 2017 11:48:57 +0200 Subject: [PATCH] store: Add 'system-error-to-connection-error' macro. * guix/store.scm (system-error-to-connection-error): New macro. (open-unix-domain-socket): Use it instead of 'catch'. --- guix/store.scm | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/guix/store.scm b/guix/store.scm index bd07976c372..9eac22052e4 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -351,6 +351,18 @@ (define-condition-type &nix-protocol-error &nix-error (message nix-protocol-error-message) (status nix-protocol-error-status)) +(define-syntax-rule (system-error-to-connection-error file exp ...) + "Catch 'system-error' exceptions and translate them to +'&nix-connection-error'." + (catch 'system-error + (lambda () + exp ...) + (lambda args + (let ((errno (system-error-errno args))) + (raise (condition (&nix-connection-error + (file file) + (errno errno)))))))) + (define (open-unix-domain-socket file) "Connect to the Unix-domain socket at FILE and return it. Raise a '&nix-connection-error' upon error." @@ -359,16 +371,9 @@ (define (open-unix-domain-socket file) (socket PF_UNIX SOCK_STREAM 0))) (a (make-socket-address PF_UNIX file))) - (catch 'system-error - (lambda () - (connect s a) - s) - (lambda args - ;; Translate the error to something user-friendly. - (let ((errno (system-error-errno args))) - (raise (condition (&nix-connection-error - (file file) - (errno errno))))))))) + (system-error-to-connection-error file + (connect s a) + s))) (define (connect-to-daemon uri) "Connect to the daemon at URI, a string that may be an actual URI or a file @@ -1350,3 +1355,7 @@ (define (log-file store file) ;; Return the first that works. (any (cut log-file store <>) derivers)) (_ #f))))) + +;;; Local Variables: +;;; eval: (put 'system-error-to-connection-error 'scheme-indent-function 1) +;;; End: -- GitLab