time-util.c revision 7ef3553585e556f35d5919589cfdc1de3329e4bb
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch/* Copyright (c) 2008-2009 Dovecot authors, see the included COPYING file */
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#include "lib.h"
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#include "time-util.h"
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#include <sys/time.h>
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenint timeval_cmp(const struct timeval *tv1, const struct timeval *tv2)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen{
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen if (tv1->tv_sec < tv2->tv_sec)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return -1;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen if (tv1->tv_sec > tv2->tv_sec)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return 1;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen if (tv1->tv_usec < tv2->tv_usec)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return -1;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen if (tv1->tv_usec > tv2->tv_usec)
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen return 1;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen return 0;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen}
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainen
a34bd633ab201f6a5ad1c00174fb8b0359031d00Timo Sirainenint timeval_diff_msecs(const struct timeval *tv1, const struct timeval *tv2)
a34bd633ab201f6a5ad1c00174fb8b0359031d00Timo Sirainen{
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen time_t secs;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen int usecs;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen secs = tv1->tv_sec - tv2->tv_sec;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen usecs = tv1->tv_usec - tv2->tv_usec;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen if (usecs < 0) {
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen secs++;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen usecs += 1000000;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen }
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return (secs * 1000) + (usecs/1000);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen}
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenlong long timeval_diff_usecs(const struct timeval *tv1,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const struct timeval *tv2)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen{
5f44975ec6c5755dd74bcd4c47a123a7242ecab3Timo Sirainen time_t secs;
5f44975ec6c5755dd74bcd4c47a123a7242ecab3Timo Sirainen int usecs;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen secs = tv1->tv_sec - tv2->tv_sec;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen usecs = tv1->tv_usec - tv2->tv_usec;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen if (usecs < 0) {
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen secs++;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen usecs += 1000000;
d22301419109ed4a38351715e6760011421dadecTimo Sirainen }
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return ((long long)secs * 1000000ULL) + usecs;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen}
4542c94adb8910e0174c784754e737cec16af59cTimo Sirainen