chiark / gitweb /
hashmap: randomize hash functions a bit
[elogind.git] / src / shared / util.c
index 5dc605eb8d5480738246340e0faac4300a9621ab..9be6acfc8f3b45f31be7ec0210cd272d0c053c78 100644 (file)
@@ -2424,6 +2424,25 @@ fallback:
         return random() * RAND_MAX + random();
 }
 
+unsigned random_u(void) {
+        _cleanup_close_ int fd;
+        unsigned u;
+        ssize_t r;
+
+        fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+        if (fd < 0)
+                goto fallback;
+
+        r = loop_read(fd, &u, sizeof(u), true);
+        if (r != sizeof(u))
+                goto fallback;
+
+        return u;
+
+fallback:
+        return random() * RAND_MAX + random();
+}
+
 void rename_process(const char name[8]) {
         assert(name);