commit de1dbfe9d859807c79840ee4720ca95641cbfdb0 from: Thomas Adam date: Wed Jan 05 21:24:38 2022 UTC portable: add compat wrappers for timespec*() Although there are definitions for timespec*() functions in libbsd, these were added fairly recently, which means not all non-BSD systems will have them. In such cases, provide a portable wrapper. commit - 39a089ac0ae7a9974bf6174d08636de0872801f4 commit + de1dbfe9d859807c79840ee4720ca95641cbfdb0 blob - 78da94b5a6a66a86e58077352388589e6c6a18f2 blob + c07416a808a6799841c0c9978d004659680beda2 --- include/got_compat.h +++ include/got_compat.h @@ -230,6 +230,35 @@ int BSDgetopt(int, char *const *, const char *); #endif #endif +/* Check for some of the non-portable timespec*() functions. + * This should largely come from libbsd for systems which + * aren't BSD, but this will depend on how old the library + * is. + */ +#ifndef timespecisset +#define timespecisset(tsp) \ + ((tsp)->tv_sec || (tsp)->tv_nsec) +#endif + +#ifndef timespecsub +#define timespecsub(tsp, usp, vsp) \ + do { \ + (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \ + (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \ + if ((vsp)->tv_nsec < 0) { \ + (vsp)->tv_sec--; \ + (vsp)->tv_nsec += 1000000000L; \ + } \ + } while (0) +#endif + +#ifndef timespeccmp +#define timespeccmp(tvp, uvp, cmp) \ +(((tvp)->tv_sec == (uvp)->tv_sec) ? \ + ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \ + ((tvp)->tv_sec cmp (uvp)->tv_sec)) +#endif + #ifndef HAVE_BSD_MERGESORT /* mergesort.c */ int mergesort(void *, size_t, size_t, int (*)(const void *, const void *)); blob - 219e7905e4765ae964a3ab7a1e8145d1ce344c2f blob + bebba105c6a81b120e96533ec5705154f663f481 --- lib/ratelimit.c +++ lib/ratelimit.c @@ -23,6 +23,7 @@ #include "got_lib_ratelimit.h" +#include "got_compat.h" #include "got_error.h" void