xref: /freebsd/lib/libnetbsd/sys/time.h (revision 2a6c2d9c38dc421025b6c18cac68fe9965c574c0)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2026 Enji Cooper
5  */
6 
7 #ifndef _LIBNETBSD_SYS_TIME_H_
8 #define _LIBNETBSD_SYS_TIME_H_
9 
10 #include_next <sys/time.h>
11 
12 #define timercmp(tvp, uvp, cmp)						\
13 	(((tvp)->tv_sec == (uvp)->tv_sec) ?				\
14 	    ((tvp)->tv_usec cmp (uvp)->tv_usec) :			\
15 	    ((tvp)->tv_sec cmp (uvp)->tv_sec))
16 #define timespecadd(tsp, usp, vsp)					\
17 	do {								\
18 		(vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec;		\
19 		(vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec;	\
20 		if ((vsp)->tv_nsec >= 1000000000L) {			\
21 			(vsp)->tv_sec++;				\
22 			(vsp)->tv_nsec -= 1000000000L;			\
23 		}							\
24 	} while (0)
25 #define timespecsub(tsp, usp, vsp)					\
26 	do {								\
27 		(vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec;		\
28 		(vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec;	\
29 		if ((vsp)->tv_nsec < 0) {				\
30 			(vsp)->tv_sec--;				\
31 			(vsp)->tv_nsec += 1000000000L;			\
32 		}							\
33 	} while (0)
34 
35 #endif
36