summaryrefslogtreecommitdiff
path: root/gnu/system/uuid.scm
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2020-09-05 21:56:34 +0300
committerEfraim Flashner <efraim@flashner.co.il>2020-09-05 22:30:04 +0300
commitde3c03a47160dec355d9b19ad5ca210d90c15fd7 (patch)
tree4ca6dc05b5fc9530d812bbb269f1c61ab9efccf3 /gnu/system/uuid.scm
parentab6fe9d362046231ad6f46eccfd1ea2c9c80b401 (diff)
parentb8477cab7bccc4191ed3dfa3f149aec7917834d8 (diff)
downloadguix-patches-de3c03a47160dec355d9b19ad5ca210d90c15fd7.tar
guix-patches-de3c03a47160dec355d9b19ad5ca210d90c15fd7.tar.gz
Merge remote-tracking branch 'origin/master' into staging
Diffstat (limited to 'gnu/system/uuid.scm')
-rw-r--r--gnu/system/uuid.scm37
1 files changed, 36 insertions, 1 deletions
diff --git a/gnu/system/uuid.scm b/gnu/system/uuid.scm
index bc3af69610..c8352f4933 100644
--- a/gnu/system/uuid.scm
+++ b/gnu/system/uuid.scm
@@ -45,6 +45,7 @@
string->btrfs-uuid
string->fat-uuid
string->jfs-uuid
+ string->ntfs-uuid
iso9660-uuid->string
;; XXX: For lack of a better place.
@@ -197,6 +198,38 @@ ISO9660 UUID representation."
;;;
+;;; NTFS.
+;;;
+
+(define-syntax %ntfs-endianness
+ ;; Endianness of NTFS file system.
+ (identifier-syntax (endianness little)))
+
+(define (ntfs-uuid->string uuid)
+ "Convert NTFS UUID, a 8-byte bytevector, to its string representation."
+ (format #f "~{~:@(~x~)~}" (reverse (bytevector->u8-list uuid))))
+
+(define %ntfs-uuid-rx
+ (make-regexp "^([[:xdigit:]]{16})$"))
+
+(define (string->ntfs-uuid str)
+ "Parse STR, which is in NTFS format, and return a bytevector or #f."
+ (match (regexp-exec %ntfs-uuid-rx str)
+ (#f
+ #f)
+ (rx-match
+ (u8-list->bytevector
+ (let loop ((str str)
+ (res '()))
+ (if (string=? str "")
+ res
+ (loop (string-drop str 2)
+ (cons
+ (string->number (string-take str 2) 16)
+ res))))))))
+
+
+;;;
;;; Generic interface.
;;;
@@ -220,13 +253,15 @@ ISO9660 UUID representation."
(vhashq
('dce 'ext2 'ext3 'ext4 'btrfs 'jfs 'luks => string->dce-uuid)
('fat32 'fat16 'fat => string->fat-uuid)
+ ('ntfs => string->ntfs-uuid)
('iso9660 => string->iso9660-uuid)))
(define %uuid-printers
(vhashq
('dce 'ext2 'ext3 'ext4 'btrfs 'jfs 'luks => dce-uuid->string)
('iso9660 => iso9660-uuid->string)
- ('fat32 'fat16 'fat => fat-uuid->string)))
+ ('fat32 'fat16 'fat => fat-uuid->string)
+ ('ntfs => ntfs-uuid->string)))
(define* (string->uuid str #:optional (type 'dce))
"Parse STR as a UUID of the given TYPE. On success, return the