From: Eric Haszlakiewicz Date: Wed, 22 Jul 2020 02:25:03 +0000 (+0000) Subject: Issue #594 - provide an OVERRIDE_GET_RANDOM_SEED cmake variable to override json_c_ge... X-Git-Tag: json-c-0.15-20200726~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=730e3d044f2ac2e44e38bf67ac31c19925428d15;p=thirdparty%2Fjson-c.git Issue #594 - provide an OVERRIDE_GET_RANDOM_SEED cmake variable to override json_c_get_random_seed() for embedded platforms where time(NULL) doesn't work. Example: mkdir build && cd build cmake -DOVERRIDE_GET_RANDOM_SEED='do { extern uint32_t getMsTicks(void); int ms = getMsTicks() * 433494437; return ms; } while(0)' .. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index da0af963..7362a847 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,6 +96,8 @@ option(DISABLE_THREAD_LOCAL_STORAGE "Disable using Thread-Local Storage (HAVE_ option(DISABLE_WERROR "Avoid treating compiler warnings as fatal errors." OFF) option(ENABLE_RDRAND "Enable RDRAND Hardware RNG Hash Seed." OFF) option(ENABLE_THREADING "Enable partial threading support." OFF) +option(OVERRIDE_GET_RANDOM_SEED "Override json_c_get_random_seed() with custom code." OFF) + if (UNIX OR MINGW OR CYGWIN) list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) diff --git a/README.md b/README.md index fc128f51..cd66d491 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ DISABLE_THREAD_LOCAL_STORAGE | Bool | Disable use of Thread-Local Storage (HAV DISABLE_WERROR | Bool | Disable use of -Werror. ENABLE_RDRAND | Bool | Enable RDRAND Hardware RNG Hash Seed. ENABLE_THREADING | Bool | Enable partial threading support. +OVERRIDE_GET_RANDOM_SEED | String | A block of code to use instead of the default implementation of json_c_get_random_seed(), e.g. on embedded platforms where not even the fallback to time() works. Must be a single line. Pass these options as `-D` on CMake's command-line. diff --git a/cmake/config.h.in b/cmake/config.h.in index 8b311643..547a5854 100644 --- a/cmake/config.h.in +++ b/cmake/config.h.in @@ -2,6 +2,9 @@ /* Enable RDRAND Hardware RNG Hash Seed */ #cmakedefine ENABLE_RDRAND "@ENABLE_RDRAND@" +/* Override json_c_get_random_seed() with custom code */ +#cmakedefine OVERRIDE_GET_RANDOM_SEED @OVERRIDE_GET_RANDOM_SEED@ + /* Enable partial threading support */ #cmakedefine ENABLE_THREADING "@@" diff --git a/random_seed.c b/random_seed.c index 833b1a53..1a15350c 100644 --- a/random_seed.c +++ b/random_seed.c @@ -276,6 +276,9 @@ static int get_time_seed(void) int json_c_get_random_seed(void) { +#ifdef OVERRIDE_GET_RANDOM_SEED + OVERRIDE_GET_RANDOM_SEED; +#endif #if defined HAVE_RDRAND && HAVE_RDRAND if (has_rdrand()) return get_rdrand_seed();