lib/randutils: add xsrand() and rand_get_number()

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2016-09-06 10:19:52 +02:00
parent d4a90151e3
commit a55d646bd3
2 changed files with 20 additions and 3 deletions

View File

@ -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);

View File

@ -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);