summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdlib/rand.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/stdlib/rand.c')
-rw-r--r--lib/libc/stdlib/rand.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/libc/stdlib/rand.c b/lib/libc/stdlib/rand.c
index 6860dd4f712..618559fd9ce 100644
--- a/lib/libc/stdlib/rand.c
+++ b/lib/libc/stdlib/rand.c
@@ -30,6 +30,7 @@
#include <sys/types.h>
#include <stdlib.h>
+static int rand_deterministic;
static u_int next = 1;
int
@@ -47,6 +48,8 @@ __warn_references(rand_r,
int
rand(void)
{
+ if (rand_deterministic)
+ return (arc4random() % ((u_int)RAND_MAX + 1));
return (rand_r(&next));
}
@@ -58,10 +61,12 @@ __warn_references(rand,
void
srand(u_int seed)
{
- next = seed;
+ rand_deterministic = 0;
}
-#if defined(APIWARN)
-__warn_references(srand,
- "warning: srand() seed choices are invariably poor");
-#endif
+void
+srand_deterministic(u_int seed)
+{
+ rand_deterministic = 1;
+ next = seed;
+}