diff options
Diffstat (limited to 'usr/src/lib/libbc/libc/gen/common/usleep.c')
| -rw-r--r-- | usr/src/lib/libbc/libc/gen/common/usleep.c | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/usr/src/lib/libbc/libc/gen/common/usleep.c b/usr/src/lib/libbc/libc/gen/common/usleep.c deleted file mode 100644 index 65b5071b36..0000000000 --- a/usr/src/lib/libbc/libc/gen/common/usleep.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 1996 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -/* - * Copyright (c) 1985 Regents of the University of California. - * All rights reserved. The Berkeley software License Agreement - * specifies the terms and conditions for redistribution. - */ - -#include <unistd.h> -#include <sys/time.h> -#include <signal.h> - -#define USPS 1000000 /* number of microseconds in a second */ -#define TICK (USPS / _sysconf(_SC_CLK_TCK)) - -#define setvec(vec, a) \ - vec.sv_handler = a; vec.sv_mask = vec.sv_onstack = 0 - -static int ringring; - -static void -sleepx(void) -{ - - ringring = 1; -} - -void -usleep(unsigned n) -{ - int omask; - struct itimerval itv, oitv; - struct itimerval *itp = &itv; - struct sigvec vec, ovec; - - if (n == 0) - return; - timerclear(&itp->it_interval); - timerclear(&itp->it_value); - if (setitimer(ITIMER_REAL, itp, &oitv) < 0) - return; - itp->it_value.tv_sec = n / USPS; - itp->it_value.tv_usec = n % USPS; - if (timerisset(&oitv.it_value)) { - if (timercmp(&oitv.it_value, &itp->it_value, >)) { - oitv.it_value.tv_sec -= itp->it_value.tv_sec; - oitv.it_value.tv_usec -= itp->it_value.tv_usec; - if (oitv.it_value.tv_usec < 0) { - oitv.it_value.tv_usec += USPS; - oitv.it_value.tv_sec--; - } - } else { - itp->it_value = oitv.it_value; - oitv.it_value.tv_sec = 0; - oitv.it_value.tv_usec = 2 * TICK; - } - } - setvec(vec, sleepx); - (void) sigvec(SIGALRM, &vec, &ovec); - omask = sigblock(sigmask(SIGALRM)); - ringring = 0; - (void) setitimer(ITIMER_REAL, itp, (struct itimerval *)0); - while (!ringring) - sigpause(omask &~ sigmask(SIGALRM)); - (void) sigvec(SIGALRM, &ovec, (struct sigvec *)0); - (void) sigsetmask(omask); - (void) setitimer(ITIMER_REAL, &oitv, (struct itimerval *)0); -} |
