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