From: Eric Haszlakiewicz Date: Sat, 13 Feb 2021 03:23:58 +0000 (+0000) Subject: If arc4random is used, don't bother compiling in the other fallback methods since... X-Git-Tag: json-c-0.16-20220414~37^2~9 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=f787810890b91b2b141ce7630d5be85c5f8cfcc3;p=thirdparty%2Fjson-c.git 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. --- diff --git a/random_seed.c b/random_seed.c index f3ee7406..b2e8ce67 100644 --- a/random_seed.c +++ b/random_seed.c @@ -20,6 +20,16 @@ #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 /* cpuid */ @@ -197,7 +207,7 @@ static int get_getrandom_seed(int *seed) /* get_dev_random_seed */ -#if defined(__APPLE__) || defined(__unix__) || defined(__linux__) +#ifdef HAVE_DEV_RANDOM #include #include @@ -207,8 +217,6 @@ static int get_getrandom_seed(int *seed) #include #include -#define HAVE_DEV_RANDOM 1 - static const char *dev_random_file = "/dev/urandom"; static int get_dev_random_seed(int *seed) @@ -294,6 +302,7 @@ static int get_cryptgenrandom_seed(int *seed) /* get_time_seed */ +#ifndef HAVE_ARC4RANDOM #include static int get_time_seed(void) @@ -302,12 +311,12 @@ static int get_time_seed(void) return (unsigned)time(NULL) * 433494437; } +#endif /* json_c_get_random_seed */ int json_c_get_random_seed(void) { - int seed; #ifdef OVERRIDE_GET_RANDOM_SEED OVERRIDE_GET_RANDOM_SEED; #endif @@ -318,18 +327,28 @@ int json_c_get_random_seed(void) #ifdef HAVE_ARC4RANDOM /* arc4random never fails, so use it if it's available */ return arc4random(); -#endif +#else #ifdef HAVE_GETRANDOM - if (get_getrandom_seed(&seed) == 0) - return seed; + { + int seed; + if (get_getrandom_seed(&seed) == 0) + return seed; + } #endif #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 #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 return get_time_seed(); +#endif /* !HAVE_ARC4RANDOM */ }