starting to add timing to vm driver
[dcpu16] / common.c
index ce1b6c0305aa3b86b4754fdf7da5c46134dc09ad..5887c224815c43c4daadaa1eae0ce2656bb2b88e 100644 (file)
--- a/common.c
+++ b/common.c
@@ -204,3 +204,25 @@ char *strqtok_r(char *str, const char *sep, int esc, const char *quote, char **l
 
     return tok;
 }
+
+int timeval_subtract(struct timeval *result, struct timeval *x, struct timeval *y) {
+  /* Perform the carry for the later subtraction by updating y. */
+  if (x->tv_usec < y->tv_usec) {
+    int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
+    y->tv_usec -= 1000000 * nsec;
+    y->tv_sec += nsec;
+  }
+  if (x->tv_usec - y->tv_usec > 1000000) {
+    int nsec = (x->tv_usec - y->tv_usec) / 1000000;
+    y->tv_usec += 1000000 * nsec;
+    y->tv_sec -= nsec;
+  }
+
+  /* Compute the time remaining to wait.
+     tv_usec is certainly positive. */
+  result->tv_sec = x->tv_sec - y->tv_sec;
+  result->tv_usec = x->tv_usec - y->tv_usec;
+
+  /* Return 1 if result is negative. */
+  return x->tv_sec < y->tv_sec;
+}