From: Karel Zak Date: Tue, 6 Sep 2016 08:19:52 +0000 (+0200) Subject: lib/randutils: add xsrand() and rand_get_number() X-Git-Tag: v2.29-rc1~78 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a55d646bd3986937cd3a8488b6abaf74b2b9e28a;p=thirdparty%2Futil-linux.git lib/randutils: add xsrand() and rand_get_number() Signed-off-by: Karel Zak --- diff --git a/include/randutils.h b/include/randutils.h index 17e2a02fac..7094a4c740 100644 --- a/include/randutils.h +++ b/include/randutils.h @@ -6,6 +6,11 @@ #define rand() random() #endif +/* rand() based */ +extern void xsrand(void); +extern int rand_get_number(int low_n, int high_n); + +/* /dev/urandom based with fallback to rand() */ extern int random_get_fd(void); extern void random_get_bytes(void *buf, size_t nbytes); extern const char *random_tell_source(void); diff --git a/lib/randutils.c b/lib/randutils.c index 684ac0ac16..2e124bcb66 100644 --- a/lib/randutils.c +++ b/lib/randutils.c @@ -30,12 +30,24 @@ THREAD_LOCAL unsigned short ul_jrand_seed[3]; #endif +void xsrand(void) +{ + struct timeval tv; + + gettimeofday(&tv, 0); + srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); +} + +int rand_get_number(int low_n, int high_n) +{ + return rand() % (high_n - low_n + 1) + low_n; +} + int random_get_fd(void) { int i, fd; - struct timeval tv; + struct timeval tv; - gettimeofday(&tv, 0); fd = open("/dev/urandom", O_RDONLY | O_CLOEXEC); if (fd == -1) fd = open("/dev/random", O_RDONLY | O_NONBLOCK | O_CLOEXEC); @@ -44,7 +56,7 @@ int random_get_fd(void) if (i >= 0) fcntl(fd, F_SETFD, i | FD_CLOEXEC); } - srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); + xsrand(); #ifdef DO_JRAND_MIX ul_jrand_seed[0] = getpid() ^ (tv.tv_sec & 0xFFFF);