1/*	$NetBSD$	*/
2
3/*++
4/* NAME
5/*	myrand 3
6/* SUMMARY
7/*	rand wrapper
8/* SYNOPSIS
9/*	#include <myrand.h>
10/*
11/*	void	mysrand(seed)
12/*	int	seed;
13/*
14/*	int	myrand()
15/* DESCRIPTION
16/*	This module implements a wrapper for the portable, pseudo-random
17/*	number generator. The wrapper adds automatic initialization.
18/*
19/*	mysrand() performs initialization. This call may be skipped.
20/*
21/*	myrand() returns a pseudo-random number in the range [0, RAND_MAX].
22/*	If mysrand() was not called, it is invoked with the process ID
23/*	ex-or-ed with the time of day in seconds.
24/* LICENSE
25/* .ad
26/* .fi
27/*	The Secure Mailer license must be distributed with this software.
28/* WARNING
29/*	Do not use this code for generating unpredictable numbers.
30/* AUTHOR(S)
31/*	Wietse Venema
32/*	IBM T.J. Watson Research
33/*	P.O. Box 704
34/*	Yorktown Heights, NY 10598, USA
35/*--*/
36
37/* System library. */
38
39#include <sys_defs.h>
40#include <stdlib.h>
41#include <unistd.h>
42#include <time.h>
43
44/* Utility library. */
45
46#include <myrand.h>
47
48static int myrand_initdone = 0;
49
50/* mysrand - initialize */
51
52void    mysrand(int seed)
53{
54    srand(seed);
55    myrand_initdone = 1;
56}
57
58/* myrand - pseudo-random number */
59
60int     myrand(void)
61{
62    if (myrand_initdone == 0)
63	mysrand(getpid() ^ time((time_t *) 0));
64    return (rand());
65}
66