]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: time-util - Use correct data types
authorAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 20 Aug 2020 06:43:35 +0000 (09:43 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 11 Sep 2020 07:07:20 +0000 (07:07 +0000)
src/lib/time-util.c

index 3168c6df8eccbc83004888d5cd80ac02f8686e62..294bb0231012cf5138f816a5286885eb3f400403 100644 (file)
@@ -38,21 +38,21 @@ int timeval_cmp(const struct timeval *tv1, const struct timeval *tv2)
 int timeval_cmp_margin(const struct timeval *tv1, const struct timeval *tv2,
        unsigned int usec_margin)
 {
-       unsigned long long usecs_diff;
+       long long usecs_diff;
        int sec_margin, ret;
 
        if (tv1->tv_sec < tv2->tv_sec) {
                sec_margin = ((int)usec_margin / 1000000) + 1;
                if ((tv2->tv_sec - tv1->tv_sec) > sec_margin)
                        return -1;
-               usecs_diff = (tv2->tv_sec - tv1->tv_sec) * 1000000ULL +
+               usecs_diff = (tv2->tv_sec - tv1->tv_sec) * 1000000LL +
                        (tv2->tv_usec - tv1->tv_usec);
                ret = -1;
        } else if (tv1->tv_sec > tv2->tv_sec) {
                sec_margin = ((int)usec_margin / 1000000) + 1;
                if ((tv1->tv_sec - tv2->tv_sec) > sec_margin)
                        return 1;
-               usecs_diff = (tv1->tv_sec - tv2->tv_sec) * 1000000ULL +
+               usecs_diff = (tv1->tv_sec - tv2->tv_sec) * 1000000LL +
                        (tv1->tv_usec - tv2->tv_usec);
                ret = 1;
        } else if (tv1->tv_usec < tv2->tv_usec) {
@@ -62,12 +62,18 @@ int timeval_cmp_margin(const struct timeval *tv1, const struct timeval *tv2,
                usecs_diff = tv1->tv_usec - tv2->tv_usec;
                ret = 1;
        }
-       return usecs_diff > usec_margin ? ret : 0;
+       i_assert(usecs_diff >= 0);
+       return (unsigned long long)usecs_diff > usec_margin ? ret : 0;
 }
 
 int timeval_diff_msecs(const struct timeval *tv1, const struct timeval *tv2)
 {
-       return timeval_diff_usecs(tv1, tv2) / 1000;
+       long long diff = timeval_diff_usecs(tv1, tv2) / 1000LL;
+#ifdef DEBUG
+       /* FIXME v2.4: Remove the ifdef */
+       i_assert(diff <= INT_MAX);
+#endif
+       return (int)diff;
 }
 
 long long timeval_diff_usecs(const struct timeval *tv1,