From 4db1dde25c4def9933235093e4720c898559f871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 22 Sep 2022 18:32:28 +0200 Subject: [PATCH] misc: add timespec_add() --- misc.c | 19 ++++++++++++++++++- misc.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/misc.c b/misc.c index 7e33e65a..a81aa9e4 100644 --- a/misc.c +++ b/misc.c @@ -13,15 +13,32 @@ isword(char32_t wc, bool spaces_only, const char32_t *delimiters) return isc32graph(wc); } +void +timespec_add(const struct timespec *a, const struct timespec *b, + struct timespec *res) +{ + const long one_sec_in_ns = 1000000000; + + res->tv_sec = a->tv_sec + b->tv_sec; + res->tv_nsec = a->tv_nsec + b->tv_nsec; + /* tv_nsec may be negative */ + if (res->tv_nsec >= one_sec_in_ns) { + res->tv_sec++; + res->tv_nsec -= one_sec_in_ns; + } +} + void timespec_sub(const struct timespec *a, const struct timespec *b, struct timespec *res) { + const long one_sec_in_ns = 1000000000; + res->tv_sec = a->tv_sec - b->tv_sec; res->tv_nsec = a->tv_nsec - b->tv_nsec; /* tv_nsec may be negative */ if (res->tv_nsec < 0) { res->tv_sec--; - res->tv_nsec += 1000 * 1000 * 1000; + res->tv_nsec += one_sec_in_ns; } } diff --git a/misc.h b/misc.h index ba8b2ce7..648bb65f 100644 --- a/misc.h +++ b/misc.h @@ -6,4 +6,5 @@ bool isword(char32_t wc, bool spaces_only, const char32_t *delimiters); +void timespec_add(const struct timespec *a, const struct timespec *b, struct timespec *res); void timespec_sub(const struct timespec *a, const struct timespec *b, struct timespec *res);