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