diff options
author | pfg <pfg@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f> | 2014-09-19 18:24:02 +0000 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2019-07-16 22:19:56 +0300 |
commit | c70b9fe8823e8f21628725e634d5db1a6e3948d0 (patch) | |
tree | a3bab7b7fe70b62dc0a979ba43e48958cc27a43e /run.c | |
parent | 650d868ec4bbb566255702fef37480438163d3ae (diff) | |
download | one-true-awk-c70b9fe8823e8f21628725e634d5db1a6e3948d0.tar.gz |
awk: Use random(3) instead of rand(3)
While none of them is considered even near to cryptographic
level, random(3) is a better random generator than rand(3).
Use random(3) for awk as is done in other systems.
Thanks to Chenguang Li for discussing this in the lists
and submitting the patch upstream.
PR: 193147
MFC after: 5 weeks
git-svn-id: svn+ssh://svn.freebsd.org/base/head@271879 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
Diffstat (limited to 'run.c')
-rw-r--r-- | run.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -1579,8 +1579,10 @@ Cell *bltin(Node **a, int n) /* builtin functions. a[0] is type, a[1] is arg lis } break; case FRAND: - /* in principle, rand() returns something in 0..RAND_MAX */ - u = (Awkfloat) (rand() % RAND_MAX) / RAND_MAX; + /* random() returns numbers in [0..2^31-1] + * in order to get a number in [0, 1), divide it by 2^31 + */ + u = (Awkfloat) random() / (0x7fffffffL + 0x1UL); break; case FSRAND: if (isrec(x)) /* no argument provided */ @@ -1588,7 +1590,7 @@ Cell *bltin(Node **a, int n) /* builtin functions. a[0] is type, a[1] is arg lis else u = getfval(x); tmp = u; - srand((unsigned int) u); + srandom((unsigned long) u); u = srand_seed; srand_seed = tmp; break; |