1 /***********************************************************************
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
21 ***********************************************************************/
27 #include "FEATURE/tvlib"
32 # include <sys/select.h>
34 # include <sys/socket.h>
38 # if _lib_poll_notimer
50 * non-zero exit if sleep did not complete
51 * with remaining time in rv
55 tvsleep(register const Tv_t
* tv
, register Tv_t
* rv
)
64 stv
.tv_sec
= tv
->tv_sec
;
65 stv
.tv_nsec
= tv
->tv_nsec
;
66 if ((r
= nanosleep(&stv
, &srv
)) && rv
)
68 rv
->tv_sec
= srv
.tv_sec
;
69 rv
->tv_nsec
= srv
.tv_nsec
;
79 stv
.tv_sec
= tv
->tv_sec
;
80 stv
.tv_usec
= tv
->tv_nsec
/ 1000;
81 if (select(0, NiL
, NiL
, NiL
, &stv
) < 0)
89 rv
->tv_sec
= stv
.tv_sec
;
90 rv
->tv_nsec
= stv
.tv_usec
* 1000;
96 unsigned int s
= tv
->tv_sec
;
97 uint32_t n
= tv
->tv_nsec
;
104 if (t
= (n
+ 999L) / 1000L)
118 if ((t
= (n
+ 999999L) / 1000000L) > 0)
129 if ((s
+= (n
+ 999999999L) / 1000000000L) && (s
= sleep(s
)))