From d4492f955d1fe915f0ac662772ad43c04682986d Mon Sep 17 00:00:00 2001
From: Yang Tse <yangsita@gmail.com>
Date: Mon, 15 Jul 2013 15:54:28 +0200
Subject: [PATCH] sslgen.c: fix Curl_rand() compiler warning

Use simple seeding method upon RANDOM_FILE seeding method failure.
---
 lib/sslgen.c | 60 +++++++++++++++++++++++++---------------------------
 1 file changed, 29 insertions(+), 31 deletions(-)

diff --git a/lib/sslgen.c b/lib/sslgen.c
index a633b0c5d1..dee06e89c2 100644
--- a/lib/sslgen.c
+++ b/lib/sslgen.c
@@ -187,45 +187,43 @@ unsigned int Curl_rand(struct SessionHandle *data)
 {
   unsigned int r;
   static unsigned int randseed;
-  static bool seeded;
+  static bool seeded = FALSE;
 
-#ifdef have_curlssl_random
-  if(!data) {
+#ifndef have_curlssl_random
+  (void)data;
+#else
+  if(data) {
+    Curl_ssl_random(data, (unsigned char *)&r, sizeof(r));
+    return r;
+  }
 #endif
 
-    if(!seeded) {
-
 #ifdef RANDOM_FILE
-      /* if there's a random file to read a seed from, use it */
-      int fd = open(RANDOM_FILE, O_RDONLY);
-      seeded = TRUE;
-      if(fd > -1) {
-        /* read random data into the randseed variable */
-        read(fd, &randseed, sizeof(randseed));
-        close(fd);
-      }
-      else
-#endif /* RANDOM_FILE */
-      {
-        struct timeval now = curlx_tvnow();
-        randseed += (unsigned int) now.tv_usec + (unsigned int)now.tv_sec;
-        randseed = randseed * 1103515245 + 12345;
-        randseed = randseed * 1103515245 + 12345;
-        randseed = randseed * 1103515245 + 12345;
+  if(!seeded) {
+    /* if there's a random file to read a seed from, use it */
+    int fd = open(RANDOM_FILE, O_RDONLY);
+    if(fd > -1) {
+      /* read random data into the randseed variable */
+      ssize_t nread = read(fd, &randseed, sizeof(randseed));
+      if(nread == sizeof(randseed))
         seeded = TRUE;
-      }
+      close(fd);
     }
-    /* Return an unsigned 32-bit pseudo-random number. */
-    r = randseed = randseed * 1103515245 + 12345;
-    return (r << 16) | ((r >> 16) & 0xFFFF);
-
-#ifdef have_curlssl_random
-  }
-  else {
-    Curl_ssl_random(data, (unsigned char *)&r, sizeof(r));
-    return r;
   }
 #endif
+
+  if(!seeded) {
+    struct timeval now = curlx_tvnow();
+    randseed += (unsigned int)now.tv_usec + (unsigned int)now.tv_sec;
+    randseed = randseed * 1103515245 + 12345;
+    randseed = randseed * 1103515245 + 12345;
+    randseed = randseed * 1103515245 + 12345;
+    seeded = TRUE;
+  }
+
+  /* Return an unsigned 32-bit pseudo-random number. */
+  r = randseed = randseed * 1103515245 + 12345;
+  return (r << 16) | ((r >> 16) & 0xFFFF);
 }
 
 #ifdef USE_SSL
-- 
GitLab