New functions random_uint8(), random_uint16().
authorBen Pfaff <blp@nicira.com>
Wed, 24 Dec 2008 01:02:46 +0000 (17:02 -0800)
committerBen Pfaff <blp@nicira.com>
Wed, 24 Dec 2008 01:03:34 +0000 (17:03 -0800)
Also, reimplement random_uint32() to make fewer calls to rand().

lib/random.c
lib/random.h

index f4fab4c8c07e72f9ea983796ad22d8a5aefb0deb..14be87e56f8045990457f21d54a0e922e1ea56ba 100644 (file)
@@ -64,12 +64,40 @@ random_bytes(void *p_, size_t n)
     }
 }
 
+uint8_t
+random_uint8(void)
+{
+    random_init();
+    return rand();
+}
+
+uint16_t
+random_uint16(void)
+{
+    if (RAND_MAX >= UINT16_MAX) {
+        random_init();
+        return rand();
+    } else {
+        uint16_t x;
+        random_bytes(&x, sizeof x);
+        return x;
+    }
+}
+
 uint32_t
 random_uint32(void)
 {
-    uint32_t x;
-    random_bytes(&x, sizeof x);
-    return x;
+    if (RAND_MAX >= UINT32_MAX) {
+        random_init();
+        return rand();
+    } else if (RAND_MAX == INT32_MAX) {
+        random_init();
+        return rand() | ((rand() & 1u) << 31);
+    } else {
+        uint32_t x;
+        random_bytes(&x, sizeof x);
+        return x;
+    }
 }
 
 int
index d9f5f9d08aee6d45125a635335063bfe3430d31f..80332308a123187faa53a781d095835859d28ca8 100644 (file)
@@ -38,6 +38,8 @@
 #include <stdint.h>
 
 void random_bytes(void *, size_t);
+uint8_t random_uint8(void);
+uint16_t random_uint16(void);
 uint32_t random_uint32(void);
 int random_range(int max);