mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
file-systems: Separate ENOENT catching from ext2 superblock reads.
* gnu/build/file-systems.scm (ENOENT-safe): New procedure. (read-ext2-superblock*): Rewrite in terms of it.
This commit is contained in:
parent
e9dffec126
commit
2447335625
1 changed files with 20 additions and 16 deletions
|
@ -167,22 +167,26 @@ (define (partition? major minor)
|
|||
(loop (cons name parts))
|
||||
(loop parts))))))))))
|
||||
|
||||
(define (read-ext2-superblock* device)
|
||||
"Like 'read-ext2-superblock', but return #f when DEVICE does not exist
|
||||
instead of throwing an exception."
|
||||
(catch 'system-error
|
||||
(lambda ()
|
||||
(read-ext2-superblock 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.
|
||||
(if (= ENOENT (system-error-errno args))
|
||||
(begin
|
||||
(format (current-error-port)
|
||||
"warning: device '~a' not found~%" device)
|
||||
#f)
|
||||
(apply throw args)))))
|
||||
(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."
|
||||
(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.
|
||||
(if (= ENOENT (system-error-errno args))
|
||||
(begin
|
||||
(format (current-error-port)
|
||||
"warning: device '~a' not found~%" device)
|
||||
#f)
|
||||
(apply throw args))))))
|
||||
|
||||
(define read-ext2-superblock*
|
||||
(ENOENT-safe read-ext2-superblock))
|
||||
|
||||
(define (partition-predicate field =)
|
||||
"Return a predicate that returns true if the FIELD of an ext2 superblock is
|
||||
|
|
Loading…
Reference in a new issue