aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sslgen.c60
1 files changed, 29 insertions, 31 deletions
diff --git a/lib/sslgen.c b/lib/sslgen.c
index a633b0c5d..dee06e89c 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