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