starting to add timing to vm driver
[dcpu16] / common.c
index 9dbadf369983950b2126efc8a5dcde63a307d2f2..5887c224815c43c4daadaa1eae0ce2656bb2b88e 100644 (file)
--- a/common.c
+++ b/common.c
@@ -126,7 +126,11 @@ char *strqtok_r(char *str, const char *sep, int esc, const char *quote, char **l
     }
 
     /* next token starts after any leading seps */
-    *lasts += strspn(*lasts, sep);
+    while (**lasts && strchr(sep, **lasts)) {
+        **lasts = '\0';
+        (*lasts)++;
+    }
+
     tok = *lasts;
     if (*tok == '\0')
         return NULL;
@@ -200,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;
+}