mirror of
https://github.com/json-c/json-c.git
synced 2026-04-05 05:19:07 +08:00
If arc4random is used, don't bother compiling in the other fallback methods since they'll never be used. Fixes PR#695 about unreachable code too.
This commit is contained in:
@@ -20,6 +20,16 @@
|
|||||||
|
|
||||||
#define DEBUG_SEED(s)
|
#define DEBUG_SEED(s)
|
||||||
|
|
||||||
|
#if defined(__APPLE__) || defined(__unix__) || defined(__linux__)
|
||||||
|
#define HAVE_DEV_RANDOM 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_ARC4RANDOM
|
||||||
|
#undef HAVE_GETRANDOM
|
||||||
|
#undef HAVE_DEV_RANDOM
|
||||||
|
#undef HAVE_CRYPTGENRANDOM
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined ENABLE_RDRAND
|
#if defined ENABLE_RDRAND
|
||||||
|
|
||||||
/* cpuid */
|
/* cpuid */
|
||||||
@@ -197,7 +207,7 @@ static int get_getrandom_seed(int *seed)
|
|||||||
|
|
||||||
/* get_dev_random_seed */
|
/* get_dev_random_seed */
|
||||||
|
|
||||||
#if defined(__APPLE__) || defined(__unix__) || defined(__linux__)
|
#ifdef HAVE_DEV_RANDOM
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -207,8 +217,6 @@ static int get_getrandom_seed(int *seed)
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#define HAVE_DEV_RANDOM 1
|
|
||||||
|
|
||||||
static const char *dev_random_file = "/dev/urandom";
|
static const char *dev_random_file = "/dev/urandom";
|
||||||
|
|
||||||
static int get_dev_random_seed(int *seed)
|
static int get_dev_random_seed(int *seed)
|
||||||
@@ -294,6 +302,7 @@ static int get_cryptgenrandom_seed(int *seed)
|
|||||||
|
|
||||||
/* get_time_seed */
|
/* get_time_seed */
|
||||||
|
|
||||||
|
#ifndef HAVE_ARC4RANDOM
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
static int get_time_seed(void)
|
static int get_time_seed(void)
|
||||||
@@ -302,12 +311,12 @@ static int get_time_seed(void)
|
|||||||
|
|
||||||
return (unsigned)time(NULL) * 433494437;
|
return (unsigned)time(NULL) * 433494437;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* json_c_get_random_seed */
|
/* json_c_get_random_seed */
|
||||||
|
|
||||||
int json_c_get_random_seed(void)
|
int json_c_get_random_seed(void)
|
||||||
{
|
{
|
||||||
int seed;
|
|
||||||
#ifdef OVERRIDE_GET_RANDOM_SEED
|
#ifdef OVERRIDE_GET_RANDOM_SEED
|
||||||
OVERRIDE_GET_RANDOM_SEED;
|
OVERRIDE_GET_RANDOM_SEED;
|
||||||
#endif
|
#endif
|
||||||
@@ -318,18 +327,28 @@ int json_c_get_random_seed(void)
|
|||||||
#ifdef HAVE_ARC4RANDOM
|
#ifdef HAVE_ARC4RANDOM
|
||||||
/* arc4random never fails, so use it if it's available */
|
/* arc4random never fails, so use it if it's available */
|
||||||
return arc4random();
|
return arc4random();
|
||||||
#endif
|
#else
|
||||||
#ifdef HAVE_GETRANDOM
|
#ifdef HAVE_GETRANDOM
|
||||||
if (get_getrandom_seed(&seed) == 0)
|
{
|
||||||
return seed;
|
int seed;
|
||||||
|
if (get_getrandom_seed(&seed) == 0)
|
||||||
|
return seed;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined HAVE_DEV_RANDOM && HAVE_DEV_RANDOM
|
#if defined HAVE_DEV_RANDOM && HAVE_DEV_RANDOM
|
||||||
if (get_dev_random_seed(&seed) == 0)
|
{
|
||||||
return seed;
|
int seed;
|
||||||
|
if (get_dev_random_seed(&seed) == 0)
|
||||||
|
return seed;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined HAVE_CRYPTGENRANDOM && HAVE_CRYPTGENRANDOM
|
#if defined HAVE_CRYPTGENRANDOM && HAVE_CRYPTGENRANDOM
|
||||||
if (get_cryptgenrandom_seed(&seed) == 0)
|
{
|
||||||
return seed;
|
int seed;
|
||||||
|
if (get_cryptgenrandom_seed(&seed) == 0)
|
||||||
|
return seed;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return get_time_seed();
|
return get_time_seed();
|
||||||
|
#endif /* !HAVE_ARC4RANDOM */
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user