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'.
This commit is contained in:
		
							parent
							
								
									34db952a4b
								
							
						
					
					
						commit
						09ce4568f2
					
				
					 1 changed files with 14 additions and 15 deletions
				
			
		|  | @ -644,16 +644,13 @@ if DEVICE does not contain a NTFS file system." | ||||||
|                      (loop parts)))))))))) |                      (loop parts)))))))))) | ||||||
| 
 | 
 | ||||||
| (define (ENOENT-safe proc) | (define (ENOENT-safe proc) | ||||||
|   "Wrap the one-argument PROC such that ENOENT errors are caught and lead to a |   "Wrap the one-argument PROC such that ENOENT, EIO, and ENOMEDIUM errors are | ||||||
| warning and #f as the result." | caught and lead to a warning and #f as the result." | ||||||
|   (lambda (device) |   (lambda (device) | ||||||
|     (catch 'system-error |     (catch 'system-error | ||||||
|       (lambda () |       (lambda () | ||||||
|         (proc device)) |         (proc device)) | ||||||
|       (lambda args |       (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))) |         (let ((errno (system-error-errno args))) | ||||||
|           (cond ((= ENOENT errno) |           (cond ((= ENOENT errno) | ||||||
|                  (format (current-error-port) |                  (format (current-error-port) | ||||||
|  | @ -671,11 +668,10 @@ warning and #f as the result." | ||||||
| (define (partition-field-reader read field) | (define (partition-field-reader read field) | ||||||
|   "Return a procedure that takes a device and returns the value of a FIELD in |   "Return a procedure that takes a device and returns the value of a FIELD in | ||||||
| the partition superblock or #f." | the partition superblock or #f." | ||||||
|   (let ((read (ENOENT-safe read))) |  | ||||||
|   (lambda (device) |   (lambda (device) | ||||||
|     (let ((sblock (read device))) |     (let ((sblock (read device))) | ||||||
|       (and sblock |       (and sblock | ||||||
|              (field sblock)))))) |            (field sblock))))) | ||||||
| 
 | 
 | ||||||
| (define (read-partition-field device partition-field-readers) | (define (read-partition-field device partition-field-readers) | ||||||
|   "Returns the value of a FIELD in the partition superblock of DEVICE or #f. It |   "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 =) | (define (partition-predicate reader =) | ||||||
|   "Return a predicate that returns true if the FIELD of partition header that |   "Return a predicate that returns true if the FIELD of partition header that | ||||||
| was READ is = to the given value." | was READ is = to the given value." | ||||||
|  |   ;; 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 (expected) | ||||||
|       (lambda (device) |       (lambda (device) | ||||||
|         (let ((actual (reader device))) |         (let ((actual (reader device))) | ||||||
|           (and actual |           (and actual | ||||||
|              (= actual expected)))))) |                (= actual expected))))))) | ||||||
| 
 | 
 | ||||||
| (define partition-label-predicate | (define partition-label-predicate | ||||||
|   (partition-predicate read-partition-label string=?)) |   (partition-predicate read-partition-label string=?)) | ||||||
|  |  | ||||||
		Reference in a new issue