+
+static void time_set_ms(struct time *time, unsigned int ms)
+{
+ time->tv.tv_sec = ms / 1000;
+ time->tv.tv_usec = (ms % 1000) * 1000;
+}
+
+static void time_add(const struct time *a,
+ const struct time *b, struct time *result)
+{
+ timeradd(&a->tv, &b->tv, &result->tv);
+}
+
+static void time_sub(const struct time *a,
+ const struct time *b, struct time *result)
+{
+ timersub(&a->tv, &b->tv, &result->tv);
+}
+
+static bool time_greater(const struct time *a, const struct time *b)
+{
+ return timercmp(&a->tv, &b->tv, >);
+}
+
+static void time_as_timeval(const struct time *time, struct timeval *tv)
+{
+ *tv = time->tv;
+}
+
+static unsigned int time_as_ms(const struct time *time)
+{
+ return time->tv.tv_sec * 1000 + time->tv.tv_usec / 1000;
+}
+