lib/randutils: add xsrand() and rand_get_number()
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
d4a90151e3
commit
a55d646bd3
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue