mingw: Hack for missing /dev/urandom.
authorJan (janneke) Nieuwenhuizen <janneke@gnu.org>
Fri, 30 Oct 2020 14:01:30 +0000 (15:01 +0100)
committerJan (janneke) Nieuwenhuizen <janneke@gnu.org>
Thu, 18 Mar 2021 21:51:47 +0000 (22:51 +0100)
* 8sync/systems/websocket/client.scm (open-entropy-port): Add hack for
missing /dev/urandom.

8sync/systems/websocket/client.scm

index 9f2b0f06807a1494e51e31c5c27113543885a6a6..a6373845fcd7eb44a85f362c85c67adf208f62e5 100644 (file)
@@ -313,9 +313,14 @@ KEY."
 (define (open-entropy-port)
   "Return an open input port to a reliable source of entropy for the
 current system."
-  ;; XXX: This works on GNU/Linux and OS X systems, but this isn't
-  ;; exactly portable.
-  (open-input-file "/dev/urandom"))
+  (if (file-exists? "/dev/urandom")
+      (open-input-file "/dev/urandom")
+      ;; XXX: This works as a fall back but this isn't exactly a
+      ;; reliable source of entropy.
+      (make-soft-port (vector (const #f) (const #f) (const #f)
+                              (lambda _ (let ((r (random 256))) (integer->char r)))
+                              (const #f)
+                              (const #t)) "r")))
 
 (define-method (websocket-close (websocket <websocket>))
   "Close the WebSocket connection for the client WEBSOCKET."