fw-hex \
char-cat char-upper char-lower unicode varint stkstring \
wildmatch regex \
- prime primetable random \
+ prime primetable \
+ random-legacy \
time-stamp time-timer time-conf \
bit-ffs bit-fls bit-array \
url \
void *big_alloc_zero(u64 len) LIKE_MALLOC; /** Allocate and clear a large memory block. **/
void big_free(void *start, u64 len); /** Free block allocated by @big_alloc() or @big_alloc_zero(). **/
-/*** === Random numbers (random.c) ***/
+/*** === Random numbers (random-legacy.c) ***/
uint random_u32(void); /** Return a pseudorandom 32-bit number. **/
uint random_max(uint max); /** Return a pseudorandom 32-bit number in range [0,@max). **/
--- /dev/null
+/*
+ * UCW Library -- Unbiased Random Numbers
+ *
+ * (c) 1998--2006 Martin Mares <mj@ucw.cz>
+ *
+ * This software may be freely distributed and used according to the terms
+ * of the GNU Lesser General Public License.
+ */
+
+#include <ucw/lib.h>
+
+#include <stdlib.h>
+
+/* We expect the random generator in libc to give at least 30 bits of randomness */
+COMPILE_ASSERT(RAND_MAX_RANGE_TEST, RAND_MAX >= (1 << 30)-1);
+
+uint
+random_u32(void)
+{
+ return (random() & 0xffff) | ((random() & 0xffff) << 16);
+}
+
+uint
+random_max(uint max)
+{
+ uint r, l;
+
+ ASSERT(max <= (1 << 30));
+ l = (RAND_MAX + 1U) - ((RAND_MAX + 1U) % max);
+ do
+ r = random();
+ while (r >= l);
+ return r % max;
+}
+
+u64
+random_u64(void)
+{
+ return
+ ((u64)(random() & 0xffff) << 48) |
+ ((u64)(random() & 0xffffff) << 24) |
+ (random() & 0xffffff);
+}
+
+u64
+random_max_u64(u64 max)
+{
+ if (max < (1 << 30))
+ return random_max(max);
+
+ u64 r, l, m;
+ m = 0xffffffffffffffff;
+ l = m - (m % max);
+ do
+ r = random_u64();
+ while (r >= l);
+ return r % max;
+}
+++ /dev/null
-/*
- * UCW Library -- Unbiased Random Numbers
- *
- * (c) 1998--2006 Martin Mares <mj@ucw.cz>
- *
- * This software may be freely distributed and used according to the terms
- * of the GNU Lesser General Public License.
- */
-
-#include <ucw/lib.h>
-
-#include <stdlib.h>
-
-/* We expect the random generator in libc to give at least 30 bits of randomness */
-COMPILE_ASSERT(RAND_MAX_RANGE_TEST, RAND_MAX >= (1 << 30)-1);
-
-uint
-random_u32(void)
-{
- return (random() & 0xffff) | ((random() & 0xffff) << 16);
-}
-
-uint
-random_max(uint max)
-{
- uint r, l;
-
- ASSERT(max <= (1 << 30));
- l = (RAND_MAX + 1U) - ((RAND_MAX + 1U) % max);
- do
- r = random();
- while (r >= l);
- return r % max;
-}
-
-u64
-random_u64(void)
-{
- return
- ((u64)(random() & 0xffff) << 48) |
- ((u64)(random() & 0xffffff) << 24) |
- (random() & 0xffffff);
-}
-
-u64
-random_max_u64(u64 max)
-{
- if (max < (1 << 30))
- return random_max(max);
-
- u64 r, l, m;
- m = 0xffffffffffffffff;
- l = m - (m % max);
- do
- r = random_u64();
- while (r >= l);
- return r % max;
-}