diff --git a/cbits-unix/init.c b/cbits-unix/init.c index 300b7dc..255b667 100644 --- a/cbits-unix/init.c +++ b/cbits-unix/init.c @@ -1,39 +1,13 @@ #include -#include -#include -#include -#include #include -uint64_t splitmix_init() { - - /* if there is /dev/urandom, read from it */ - FILE *urandom = fopen("/dev/urandom", "r"); - if (urandom) { - uint64_t result = 0; - size_t r = fread(&result, sizeof(uint64_t), 1, urandom); - fclose(urandom); - - if (r == 1) { - return result; - } else { - return 0xfeed1000; - } - - } else { - /* time of day */ - struct timeval tp = {0, 0}; - gettimeofday(&tp, NULL); +/* for macos */ +#ifdef __APPLE__ +#include +#endif - /* cputime */ - clock_t c = clock(); - - /* process id */ - pid_t p = getpid(); - - return ((uint64_t) tp.tv_sec) - ^ ((uint64_t) tp.tv_usec) - ^ ((uint64_t) c << 16) - ^ ((uint64_t) p << 32); - } +uint64_t splitmix_init() { + uint64_t result; + int r = getentropy(&result, sizeof(uint64_t)); + return r == 0 ? result : 0xfeed1000; }