1 /* 2 * Copyright 2016-2017 Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _BSD_SYS_TIME_H_ 6 #define _BSD_SYS_TIME_H_ 7 8 9 #include_next <sys/time.h> 10 #include <features.h> 11 12 13 #ifdef _DEFAULT_SOURCE 14 15 16 /* BSDish macros operating on timespec structs */ 17 #define timespecadd(a, b, res) \ 18 do { \ 19 (res)->tv_sec = (a)->tv_sec + (b)->tv_sec; \ 20 (res)->tv_nsec = (a)->tv_nsec + (b)->tv_nsec; \ 21 if ((res)->tv_nsec >= 1000000000L) { \ 22 (res)->tv_nsec -= 1000000000L; \ 23 (res)->tv_sec++; \ 24 } \ 25 } while (0) 26 #define timespecsub(a, b, res) \ 27 do { \ 28 (res)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 29 (res)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \ 30 if ((res)->tv_nsec < 0) { \ 31 (res)->tv_nsec += 1000000000L; \ 32 (res)->tv_sec--; \ 33 } \ 34 } while (0) 35 #define timespecclear(a) ((a)->tv_sec = (a)->tv_nsec = 0) 36 #define timespecisset(a) ((a)->tv_sec != 0 || (a)->tv_nsec != 0) 37 #define timespeccmp(a, b, cmp) (((a)->tv_sec == (b)->tv_sec) \ 38 ? (a)->tv_nsec cmp (b)->tv_nsec : (a)->tv_sec cmp (b)->tv_sec)) 39 #define timespecvalid_interval(a) ((a)->tv_sec >= 0 \ 40 && (a)->tv_nsec >= 0 && (&)->tv_nsec < 1000000000L) 41 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 int lutimes(const char *path, const struct timeval times[2]); 48 49 #ifdef __cplusplus 50 } 51 #endif 52 53 54 #endif 55 56 57 #endif /* _BSD_SYS_TIME_H_ */ 58