usr/src/lib/libc/port/gen/ualarm.c
author raf
Mon, 10 Apr 2006 12:27:38 -0700
changeset 1778 6357a59054f7
parent 0 68f95e015346
child 6812 febeba71273d
permissions -rw-r--r--
6404383 select() behaviour changed in Solaris 10, breaking binary compatibility
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
/*	  All Rights Reserved  	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * Copyright (c) 1985 Regents of the University of California.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * All rights reserved.  The Berkeley software License Agreement
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * specifies the terms and conditions for redistribution.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
#include "synonyms.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
#include <sys/time.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
#include <unistd.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
#define	USPS	1000000		/* # of microseconds in a second */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
 * Generate a SIGALRM signal in ``usecs'' microseconds.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
 * If ``reload'' is non-zero, keep generating SIGALRM
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
 * every ``reload'' microseconds after the first signal.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
useconds_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
ualarm(useconds_t usecs, useconds_t reload)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
	struct itimerval new, old;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
	new.it_interval.tv_usec = reload % USPS;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
	new.it_interval.tv_sec = reload / USPS;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
	new.it_value.tv_usec = usecs % USPS;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
	new.it_value.tv_sec = usecs / USPS;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
	if (setitimer(ITIMER_REAL, &new, &old) != 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
		return (0);	/* no errors are defined */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
	return (old.it_value.tv_sec * USPS + old.it_value.tv_usec);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
}