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