Coverage report: /home/ellis/comp/ext/ironclad/src/prng/os-prng.lisp
Kind | Covered | All | % |
expression | 2 | 41 | 4.9 |
branch | 0 | 4 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;;; os-prng.lisp -- OS-provided pseudo-random number generator
5
(defparameter *os-prng-stream* nil)
7
(defparameter *os-prng-stream-lock* (std:make-mutex))
12
(defmethod prng-random-data (num-bytes (prng os-prng))
14
(let* ((seq (make-array num-bytes :element-type '(unsigned-byte 8)))
15
(n (sb-thread:with-mutex (*os-prng-stream-lock*)
16
(unless (and *os-prng-stream* (open-stream-p *os-prng-stream*))
17
(setf *os-prng-stream* (open #P"/dev/urandom"
18
:element-type '(unsigned-byte 8))))
19
(read-sequence seq *os-prng-stream*))))
21
(error 'ironclad-error :format-control "Failed to get random data.")
24
(error 'ironclad-error
25
:format-control "OS-RANDOM-SEED is not supported on your platform."))
27
(defmethod make-prng ((name (eql :os)) &key seed)
28
(declare (ignorable seed))
29
(make-instance 'os-prng))
31
(setf *prng* (make-prng :os))
34
(pushnew '(*prng* . (make-prng :os)) std:*default-special-bindings* :test #'equal)