Date: Fri, 19 Sep 2014 18:24:02 +0000 (UTC) From: "Pedro F. Giffuni" <pfg@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r271879 - head/contrib/one-true-awk Message-ID: <201409191824.s8JIO2o9065041@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pfg Date: Fri Sep 19 18:24:02 2014 New Revision: 271879 URL: http://svnweb.freebsd.org/changeset/base/271879 Log: 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 Modified: head/contrib/one-true-awk/awk.1 head/contrib/one-true-awk/main.c head/contrib/one-true-awk/run.c Modified: head/contrib/one-true-awk/awk.1 ============================================================================== --- head/contrib/one-true-awk/awk.1 Fri Sep 19 18:13:56 2014 (r271878) +++ head/contrib/one-true-awk/awk.1 Fri Sep 19 18:24:02 2014 (r271879) @@ -208,7 +208,7 @@ or of if no argument. .TP .B rand -random number on (0,1) +random number on [0,1) .TP .B srand sets seed for Modified: head/contrib/one-true-awk/main.c ============================================================================== --- head/contrib/one-true-awk/main.c Fri Sep 19 18:13:56 2014 (r271878) +++ head/contrib/one-true-awk/main.c Fri Sep 19 18:24:02 2014 (r271879) @@ -74,7 +74,7 @@ int main(int argc, char *argv[]) signal(SIGFPE, fpecatch); srand_seed = 1; - srand(srand_seed); + srandom((unsigned long) srand_seed); yyin = NULL; symtab = makesymtab(NSYMTAB/NSYMTAB); Modified: head/contrib/one-true-awk/run.c ============================================================================== --- head/contrib/one-true-awk/run.c Fri Sep 19 18:13:56 2014 (r271878) +++ head/contrib/one-true-awk/run.c Fri Sep 19 18:24:02 2014 (r271879) @@ -1521,8 +1521,10 @@ Cell *bltin(Node **a, int n) /* builtin u = (Awkfloat) system(getsval(x)) / 256; /* 256 is unix-dep */ 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 */ @@ -1530,7 +1532,7 @@ Cell *bltin(Node **a, int n) /* builtin else u = getfval(x); tmp = u; - srand((unsigned int) u); + srandom((unsigned long) u); u = srand_seed; srand_seed = tmp; break;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201409191824.s8JIO2o9065041>