guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/02: ui: Do not call 'port-filename' on closed file ports.


From: Ludovic Courtès
Subject: 01/02: ui: Do not call 'port-filename' on closed file ports.
Date: Wed, 09 Mar 2016 22:50:43 +0000

civodul pushed a commit to branch master
in repository guix.

commit bec7f352145699c929425397957c52a3829623cf
Author: Ludovic Courtès <address@hidden>
Date:   Wed Mar 9 23:37:12 2016 +0100

    ui: Do not call 'port-filename' on closed file ports.
    
    * guix/ui.scm (call-with-error-handling)[port-filename*]: New
    procedure.
    Use it in the 'nar-error?' case.
---
 guix/ui.scm |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/guix/ui.scm b/guix/ui.scm
index a3ec683..7b7bee0 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -410,6 +410,12 @@ interpreted."
 
 (define (call-with-error-handling thunk)
   "Call THUNK within a user-friendly error handler."
+  (define (port-filename* port)
+    ;; 'port-filename' returns #f for non-file ports, but it raises an
+    ;; exception for file ports that are closed.  Work around that.
+    (and (not (port-closed? port))
+         (port-filename port)))
+
   (guard (c ((package-input-error? c)
              (let* ((package  (package-error-package c))
                     (input    (package-error-invalid-input c))
@@ -440,9 +446,9 @@ interpreted."
                    (port (nar-error-port c)))
                (if file
                    (leave (_ "corrupt input while restoring '~a' from ~s~%")
-                          file (or (port-filename port) port))
+                          file (or (port-filename* port) port))
                    (leave (_ "corrupt input while restoring archive from ~s~%")
-                          (or (port-filename port) port)))))
+                          (or (port-filename* port) port)))))
             ((nix-connection-error? c)
              (leave (_ "failed to connect to `~a': ~a~%")
                     (nix-connection-error-file c)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]