guix-commits
[Top][All Lists]
Advanced

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

03/04: file-systems: read-partition-{uuid, label} don't swallow ENOENT &


From: guix-commits
Subject: 03/04: file-systems: read-partition-{uuid, label} don't swallow ENOENT & co.
Date: Thu, 22 Apr 2021 18:39:02 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 09ce4568f2cc1f87c5a5e0aa1643780c39a73088
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Thu Apr 22 22:41:01 2021 +0200

    file-systems: read-partition-{uuid,label} don't swallow ENOENT & co.
    
    Previously, (read-partition-uuid "/does/not/exist") would return #f.
    With this change, a 'system-error exception is raised as expected.
    
    * gnu/build/file-systems.scm (ENOENT-safe): Clarify docstring.
    (partition-field-reader): Remove use of 'ENOENT-safe'.
    (partition-predicate): Wrap READER in 'ENOENT-safe'.
---
 gnu/build/file-systems.scm | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index 304805d..6111cd7 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -644,16 +644,13 @@ if DEVICE does not contain a NTFS file system."
                      (loop parts))))))))))
 
 (define (ENOENT-safe proc)
-  "Wrap the one-argument PROC such that ENOENT errors are caught and lead to a
-warning and #f as the result."
+  "Wrap the one-argument PROC such that ENOENT, EIO, and ENOMEDIUM errors are
+caught and lead to a warning and #f as the result."
   (lambda (device)
     (catch 'system-error
       (lambda ()
         (proc device))
       (lambda args
-        ;; When running on the hand-made /dev,
-        ;; 'disk-partitions' could return partitions for which
-        ;; we have no /dev node.  Handle that gracefully.
         (let ((errno (system-error-errno args)))
           (cond ((= ENOENT errno)
                  (format (current-error-port)
@@ -671,11 +668,10 @@ warning and #f as the result."
 (define (partition-field-reader read field)
   "Return a procedure that takes a device and returns the value of a FIELD in
 the partition superblock or #f."
-  (let ((read (ENOENT-safe read)))
-    (lambda (device)
-      (let ((sblock (read device)))
-        (and sblock
-             (field sblock))))))
+  (lambda (device)
+    (let ((sblock (read device)))
+      (and sblock
+           (field sblock)))))
 
 (define (read-partition-field device partition-field-readers)
   "Returns the value of a FIELD in the partition superblock of DEVICE or #f. It
@@ -742,11 +738,14 @@ partition field reader that returned a value."
 (define (partition-predicate reader =)
   "Return a predicate that returns true if the FIELD of partition header that
 was READ is = to the given value."
-  (lambda (expected)
-    (lambda (device)
-      (let ((actual (reader device)))
-        (and actual
-             (= actual expected))))))
+  ;; When running on the hand-made /dev, 'disk-partitions' could return
+  ;; partitions for which we have no /dev node.  Handle that gracefully.
+  (let ((reader (ENOENT-safe reader)))
+    (lambda (expected)
+      (lambda (device)
+        (let ((actual (reader device)))
+          (and actual
+               (= actual expected)))))))
 
 (define partition-label-predicate
   (partition-predicate read-partition-label string=?))



reply via email to

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