From a26a6e4656e2ed45be533a7a70c866647a8793d7 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 4 Oct 2023 15:50:40 -0400 Subject: [PATCH] random: use get_random() instead of arc4random_buf() for non-bsd builds --- include/randomgen/random_seed.hpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/include/randomgen/random_seed.hpp b/include/randomgen/random_seed.hpp index 5273ddeb..016f612f 100644 --- a/include/randomgen/random_seed.hpp +++ b/include/randomgen/random_seed.hpp @@ -1,9 +1,14 @@ /* @file random_seed.hpp */ -#include "indentlog/print/array.hpp" +//#include "indentlog/print/array.hpp" #include #include #include +#ifdef _BSD_SOURCE +# include +#else +# include +#endif namespace xo { namespace rng { @@ -20,10 +25,22 @@ namespace xo { */ template void random_seed(T * p_seed) { +# ifdef _BSD_SOURCE /* NOTE: arc4random_buf() works on darwin/nix; * probably need to do something else on intel linux */ - arc4random_buf(p_seed, sizeof(*p_seed)); + ::arc4random_buf(p_seed, sizeof(*p_seed)); +# else + /* avail flags: GRND_RANDOM | GRND_NONBLOCK */ + while (::getrandom(p_seed, sizeof(*p_seed), 0) == -1) { + if (errno == EINTR) { + /* interrupted by signal, try again */ + continue; + } else { + break; + } + } +# endif } /*random_seed*/ template