From 71a4bdd386813a0bd96c205cf36b3faf3b1ea0e1 Mon Sep 17 00:00:00 2001 From: nia Date: Tue, 21 Jul 2020 03:05:40 +0000 Subject: fortune: arc4random_uniform for better uniform values than random() % ... --- fortune/fortune/fortune.c | 23 ++++++++--------------- fortune/strfile/strfile.c | 8 +++----- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/fortune/fortune/fortune.c b/fortune/fortune/fortune.c index d5dd74f4..05783951 100644 --- a/fortune/fortune/fortune.c +++ b/fortune/fortune/fortune.c @@ -1,4 +1,4 @@ -/* $NetBSD: fortune.c,v 1.64 2012/06/19 05:46:08 dholland Exp $ */ +/* $NetBSD: fortune.c,v 1.65 2020/07/21 03:05:40 nia Exp $ */ /*- * Copyright (c) 1986, 1993 @@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1986, 1993\ #if 0 static char sccsid[] = "@(#)fortune.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: fortune.c,v 1.64 2012/06/19 05:46:08 dholland Exp $"); +__RCSID("$NetBSD: fortune.c,v 1.65 2020/07/21 03:05:40 nia Exp $"); #endif #endif /* not lint */ @@ -190,7 +190,6 @@ static size_t maxlen_in_list(FILEDESC *); int main(int ac, char *av[]) { - struct timeval tv; #ifdef OK_TO_WRITE_DISK int fd; #endif /* OK_TO_WRITE_DISK */ @@ -203,12 +202,6 @@ main(int ac, char *av[]) #endif init_prob(); - if (gettimeofday(&tv, NULL) != 0) - err(1, "gettimeofday()"); - srandom(((unsigned long)tv.tv_sec) * - ((unsigned long)tv.tv_usec+1) * - ((unsigned long)getpid()+1) * - ((unsigned long)getppid()+1)); do { get_fort(); } while ((Short_only && fortlen() > SLEN) || @@ -933,7 +926,7 @@ get_fort(void) if (File_list->next == NULL || File_list->percent == NO_PROB) fp = File_list; else { - choice = random() % 100; + choice = arc4random_uniform(100); DPRINTF(1, (stderr, "choice = %d\n", choice)); for (fp = File_list; fp->percent != NO_PROB; fp = fp->next) if (choice < fp->percent) @@ -953,7 +946,7 @@ get_fort(void) else { if (fp->next != NULL) { sum_noprobs(fp); - choice = random() % Noprob_tbl.str_numstr; + choice = arc4random_uniform(Noprob_tbl.str_numstr); DPRINTF(1, (stderr, "choice = %d (of %d) \n", choice, Noprob_tbl.str_numstr)); while ((u_int32_t)choice >= fp->tbl.str_numstr) { @@ -994,7 +987,7 @@ pick_child(FILEDESC *parent) int choice; if (Equal_probs) { - choice = random() % parent->num_children; + choice = arc4random_uniform(parent->num_children); DPRINTF(1, (stderr, " choice = %d (of %d)\n", choice, parent->num_children)); for (fp = parent->child; choice--; fp = fp->next) @@ -1004,7 +997,7 @@ pick_child(FILEDESC *parent) } else { get_tbl(parent); - choice = random() % parent->tbl.str_numstr; + choice = arc4random_uniform(parent->tbl.str_numstr); DPRINTF(1, (stderr, " choice = %d (of %d)\n", choice, parent->tbl.str_numstr)); for (fp = parent->child; (u_int32_t)choice >= fp->tbl.str_numstr; @@ -1084,13 +1077,13 @@ get_pos(FILEDESC *fp) #ifdef OK_TO_WRITE_DISK if ((fd = open(fp->posfile, O_RDONLY)) < 0 || read(fd, &fp->pos, sizeof fp->pos) != sizeof fp->pos) - fp->pos = random() % fp->tbl.str_numstr; + fp->pos = arc4random_uniform(fp->tbl.str_numstr); else if (fp->pos >= fp->tbl.str_numstr) fp->pos %= fp->tbl.str_numstr; if (fd >= 0) (void) close(fd); #else - fp->pos = random() % fp->tbl.str_numstr; + fp->pos = arc4random_uniform(fp->tbl.str_numstr); #endif /* OK_TO_WRITE_DISK */ } if ((u_int64_t)++(fp->pos) >= fp->tbl.str_numstr) diff --git a/fortune/strfile/strfile.c b/fortune/strfile/strfile.c index 891c77dd..29298955 100644 --- a/fortune/strfile/strfile.c +++ b/fortune/strfile/strfile.c @@ -1,4 +1,4 @@ -/* $NetBSD: strfile.c,v 1.40 2020/04/30 12:32:26 christos Exp $ */ +/* $NetBSD: strfile.c,v 1.41 2020/07/21 03:05:40 nia Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -47,7 +47,7 @@ __COPYRIGHT("@(#) Copyright (c) 1989, 1993\ #if 0 static char sccsid[] = "@(#)strfile.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: strfile.c,v 1.40 2020/04/30 12:32:26 christos Exp $"); +__RCSID("$NetBSD: strfile.c,v 1.41 2020/07/21 03:05:40 nia Exp $"); #endif #endif /* not lint */ #endif /* __NetBSD__ */ @@ -438,8 +438,6 @@ randomize(void) off_t tmp; off_t *sp; - srandom((int)(time(NULL) + getpid())); - Tbl.str_flags |= STR_RANDOM; cnt = Tbl.str_numstr; @@ -448,7 +446,7 @@ randomize(void) */ for (sp = Seekpts; cnt > 0; cnt--, sp++) { - i = random() % cnt; + i = arc4random_uniform(cnt); tmp = sp[0]; sp[0] = sp[i]; sp[i] = tmp; -- cgit v1.2.3-56-ge451