]> git.cameronkatri.com Git - bsdgames-darwin.git/commitdiff
backout previous (arc4random), per request from sommerfeld
authoritojun <itojun@NetBSD.org>
Mon, 1 Jul 2002 20:55:30 +0000 (20:55 +0000)
committeritojun <itojun@NetBSD.org>
Mon, 1 Jul 2002 20:55:30 +0000 (20:55 +0000)
fortune/fortune/fortune.c

index 60bbe77c095810ff8113b4e7d1eca7408a39b8eb..85935c1c746652a4a4147d951b5cb705d82c44be 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: fortune.c,v 1.35 2002/07/01 14:51:52 itojun Exp $      */
+/*     $NetBSD: fortune.c,v 1.36 2002/07/01 20:55:30 itojun Exp $      */
 
 /*-
  * Copyright (c) 1986, 1993
@@ -46,7 +46,7 @@ __COPYRIGHT("@(#) Copyright (c) 1986, 1993\n\
 #if 0
 static char sccsid[] = "@(#)fortune.c  8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: fortune.c,v 1.35 2002/07/01 14:51:52 itojun Exp $");
+__RCSID("$NetBSD: fortune.c,v 1.36 2002/07/01 20:55:30 itojun Exp $");
 #endif
 #endif /* not lint */
 
@@ -220,6 +220,7 @@ main(ac, av)
        int     ac;
        char    *av[];
 {
+       struct timeval tv;
 #ifdef OK_TO_WRITE_DISK
        int     fd;
 #endif /* OK_TO_WRITE_DISK */
@@ -232,6 +233,12 @@ main(ac, 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) ||
@@ -974,7 +981,7 @@ get_fort()
        if (File_list->next == NULL || File_list->percent == NO_PROB)
                fp = File_list;
        else {
-               choice = arc4random() % 100;
+               choice = random() % 100;
                DPRINTF(1, (stderr, "choice = %d\n", choice));
                for (fp = File_list; fp->percent != NO_PROB; fp = fp->next)
                        if (choice < fp->percent)
@@ -994,7 +1001,7 @@ get_fort()
        else {
                if (fp->next != NULL) {
                        sum_noprobs(fp);
-                       choice = arc4random() % Noprob_tbl.str_numstr;
+                       choice = random() % 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) {
@@ -1036,7 +1043,7 @@ pick_child(parent)
        int              choice;
 
        if (Equal_probs) {
-               choice = arc4random() % parent->num_children;
+               choice = random() % parent->num_children;
                DPRINTF(1, (stderr, "    choice = %d (of %d)\n",
                            choice, parent->num_children));
                for (fp = parent->child; choice--; fp = fp->next)
@@ -1046,7 +1053,7 @@ pick_child(parent)
        }
        else {
                get_tbl(parent);
-               choice = arc4random() % parent->tbl.str_numstr;
+               choice = random() % 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;
@@ -1131,13 +1138,13 @@ get_pos(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 = arc4random() % fp->tbl.str_numstr;
+                       fp->pos = random() % 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 = arc4random() % fp->tbl.str_numstr;
+               fp->pos = random() % fp->tbl.str_numstr;
 #endif /* OK_TO_WRITE_DISK */
        }
        if ((u_int64_t)++(fp->pos) >= fp->tbl.str_numstr)