#include <sys_defs.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#ifndef RAND_MAX
#define RAND_MAX 0x7fffffff
#endif
#include <msg.h>
#include <myrand.h>
#include <iostuff.h>
void rand_sleep(unsigned delay, unsigned variation)
{
char *myname = "rand_sleep";
unsigned usec;
if (delay == 0)
msg_panic("%s: bad delay %d", myname, delay);
if (variation > delay)
msg_panic("%s: bad variation %d", myname, variation);
usec = (delay - variation / 2) + variation * (double) myrand() / RAND_MAX;
doze(usec);
}
#ifdef TEST
#include <msg_vstream.h>
int main(int argc, char **argv)
{
int delay;
int variation;
msg_vstream_init(argv[0], VSTREAM_ERR);
if (argc != 3)
msg_fatal("usage: %s delay variation", argv[0]);
if ((delay = atoi(argv[1])) <= 0)
msg_fatal("bad delay: %s", argv[1]);
if ((variation = atoi(argv[2])) < 0)
msg_fatal("bad variation: %s", argv[2]);
rand_sleep(delay * 1000000, variation * 1000000);
exit(0);
}
#endif