1/* 2 * Public domain 3 * sys/time.h compatibility shim 4 */ 5 6#if defined(_MSC_VER) && (_MSC_VER >= 1900) 7#include <../ucrt/time.h> 8#elif defined(_MSC_VER) && (_MSC_VER < 1900) 9#include <../include/time.h> 10#else 11#include <time.h> 12#endif 13 14#ifndef _COMPAT_TIME_H 15#define _COMPAT_TIME_H 16 17#ifndef CLOCK_MONOTONIC 18#define CLOCK_MONOTONIC CLOCK_REALTIME 19#endif 20 21#ifndef CLOCK_REALTIME 22#define CLOCK_REALTIME 0 23#endif 24 25#ifndef HAVE_CLOCK_GETTIME 26typedef int clockid_t; 27int clock_gettime(clockid_t, struct timespec *); 28#endif 29 30#ifdef HAVE_TIMESPECSUB 31#include <sys/time.h> 32#endif 33 34#ifndef HAVE_TIMESPECSUB 35#define timespecadd(tsp, usp, vsp) \ 36 do { \ 37 (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \ 38 (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \ 39 if ((vsp)->tv_nsec >= 1000000000L) { \ 40 (vsp)->tv_sec++; \ 41 (vsp)->tv_nsec -= 1000000000L; \ 42 } \ 43 } while (0) 44 45#define timespecsub(tsp, usp, vsp) \ 46 do { \ 47 (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \ 48 (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \ 49 if ((vsp)->tv_nsec < 0) { \ 50 (vsp)->tv_sec--; \ 51 (vsp)->tv_nsec += 1000000000L; \ 52 } \ 53 } while (0) 54 55#define timespeccmp(tsp, usp, cmp) \ 56 (((tsp)->tv_sec == (usp)->tv_sec) ? \ 57 ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \ 58 ((tsp)->tv_sec cmp (usp)->tv_sec)) 59#endif 60 61#endif /* _COMPAT_TIME_H */ 62