]> code.delx.au - pulseaudio/commitdiff
initialize random seed globaly from $RANDOM_DEVICE
authorLennart Poettering <lennart@poettering.net>
Sun, 16 Apr 2006 09:13:09 +0000 (09:13 +0000)
committerLennart Poettering <lennart@poettering.net>
Sun, 16 Apr 2006 09:13:09 +0000 (09:13 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@719 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/daemon/main.c
src/polypcore/random.c

index 8457916a84c802617f8beaa08becfc9cb24858ec..d783531a01dc000e89e55f9e3d8194a61eef9c25 100644 (file)
@@ -135,6 +135,29 @@ static void close_pipe(int p[2]) {
     p[0] = p[1] = -1;
 }
 
+static void set_random_seed(void) {
+    unsigned int seed = 0;
+    
+#ifdef RANDOM_DEVICE
+    int fd;
+    
+    if ((fd = open(RANDOM_DEVICE, O_RDONLY)) >= 0) {
+        ssize_t r;
+
+        if ((r = pa_loop_read(fd, &seed, sizeof(seed))) < 0 || (size_t) r != sizeof(seed)) {
+            pa_log_error(__FILE__": failed to read entropy from '"RANDOM_DEVICE"'");
+            seed += (unsigned int) time(NULL);
+        }
+
+        close(fd);
+    }
+#else
+    seed = (unsigned int) time(NULL);
+#endif
+    
+    srand(seed);
+}
+
 int main(int argc, char *argv[]) {
     pa_core *c;
     pa_strbuf *buf = NULL;
@@ -180,6 +203,8 @@ int main(int argc, char *argv[]) {
     }
 #endif
 
+    set_random_seed();
+    
     pa_log_set_ident("polypaudio");
     
     conf = pa_daemon_conf_new();
index 1c2280e3f0acf163d1d1c9de5f6c0ad59fdc02cd..ffd404741210c4e962b81f88107af145fce6e281 100644 (file)
 
 #include "random.h"
 
-#ifndef OS_IS_WIN32
-#define RANDOM_DEVICE "/dev/urandom"
-#endif
-
 void pa_random(void *ret_data, size_t length) {
     int fd;
     ssize_t r = 0;
@@ -64,8 +60,6 @@ void pa_random(void *ret_data, size_t length) {
                     ", falling back to unsecure pseudo RNG.\n", strerror(errno));
 #endif
 
-        srand(time(NULL));
-        
         for (p = ret_data, l = length; l > 0; p++, l--)
             *p = (uint8_t) rand();
     }