summaryrefslogtreecommitdiff
path: root/random_seed.c
diff options
context:
space:
mode:
Diffstat (limited to 'random_seed.c')
-rw-r--r--random_seed.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/random_seed.c b/random_seed.c
index ff5338f..f3ee740 100644
--- a/random_seed.c
+++ b/random_seed.c
@@ -13,6 +13,10 @@
#include "config.h"
#include "strerror_override.h"
#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_BSD_STDLIB_H
+#include <bsd/stdlib.h>
+#endif
#define DEBUG_SEED(s)
@@ -168,7 +172,8 @@ static int get_getrandom_seed(int *seed)
ssize_t ret;
- do {
+ do
+ {
ret = getrandom(seed, sizeof(*seed), GRND_NONBLOCK);
} while ((ret == -1) && (errno == EINTR));
@@ -273,7 +278,7 @@ static int get_cryptgenrandom_seed(int *seed)
}
else
{
- BOOL ret = CryptGenRandom(hProvider, sizeof(*seed), (BYTE*)seed);
+ BOOL ret = CryptGenRandom(hProvider, sizeof(*seed), (BYTE *)seed);
CryptReleaseContext(hProvider, 0);
if (!ret)
{
@@ -310,6 +315,10 @@ int json_c_get_random_seed(void)
if (has_rdrand())
return get_rdrand_seed();
#endif
+#ifdef HAVE_ARC4RANDOM
+ /* arc4random never fails, so use it if it's available */
+ return arc4random();
+#endif
#ifdef HAVE_GETRANDOM
if (get_getrandom_seed(&seed) == 0)
return seed;