Author: pfg
Date: Fri Oct 10 23:19:34 2014
New Revision: 272919
URL: https://svnweb.freebsd.org/changeset/base/272919

Log:
  MFC   r271879:
  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.
  
  PR:           193147

Modified:
  stable/9/contrib/one-true-awk/awk.1
  stable/9/contrib/one-true-awk/main.c
  stable/9/contrib/one-true-awk/run.c
Directory Properties:
  stable/9/contrib/one-true-awk/   (props changed)

Modified: stable/9/contrib/one-true-awk/awk.1
==============================================================================
--- stable/9/contrib/one-true-awk/awk.1 Fri Oct 10 23:18:44 2014        
(r272918)
+++ stable/9/contrib/one-true-awk/awk.1 Fri Oct 10 23:19:34 2014        
(r272919)
@@ -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: stable/9/contrib/one-true-awk/main.c
==============================================================================
--- stable/9/contrib/one-true-awk/main.c        Fri Oct 10 23:18:44 2014        
(r272918)
+++ stable/9/contrib/one-true-awk/main.c        Fri Oct 10 23:19:34 2014        
(r272919)
@@ -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: stable/9/contrib/one-true-awk/run.c
==============================================================================
--- stable/9/contrib/one-true-awk/run.c Fri Oct 10 23:18:44 2014        
(r272918)
+++ stable/9/contrib/one-true-awk/run.c Fri Oct 10 23:19:34 2014        
(r272919)
@@ -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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to