Merged from silc_1_0_branch (second merge).
[silc.git] / lib / silccrypt / silcrng.c
index a97773d3554b59645742967e4ff90fce7a69fc56..48a3e0011ff755dc13dec26cb033f3ffe8164011 100644 (file)
@@ -351,19 +351,18 @@ static void silc_rng_exec_command(SilcRng rng, char *command)
   /* Get data as much as we can get into the buffer */
   for (i = 0; i < sizeof(buf); i++) {
     c = fgetc(fd);
-    if (c == EOF) {
-      if (!i)
-       return;
+    if (c == EOF)
       break; 
-    }
     buf[i] = c;
   }
   
   pclose(fd);
   
-  /* Add the buffer into random pool */
-  silc_rng_add_noise(rng, buf, i);
-  memset(buf, 0, sizeof(buf));
+  if (i != 0) {
+    /* Add the buffer into random pool */
+    silc_rng_add_noise(rng, buf, i);
+    memset(buf, 0, sizeof(buf));
+  }
 #endif
 }
 
@@ -522,7 +521,7 @@ SilcUInt8 silc_rng_get_byte_fast(SilcRng rng)
 
   if (rng->fd_devurandom == -1) {
     rng->fd_devurandom = open("/dev/urandom", O_RDONLY);
-    if (rng < 0)
+    if (rng->fd_devurandom < 0)
       return silc_rng_get_byte(rng);
     fcntl(rng->fd_devurandom, F_SETFL, O_NONBLOCK);
   }
@@ -555,7 +554,7 @@ SilcUInt16 silc_rng_get_rn16(SilcRng rng)
 SilcUInt32 silc_rng_get_rn32(SilcRng rng)
 {
   unsigned char rn[4];
-  SilcUInt16 num;
+  SilcUInt32 num;
 
   rn[0] = silc_rng_get_byte(rng);
   rn[1] = silc_rng_get_byte(rng);