xref: /csrg-svn/lib/libc/gen/ualarm.c (revision 61111)
122123Smckusick /*
2*61111Sbostic  * Copyright (c) 1985, 1993
3*61111Sbostic  *	The Regents of the University of California.  All rights reserved.
435306Sbostic  *
542627Sbostic  * %sccs.include.redist.c%
622123Smckusick  */
718339Sserge 
826609Sdonn #if defined(LIBC_SCCS) && !defined(lint)
9*61111Sbostic static char sccsid[] = "@(#)ualarm.c	8.1 (Berkeley) 06/04/93";
1035306Sbostic #endif /* LIBC_SCCS and not lint */
1122123Smckusick 
1218339Sserge #include <sys/time.h>
1346597Sdonn #include <unistd.h>
1418339Sserge 
1518339Sserge #define	USPS	1000000		/* # of microseconds in a second */
1618339Sserge 
1718339Sserge /*
1818339Sserge  * Generate a SIGALRM signal in ``usecs'' microseconds.
1918339Sserge  * If ``reload'' is non-zero, keep generating SIGALRM
2018339Sserge  * every ``reload'' microseconds after the first signal.
2118339Sserge  */
2218339Sserge unsigned
ualarm(usecs,reload)2318339Sserge ualarm(usecs, reload)
2418339Sserge 	register unsigned usecs;
2518339Sserge 	register unsigned reload;
2618339Sserge {
2718339Sserge 	struct itimerval new, old;
2818339Sserge 
2918339Sserge 	new.it_interval.tv_usec = reload % USPS;
3018339Sserge 	new.it_interval.tv_sec = reload / USPS;
3118339Sserge 
3218339Sserge 	new.it_value.tv_usec = usecs % USPS;
3318339Sserge 	new.it_value.tv_sec = usecs / USPS;
3418339Sserge 
3518339Sserge 	if (setitimer(ITIMER_REAL, &new, &old) == 0)
3618339Sserge 		return (old.it_value.tv_sec * USPS + old.it_value.tv_usec);
3718339Sserge 	/* else */
3818339Sserge 		return (-1);
3918339Sserge }
40