1/*	$NetBSD$	*/
2
3/*++
4/* NAME
5/*	doze 3
6/* SUMMARY
7/*	take a nap
8/* SYNOPSIS
9/*	#include <iostuff.h>
10/*
11/*	void	doze(microseconds)
12/*	unsigned microseconds;
13/* DESCRIPTION
14/*	doze() sleeps for the specified number of microseconds. It is
15/*	a simple alternative for systems that lack usleep().
16/* DIAGNOSTICS
17/*	All errors are fatal.
18/* LICENSE
19/* .ad
20/* .fi
21/*	The Secure Mailer license must be distributed with this software.
22/* AUTHOR(S)
23/*	Wietse Venema
24/*	IBM T.J. Watson Research
25/*	P.O. Box 704
26/*	Yorktown Heights, NY 10598, USA
27/*--*/
28
29/* System library. */
30
31#include "sys_defs.h"
32#include <sys/time.h>
33#include <unistd.h>
34#include <errno.h>
35#ifdef USE_SYS_SELECT_H
36#include <sys/select.h>
37#endif
38
39/* Utility library. */
40
41#include <msg.h>
42#include <iostuff.h>
43
44/* doze - sleep a while */
45
46void    doze(unsigned delay)
47{
48    struct timeval tv;
49
50#define MILLION	1000000
51
52    tv.tv_sec = delay / MILLION;
53    tv.tv_usec = delay % MILLION;
54    while (select(0, (fd_set *) 0, (fd_set *) 0, (fd_set *) 0, &tv) < 0)
55	if (errno != EINTR)
56	    msg_fatal("doze: select: %m");
57}
58
59#ifdef TEST
60
61#include <stdlib.h>
62
63int     main(int argc, char **argv)
64{
65    unsigned delay;
66
67    if (argc != 2 || (delay = atol(argv[1])) == 0)
68	msg_fatal("usage: %s microseconds", argv[0]);
69    doze(delay);
70    exit(0);
71}
72
73#endif
74