summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-10-04 21:34:09 +0200
committerLudovic Courtès <ludo@gnu.org>2017-10-05 12:09:17 +0200
commitaed1f1b049f6e7ef9f2f2db58bdca6cd3effe94b (patch)
treeee6ee785d2113ef13e593459fdbe1efd925181c7
parent67a08f1809c5a67dfb862ccdc3dc4e13ae35dcbf (diff)
downloadpatches-aed1f1b049f6e7ef9f2f2db58bdca6cd3effe94b.tar
patches-aed1f1b049f6e7ef9f2f2db58bdca6cd3effe94b.tar.gz
uuid: Add 'uuid=?' and use it.
* gnu/system/uuid.scm (uuid=?): New procedure. * tests/uuid.scm ("uuid=?"): New test. * gnu/build/file-systems.scm (partition-uuid-predicate) (luks-partition-uuid-predicate): Use it instead of 'bytevector=?'.
-rw-r--r--gnu/build/file-systems.scm4
-rw-r--r--gnu/system/uuid.scm13
-rw-r--r--tests/uuid.scm6
3 files changed, 21 insertions, 2 deletions
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index 32885f1d2e..140bcb414b 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -415,12 +415,12 @@ was READ is = to the given value."
(partition-predicate read-partition-label string=?))
(define partition-uuid-predicate
- (partition-predicate read-partition-uuid bytevector=?))
+ (partition-predicate read-partition-uuid uuid=?))
(define luks-partition-uuid-predicate
(partition-predicate
(partition-field-reader read-luks-header luks-header-uuid)
- bytevector=?))
+ uuid=?))
(define (find-partition predicate)
"Return the first partition found that matches PREDICATE, or #f if none
diff --git a/gnu/system/uuid.scm b/gnu/system/uuid.scm
index 6470abb8cc..e422e06a6d 100644
--- a/gnu/system/uuid.scm
+++ b/gnu/system/uuid.scm
@@ -29,6 +29,7 @@
uuid?
uuid-type
uuid-bytevector
+ uuid=?
bytevector->uuid
@@ -281,3 +282,15 @@ corresponding bytevector; otherwise return #f."
((_ . (? procedure? unparse)) (unparse bv))))
(((? uuid? uuid))
(uuid->string (uuid-bytevector uuid) (uuid-type uuid)))))
+
+(define uuid=?
+ ;; Return true if A is equal to B, comparing only the actual bits.
+ (match-lambda*
+ (((? bytevector? a) (? bytevector? b))
+ (bytevector=? a b))
+ (((? uuid? a) (? bytevector? b))
+ (bytevector=? (uuid-bytevector a) b))
+ (((? uuid? a) (? uuid? b))
+ (bytevector=? (uuid-bytevector a) (uuid-bytevector b)))
+ ((a b)
+ (uuid=? b a))))
diff --git a/tests/uuid.scm b/tests/uuid.scm
index aacce77233..68676f775d 100644
--- a/tests/uuid.scm
+++ b/tests/uuid.scm
@@ -57,4 +57,10 @@
"1234-ABCD"
(uuid->string (uuid "1234-abcd" 'fat32)))
+(test-equal "uuid=?"
+ (and (uuid=? (uuid-bytevector (uuid "1234-abcd" 'fat32))
+ (uuid "1234-abcd" 'fat32))
+ (uuid=? (uuid "1234-abcd" 'fat32)
+ (uuid "1234-abcd" 'fat))))
+
(test-end)