From: Maria Matejka Date: Tue, 12 May 2026 12:54:06 +0000 (+0200) Subject: Fix brandom() to return u32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b277a32001adf2c0c4a140cd0c44303c754a0d52;p=thirdparty%2Fbird.git Fix brandom() to return u32 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 Issue: #312 --- diff --git a/lib/birdlib.h b/lib/birdlib.h index 6481c905b..807efa22b 100644 --- a/lib/birdlib.h +++ b/lib/birdlib.h @@ -215,8 +215,8 @@ asm( /* 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); diff --git a/sysdep/unix/random.c b/sysdep/unix/random.c index d0f2d49c7..481b69f65 100644 --- a/sysdep/unix/random.c +++ b/sysdep/unix/random.c @@ -22,20 +22,10 @@ _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); }