util: introduce random_ull()

This commit is contained in:
Lennart Poettering 2010-06-16 05:05:36 +02:00
parent 10e87ee7f6
commit d3782d60cd
2 changed files with 22 additions and 0 deletions

View File

@ -2141,6 +2141,26 @@ int dir_is_empty(const char *path) {
return r;
}
unsigned long long random_ull(void) {
int fd;
uint64_t ull;
ssize_t r;
if ((fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY)) < 0)
goto fallback;
r = loop_read(fd, &ull, sizeof(ull));
close_nointr_nofail(fd);
if (r != sizeof(ull))
goto fallback;
return ull;
fallback:
return random() * RAND_MAX + random();
}
static const char *const ioprio_class_table[] = {
[IOPRIO_CLASS_NONE] = "none",
[IOPRIO_CLASS_RT] = "realtime",

View File

@ -196,6 +196,8 @@ int make_stdio(int fd);
bool is_clean_exit(int code, int status);
unsigned long long random_ull(void);
#define DEFINE_STRING_TABLE_LOOKUP(name,type) \
const char *name##_to_string(type i) { \
if (i < 0 || i >= (type) ELEMENTSOF(name##_table)) \