]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
tv_udiff: do not modify arguments, and compute results correctly.
authorNick Mathewson <nickm@torproject.org>
Thu, 17 Apr 2003 01:59:41 +0000 (01:59 +0000)
committerNick Mathewson <nickm@torproject.org>
Thu, 17 Apr 2003 01:59:41 +0000 (01:59 +0000)
svn:r245

src/common/util.c

index 743df0bbb1601161aa444ebfc1c9a501025c30ed..600a8e614d83d3f2ef66d06aa7b1cafafbb4203d 100644 (file)
@@ -23,16 +23,18 @@ long
 tv_udiff(struct timeval *start, struct timeval *end)
 {
   long udiff;
+  long end_usec = end->tv_usec;
   long secdiff = end->tv_sec - start->tv_sec;
+
   if (secdiff+1 > LONG_MAX/1000000) {
     log(LOG_NOTICE, "tv_udiff(): comparing times too far apart.");
     return LONG_MAX;
   }
-  if (end->tv_usec < start->tv_usec) {
-    end->tv_sec--;
-    end->tv_usec += 1000000L;
+  if (end_usec < start->tv_usec) {
+    secdiff--;
+    end_usec += 1000000L;
   }
-  udiff = secdiff*1000000L + (end->tv_usec - start->tv_usec);
+  udiff = secdiff*1000000L + (end_usec - start->tv_usec);
   if(udiff < 0) {
     log(LOG_NOTICE, "tv_udiff(): start is after end. Returning 0.");
     return 0;