]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Add timeval_from_usecs
authorAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 1 Oct 2021 15:25:49 +0000 (18:25 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 17 Jan 2022 11:52:09 +0000 (13:52 +0200)
Helper to convert usecs to timeval

src/lib/test-time-util.c
src/lib/time-util.h

index 675a5dba25a33350974ce3467bcc15180f4dbe59..9e23e694192ad42bf1f6e599cbee34c89270da90 100644 (file)
@@ -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();
 }
index 74ae9edf5ea46f16dc0a58d14b15288d1b99607c..65d50142650685aec8d4466a2083ef1a90e1b49e 100644 (file)
@@ -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)
 {