diff options
Diffstat (limited to '')
-rw-r--r-- | module/hnh/util.scm | 6 | ||||
-rw-r--r-- | module/hnh/util/uuid.scm | 19 |
2 files changed, 19 insertions, 6 deletions
diff --git a/module/hnh/util.scm b/module/hnh/util.scm index 8cbc8c8d..1b5ceeab 100644 --- a/module/hnh/util.scm +++ b/module/hnh/util.scm @@ -575,9 +575,3 @@ (lambda () (for-each (lambda (pair) (setenv (car pair) (caddr pair))) env-pairs))))])) - - -(define-public (uuidgen) - ((@ (rnrs io ports) call-with-port) - ((@ (ice-9 popen) open-input-pipe) "uuidgen") - (@ (ice-9 rdelim) read-line))) diff --git a/module/hnh/util/uuid.scm b/module/hnh/util/uuid.scm new file mode 100644 index 00000000..68455243 --- /dev/null +++ b/module/hnh/util/uuid.scm @@ -0,0 +1,19 @@ +(define-module (hnh util uuid) + :use-module (ice-9 format) + :export (uuid uuid-v4)) + +(define %seed (random-state-from-platform)) + +(define (uuid-v4) + (define version 4) + (define variant #b10) + (format #f "~8'0x-~4'0x-~4'0x-~4'0x-~12'0x" + (random (ash 1 (* 4 8)) %seed) + (random (ash 1 (* 4 4)) %seed) + (logior (ash version (* 4 3)) + (random (1- (ash 1 (* 4 3))) %seed)) + (logior (ash variant (+ 2 (* 4 3))) + (random (ash 1 (+ 2 (* 4 3))) %seed)) + (random (ash 1 (* 4 12)) %seed))) + +(define uuid uuid-v4) |