From eeba760af5efb62e005e8b0635d7ba0b851bf93c Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Fri, 1 Oct 2021 18:25:49 +0300 Subject: [PATCH] lib: Add timeval_from_usecs Helper to convert usecs to timeval --- src/lib/test-time-util.c | 33 +++++++++++++++++++++++++++++++++ src/lib/time-util.h | 8 ++++++++ 2 files changed, 41 insertions(+) diff --git a/src/lib/test-time-util.c b/src/lib/test-time-util.c index 675a5dba25..9e23e69419 100644 --- a/src/lib/test-time-util.c +++ b/src/lib/test-time-util.c @@ -393,6 +393,38 @@ static void test_str_to_timeval(void) test_end(); } +static void test_timeval_from_usecs(void) +{ + test_begin("timeval_from_usecs"); + struct timeval tv0, tv1; + + i_zero(&tv1); + timeval_from_usecs(&tv0, 0); + test_assert(timeval_cmp(&tv0, &tv1) == 0); + + tv1.tv_sec = 1; + tv1.tv_usec = 0; + timeval_from_usecs(&tv0, 1000000); + test_assert(timeval_cmp(&tv0, &tv1) == 0); + + tv1.tv_sec = 1; + tv1.tv_usec = 1; + timeval_from_usecs(&tv0, 1000001); + test_assert(timeval_cmp(&tv0, &tv1) == 0); + + tv1.tv_sec = 1; + tv1.tv_usec = 999999; + timeval_from_usecs(&tv0, 1999999); + test_assert(timeval_cmp(&tv0, &tv1) == 0); + + tv1.tv_sec = 0; + tv1.tv_usec = 999999; + timeval_from_usecs(&tv0, 999999); + test_assert(timeval_cmp(&tv0, &tv1) == 0); + + test_end(); +} + void test_time_util(void) { test_timeval_cmp(); @@ -403,4 +435,5 @@ void test_time_util(void) test_strftime_fixed(); test_micro_nanoseconds(); test_str_to_timeval(); + test_timeval_from_usecs(); } diff --git a/src/lib/time-util.h b/src/lib/time-util.h index 74ae9edf5e..65d5014265 100644 --- a/src/lib/time-util.h +++ b/src/lib/time-util.h @@ -23,6 +23,14 @@ int timeval_diff_msecs(const struct timeval *tv1, const struct timeval *tv2); long long timeval_diff_usecs(const struct timeval *tv1, const struct timeval *tv2); +static inline void +timeval_from_usecs(struct timeval *tv_r, unsigned long long usecs) +{ + i_assert(usecs != ULLONG_MAX); + tv_r->tv_sec = usecs / 1000000; + tv_r->tv_usec = usecs % 1000000; +} + static inline void timeval_add_usecs(struct timeval *tv, long long usecs) { -- 2.47.3