summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Haszlakiewicz <erh+git@nimenees.com>2020-07-22 02:25:03 +0000
committerEric Haszlakiewicz <erh+git@nimenees.com>2020-07-22 02:25:03 +0000
commit730e3d044f2ac2e44e38bf67ac31c19925428d15 (patch)
tree5bf8f1ea9e491e364b478b418dac62692c127af4
parent64de4b6e9f3ca042cc9e09ceef995b1ef6b4d37f (diff)
downloadjson-c-730e3d044f2ac2e44e38bf67ac31c19925428d15.tar.gz
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)' ..
-rw-r--r--CMakeLists.txt2
-rw-r--r--README.md1
-rw-r--r--cmake/config.h.in3
-rw-r--r--random_seed.c3
4 files changed, 9 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index da0af96..7362a84 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 fc128f5..cd66d49 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 8b31164..547a585 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 833b1a5..1a15350 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();