From 263c9941a1e523b360ca9f42d1ed6b11e6e6e285 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 18 May 2018 22:20:33 +0200 Subject: uuid: 'uuid' returns #f when 'string->uuid' returns #f. * gnu/system/uuid.scm (uuid): When STR is not a literal, return #f when 'string->uuid' returns #f. * tests/uuid.scm ("uuid, dynamic value"): New test. --- gnu/system/uuid.scm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'gnu') diff --git a/gnu/system/uuid.scm b/gnu/system/uuid.scm index 73695ddeb8..f13960c3e9 100644 --- a/gnu/system/uuid.scm +++ b/gnu/system/uuid.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016, 2017 Ludovic Courtès +;;; Copyright © 2016, 2017, 2018 Ludovic Courtès ;;; Copyright © 2017 Danny Milosavljevic ;;; ;;; This file is part of GNU Guix. @@ -251,7 +251,8 @@ (define* (bytevector->uuid bv #:optional (type 'dce)) (define-syntax uuid (lambda (s) - "Return the UUID object corresponding to the given UUID representation." + "Return the UUID object corresponding to the given UUID representation or +#f if the string could not be parsed." (syntax-case s (quote) ((_ str (quote type)) (and (string? (syntax->datum #'str)) @@ -266,9 +267,11 @@ (define-syntax uuid (string? (syntax->datum #'str)) #'(uuid str 'dce)) ((_ str) - #'(make-uuid 'dce (string->uuid str 'dce))) + #'(let ((bv (string->uuid str 'dce))) + (and bv (make-uuid 'dce bv)))) ((_ str type) - #'(make-uuid type (string->uuid str type)))))) + #'(let ((bv (string->uuid str type))) + (and bv (make-uuid type bv))))))) (define uuid->string ;; Convert the given bytevector or UUID object, to the corresponding UUID -- cgit v1.2.3