Provide cgtimer_sub helper functions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
diff --git a/util.c b/util.c
index 28ac02d..4a7e4e7 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 53efda6..faa3ae4 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);