mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Add a couple of time helper functions.
Also add rounding support to tv_mdiff().
This commit is contained in:
parent
cf2afcd707
commit
e2cc4e353a
@ -1034,6 +1034,42 @@ wrap_string(smartlist_t *out, const char *string, size_t width,
|
||||
* Time
|
||||
* ===== */
|
||||
|
||||
/**
|
||||
* Converts struct timeval to a double value.
|
||||
* Preserves microsecond precision, but just barely.
|
||||
* Error is approx +/- 0.1 usec when dealing with epoch values.
|
||||
*/
|
||||
double
|
||||
tv_to_double(const struct timeval *tv)
|
||||
{
|
||||
double conv = tv->tv_sec;
|
||||
conv += tv->tv_usec/1000000.0;
|
||||
return conv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts timeval to milliseconds.
|
||||
*/
|
||||
int64_t
|
||||
tv_to_msec(const struct timeval *tv)
|
||||
{
|
||||
int64_t conv = ((int64_t)tv->tv_sec)*1000L;
|
||||
/* Round ghetto-style */
|
||||
conv += (tv->tv_usec+500)/1000L;
|
||||
return conv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts timeval to microseconds.
|
||||
*/
|
||||
int64_t
|
||||
tv_to_usec(const struct timeval *tv)
|
||||
{
|
||||
int64_t conv = ((int64_t)tv->tv_sec)*1000000L;
|
||||
conv += tv->tv_usec;
|
||||
return conv;
|
||||
}
|
||||
|
||||
/** Return the number of microseconds elapsed between *start and *end.
|
||||
*/
|
||||
long
|
||||
@ -1066,7 +1102,9 @@ tv_mdiff(const struct timeval *start, const struct timeval *end)
|
||||
return LONG_MAX;
|
||||
}
|
||||
|
||||
mdiff = secdiff*1000L + ((long)end->tv_usec - (long)start->tv_usec) / 1000L;
|
||||
/* Subtract and round */
|
||||
mdiff = secdiff*1000L +
|
||||
((long)end->tv_usec - (long)start->tv_usec + 500L) / 1000L;
|
||||
return mdiff;
|
||||
}
|
||||
|
||||
|
@ -212,6 +212,9 @@ void base16_encode(char *dest, size_t destlen, const char *src, size_t srclen);
|
||||
int base16_decode(char *dest, size_t destlen, const char *src, size_t srclen);
|
||||
|
||||
/* Time helpers */
|
||||
double tv_to_double(const struct timeval *tv);
|
||||
int64_t tv_to_msec(const struct timeval *tv);
|
||||
int64_t tv_to_usec(const struct timeval *tv);
|
||||
long tv_udiff(const struct timeval *start, const struct timeval *end);
|
||||
long tv_mdiff(const struct timeval *start, const struct timeval *end);
|
||||
time_t tor_timegm(struct tm *tm);
|
||||
|
Loading…
Reference in New Issue
Block a user