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