xref: /netbsd-src/external/bsd/libfido2/dist/openbsd-compat/time.h (revision 95dbdf3206203c8af99d6fed1ad2822e093852fa)
11fc1e710Schristos /*
21fc1e710Schristos  * Public domain
31fc1e710Schristos  * sys/time.h compatibility shim
41fc1e710Schristos  */
51fc1e710Schristos 
61fc1e710Schristos #if defined(_MSC_VER) && (_MSC_VER >= 1900)
71fc1e710Schristos #include <../ucrt/time.h>
81fc1e710Schristos #elif defined(_MSC_VER) && (_MSC_VER < 1900)
91fc1e710Schristos #include <../include/time.h>
101fc1e710Schristos #else
111fc1e710Schristos #include <time.h>
121fc1e710Schristos #endif
131fc1e710Schristos 
141fc1e710Schristos #ifndef _COMPAT_TIME_H
151fc1e710Schristos #define _COMPAT_TIME_H
161fc1e710Schristos 
171fc1e710Schristos #ifndef CLOCK_MONOTONIC
181fc1e710Schristos #define CLOCK_MONOTONIC CLOCK_REALTIME
191fc1e710Schristos #endif
201fc1e710Schristos 
211fc1e710Schristos #ifndef CLOCK_REALTIME
221fc1e710Schristos #define CLOCK_REALTIME 0
231fc1e710Schristos #endif
241fc1e710Schristos 
251fc1e710Schristos #ifndef HAVE_CLOCK_GETTIME
261fc1e710Schristos typedef int clockid_t;
271fc1e710Schristos int clock_gettime(clockid_t, struct timespec *);
281fc1e710Schristos #endif
291fc1e710Schristos 
301fc1e710Schristos #ifdef HAVE_TIMESPECSUB
311fc1e710Schristos #include <sys/time.h>
321fc1e710Schristos #endif
331fc1e710Schristos 
341fc1e710Schristos #ifndef HAVE_TIMESPECSUB
35*95dbdf32Schristos #define	timespecadd(tsp, usp, vsp)					\
36*95dbdf32Schristos 	do {								\
37*95dbdf32Schristos 		(vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec;		\
38*95dbdf32Schristos 		(vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec;	\
39*95dbdf32Schristos 		if ((vsp)->tv_nsec >= 1000000000L) {			\
40*95dbdf32Schristos 			(vsp)->tv_sec++;				\
41*95dbdf32Schristos 			(vsp)->tv_nsec -= 1000000000L;			\
42*95dbdf32Schristos 		}							\
43*95dbdf32Schristos 	} while (0)
44*95dbdf32Schristos 
451fc1e710Schristos #define timespecsub(tsp, usp, vsp)					\
461fc1e710Schristos 	do {								\
471fc1e710Schristos 		(vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec;		\
481fc1e710Schristos 		(vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec;	\
491fc1e710Schristos 		if ((vsp)->tv_nsec < 0) {				\
501fc1e710Schristos 			(vsp)->tv_sec--;				\
511fc1e710Schristos 			(vsp)->tv_nsec += 1000000000L;			\
521fc1e710Schristos 		}							\
531fc1e710Schristos 	} while (0)
54*95dbdf32Schristos 
55*95dbdf32Schristos #define	timespeccmp(tsp, usp, cmp)					\
56*95dbdf32Schristos 	(((tsp)->tv_sec == (usp)->tv_sec) ?				\
57*95dbdf32Schristos 	    ((tsp)->tv_nsec cmp (usp)->tv_nsec) :			\
58*95dbdf32Schristos 	    ((tsp)->tv_sec cmp (usp)->tv_sec))
591fc1e710Schristos #endif
601fc1e710Schristos 
611fc1e710Schristos #endif /* _COMPAT_TIME_H */
62