-/* $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
#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 */
int ac;
char *av[];
{
+ struct timeval tv;
#ifdef OK_TO_WRITE_DISK
int fd;
#endif /* OK_TO_WRITE_DISK */
#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) ||
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)
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) {
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)
}
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;
#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)