I missed that random() returns only positive results (31 bits), while
jrand() returns 32 bits but half negative. Rectifying that to return
always unsigned 32 bits.
Reported-By: Ondrej Zajicek <santiago@crfreenet.org>
Issue: #312
/* Pseudorandom numbers */
-long brandom(void);
-u32 random_u32(void);
+u32 brandom(void);
+#define random_u32 brandom
void random_init(void);
void random_init_thread(void);
void random_bytes(void *buf, size_t size);
_Thread_local unsigned short random_state[3];
-long
-brandom(void)
-{
- return jrand48(random_state);
-}
-
u32
-random_u32(void)
+brandom(void)
{
- long int rand_low, rand_high;
-
- rand_low = brandom();
- rand_high = brandom();
- return (rand_low & 0xffff) | ((rand_high & 0xffff) << 16);
+ return (u32) jrand48(random_state);
}