Skip to content

Commit f787810

Browse files
committed
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.
1 parent 7c859c5 commit f787810

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

random_seed.c

+30-11
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@
2020

2121
#define DEBUG_SEED(s)
2222

23+
#if defined(__APPLE__) || defined(__unix__) || defined(__linux__)
24+
#define HAVE_DEV_RANDOM 1
25+
#endif
26+
27+
#ifdef HAVE_ARC4RANDOM
28+
#undef HAVE_GETRANDOM
29+
#undef HAVE_DEV_RANDOM
30+
#undef HAVE_CRYPTGENRANDOM
31+
#endif
32+
2333
#if defined ENABLE_RDRAND
2434

2535
/* cpuid */
@@ -197,7 +207,7 @@ static int get_getrandom_seed(int *seed)
197207

198208
/* get_dev_random_seed */
199209

200-
#if defined(__APPLE__) || defined(__unix__) || defined(__linux__)
210+
#ifdef HAVE_DEV_RANDOM
201211

202212
#include <fcntl.h>
203213
#include <string.h>
@@ -207,8 +217,6 @@ static int get_getrandom_seed(int *seed)
207217
#include <stdlib.h>
208218
#include <sys/stat.h>
209219

210-
#define HAVE_DEV_RANDOM 1
211-
212220
static const char *dev_random_file = "/dev/urandom";
213221

214222
static int get_dev_random_seed(int *seed)
@@ -294,6 +302,7 @@ static int get_cryptgenrandom_seed(int *seed)
294302

295303
/* get_time_seed */
296304

305+
#ifndef HAVE_ARC4RANDOM
297306
#include <time.h>
298307

299308
static int get_time_seed(void)
@@ -302,12 +311,12 @@ static int get_time_seed(void)
302311

303312
return (unsigned)time(NULL) * 433494437;
304313
}
314+
#endif
305315

306316
/* json_c_get_random_seed */
307317

308318
int json_c_get_random_seed(void)
309319
{
310-
int seed;
311320
#ifdef OVERRIDE_GET_RANDOM_SEED
312321
OVERRIDE_GET_RANDOM_SEED;
313322
#endif
@@ -318,18 +327,28 @@ int json_c_get_random_seed(void)
318327
#ifdef HAVE_ARC4RANDOM
319328
/* arc4random never fails, so use it if it's available */
320329
return arc4random();
321-
#endif
330+
#else
322331
#ifdef HAVE_GETRANDOM
323-
if (get_getrandom_seed(&seed) == 0)
324-
return seed;
332+
{
333+
int seed;
334+
if (get_getrandom_seed(&seed) == 0)
335+
return seed;
336+
}
325337
#endif
326338
#if defined HAVE_DEV_RANDOM && HAVE_DEV_RANDOM
327-
if (get_dev_random_seed(&seed) == 0)
328-
return seed;
339+
{
340+
int seed;
341+
if (get_dev_random_seed(&seed) == 0)
342+
return seed;
343+
}
329344
#endif
330345
#if defined HAVE_CRYPTGENRANDOM && HAVE_CRYPTGENRANDOM
331-
if (get_cryptgenrandom_seed(&seed) == 0)
332-
return seed;
346+
{
347+
int seed;
348+
if (get_cryptgenrandom_seed(&seed) == 0)
349+
return seed;
350+
}
333351
#endif
334352
return get_time_seed();
353+
#endif /* !HAVE_ARC4RANDOM */
335354
}

0 commit comments

Comments
 (0)