diff options
Diffstat (limited to 'src/lib/libc/stdlib/drand48.c')
| -rw-r--r-- | src/lib/libc/stdlib/drand48.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/lib/libc/stdlib/drand48.c b/src/lib/libc/stdlib/drand48.c index b6c046c831..bbeedf8a8a 100644 --- a/src/lib/libc/stdlib/drand48.c +++ b/src/lib/libc/stdlib/drand48.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: drand48.c,v 1.3 2005/08/08 08:05:36 espie Exp $ */ | 1 | /* $OpenBSD: drand48.c,v 1.4 2014/12/08 21:45:20 deraadt Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 1993 Martin Birgmeier | 3 | * Copyright (c) 1993 Martin Birgmeier |
| 4 | * All rights reserved. | 4 | * All rights reserved. |
| @@ -19,5 +19,13 @@ extern unsigned short __rand48_seed[3]; | |||
| 19 | double | 19 | double |
| 20 | drand48(void) | 20 | drand48(void) |
| 21 | { | 21 | { |
| 22 | if (__rand48_deterministic == 0) { | ||
| 23 | short rseed[3]; | ||
| 24 | |||
| 25 | arc4random_buf(rseed, sizeof rseed); | ||
| 26 | return ldexp((double) rseed[0], -48) + | ||
| 27 | ldexp((double) rseed[1], -32) + | ||
| 28 | ldexp((double) rseed[2], -16); | ||
| 29 | } | ||
| 22 | return erand48(__rand48_seed); | 30 | return erand48(__rand48_seed); |
| 23 | } | 31 | } |
