From 075681d3501082c6e22df8abf29dfe89d85effc1 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 6 Sep 2017 10:22:58 +0200 Subject: system: Serialize the UUID type in the "parameters" file. * gnu/system.scm (read-boot-parameters)[device->sexp]: New procedure. Use it for 'root-device' and 'store-device'. (device->sexp): Serialize the UUID type in addition to its bytevector. --- gnu/system.scm | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/gnu/system.scm b/gnu/system.scm index a8d2a81316..6f795d6292 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -234,6 +234,15 @@ (define-record-type* (define (read-boot-parameters port) "Read boot parameters from PORT and return the corresponding object or #f if the format is unrecognized." + (define device-sexp->device + (match-lambda + (('uuid (? symbol? type) (? bytevector? bv)) + (bytevector->uuid bv type)) + ((? bytevector? bv) ;old format + (bytevector->uuid bv 'dce)) + ((? string? device) + device))) + (match (read port) (('boot-parameters ('version 0) ('label label) ('root-device root) @@ -241,7 +250,7 @@ (define (read-boot-parameters port) rest ...) (boot-parameters (label label) - (root-device root) + (root-device (device->sexp root)) (bootloader-name (match (assq 'bootloader-name rest) @@ -269,10 +278,8 @@ (define (read-boot-parameters port) (store-device (match (assq 'store rest) - (('store ('device (? bytevector? bv)) _ ...) - (bytevector->uuid bv)) (('store ('device device) _ ...) - device) + (device-sexp->device device)) (_ ;the old format ;; Root might be a device path like "/dev/sda1", which is not a ;; suitable GRUB device identifier. @@ -925,8 +932,7 @@ (define (device->sexp device) "Serialize DEVICE as an sexp (really, as an object with a read syntax.)" (match device ((? uuid? uuid) - ;; TODO: Preserve the type of UUID. - (uuid-bytevector uuid)) + `(uuid ,(uuid-type uuid) ,(uuid-bytevector uuid))) (_ device))) -- cgit v1.2.3