> I'll look into hack tonight when I have more time.

Honestly, I would prefer to leave hack as it is right now since it will
take some work to repair it anyway.  I would not want to add another
layer of (potential) complications.

> > > Index: lib/libc/stdlib/rand.c
> > > ===================================================================

> It's safe but takes a bit of thinking. I first had it as
>               return (arc4random() & RAND_MAX);
> which to me is more obviously correct, but since it's safe as is. I have
> no strong opinion on this.

I have a mild preference for this version, and I think this version
would be preferable from the point of view of uniformity of usage,
especially after your patches have gone in.

> > > Index: usr.bin/awk/run.c
> > > ===================================================================
> > 
> > Unsure about this one.  I think deterministic sequences might be desired
> > in some circumstances (this one is deterministic when a seed was given).
> 
> theo@ also pointed out that awk can be deterministic. Since RAND_MAX is
> 1 below a power of 2, & is safe. How about
> 
> Index: run.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/awk/run.c,v
> retrieving revision 1.39
> diff -u -p -r1.39 run.c
> --- run.c     5 Sep 2015 22:07:10 -0000       1.39
> +++ run.c     7 Dec 2015 19:28:31 -0000
> @@ -1581,7 +1581,7 @@ Cell *bltin(Node **a, int n)    /* builtin 
>               u = (Awkfloat) system(getsval(x)) / 256;   /* 256 is unix-dep */
>               break;
>       case FRAND:
> -             u = (Awkfloat) (random() % RAND_MAX) / RAND_MAX;
> +             u = (Awkfloat) (random() & RAND_MAX) / ((u_int)RAND_MAX + 1);
>               break;
>       case FSRAND:
>               if (isrec(x)) {         /* no argument provided */
> 

ok from me on this one.

Reply via email to