diff --git a/util.c b/util.c index 28ac02d6..4a7e4e70 100644 --- a/util.c +++ b/util.c @@ -930,6 +930,17 @@ int cgtimer_to_ms(cgtimer_t *cgt) { return timespec_to_ms(cgt); } + +/* Subtracts b from a and stores it in res. */ +void cgtimer_sub(cgtimer_t *a, cgtimer_t *b, cgtimer_t *res) +{ + res->tv_sec = a->tv_sec - b->tv_sec; + res->tv_nsec = a->tv_nsec - b->tv_nsec; + if (res->tv_nsec < 0) { + res->tv_nsec += 1000000000; + res->tv_sec--; + } +} #else void cgtimer_time(cgtimer_t *ts_start) { @@ -975,6 +986,11 @@ int cgtimer_to_ms(cgtimer_t *cgt) { return timeval_to_ms(cgt); } + +void cgtimer_sub(cgtimer_t *a, cgtimer_t *b, cgtimer_t *res) +{ + timersub(a, b, res); +} #endif void cgsleep_ms(int ms) diff --git a/util.h b/util.h index 53efda61..faa3ae48 100644 --- a/util.h +++ b/util.h @@ -91,6 +91,7 @@ void cgtimer_time(cgtimer_t *ts_start); void cgsleep_ms_r(cgtimer_t *ts_start, int ms); void cgsleep_us_r(cgtimer_t *ts_start, int64_t us); int cgtimer_to_ms(cgtimer_t *cgt); +void cgtimer_sub(cgtimer_t *a, cgtimer_t *b, cgtimer_t *res); double us_tdiff(struct timeval *end, struct timeval *start); double tdiff(struct timeval *end, struct timeval *start); bool stratum_send(struct pool *pool, char *s, ssize_t len);