xref: /haiku/headers/compatibility/bsd/sys/time.h (revision 9f3bdf3d039430b5172c424def20ce5d9f7367d4)
1 /*
2  * Copyright 2016-2017 Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _BSD_SYS_TIME_H_
6 #define _BSD_SYS_TIME_H_
7 
8 
9 #include_next <sys/time.h>
10 #include <features.h>
11 
12 
13 #ifdef _DEFAULT_SOURCE
14 
15 
16 /* BSDish macros operating on timespec structs */
17 #define	timespecadd(a, b, res)							\
18 	do {												\
19 		(res)->tv_sec = (a)->tv_sec + (b)->tv_sec;		\
20 		(res)->tv_nsec = (a)->tv_nsec + (b)->tv_nsec;	\
21 		if ((res)->tv_nsec >= 1000000000L) {			\
22 			(res)->tv_nsec -= 1000000000L;				\
23 			(res)->tv_sec++;							\
24 		}												\
25 	} while (0)
26 #define	timespecsub(a, b, res)							\
27 	do {												\
28 		(res)->tv_sec = (a)->tv_sec - (b)->tv_sec;		\
29 		(res)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec;	\
30 		if ((res)->tv_nsec < 0) {						\
31 			(res)->tv_nsec += 1000000000L;				\
32 			(res)->tv_sec--;							\
33 		}												\
34 	} while (0)
35 #define	timespecclear(a)	((a)->tv_sec = (a)->tv_nsec = 0)
36 #define	timespecisset(a)	((a)->tv_sec != 0 || (a)->tv_nsec != 0)
37 #define	timespeccmp(a, b, cmp)	(((a)->tv_sec == (b)->tv_sec) \
38 	? ((a)->tv_nsec cmp (b)->tv_nsec) : ((a)->tv_sec cmp (b)->tv_sec))
39 #define	timespecvalid_interval(a)	((a)->tv_sec >= 0	\
40 	&& (a)->tv_nsec >= 0 && (&)->tv_nsec < 1000000000L)
41 
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 int  lutimes(const char *path, const struct timeval times[2]);
48 
49 #ifdef __cplusplus
50 }
51 #endif
52 
53 
54 #endif
55 
56 
57 #endif  /* _BSD_SYS_TIME_H_ */
58