Skip to content
Snippets Groups Projects
Commit 2da6482f authored by Nick Mathewson's avatar Nick Mathewson :game_die:
Browse files

tv_udiff: do not modify arguments, and compute results correctly.

svn:r245
parent 0a9e8336
No related branches found
No related tags found
No related merge requests found
...@@ -23,16 +23,18 @@ long ...@@ -23,16 +23,18 @@ long
tv_udiff(struct timeval *start, struct timeval *end) tv_udiff(struct timeval *start, struct timeval *end)
{ {
long udiff; long udiff;
long end_usec = end->tv_usec;
long secdiff = end->tv_sec - start->tv_sec; long secdiff = end->tv_sec - start->tv_sec;
if (secdiff+1 > LONG_MAX/1000000) { if (secdiff+1 > LONG_MAX/1000000) {
log(LOG_NOTICE, "tv_udiff(): comparing times too far apart."); log(LOG_NOTICE, "tv_udiff(): comparing times too far apart.");
return LONG_MAX; return LONG_MAX;
} }
if (end->tv_usec < start->tv_usec) { if (end_usec < start->tv_usec) {
end->tv_sec--; secdiff--;
end->tv_usec += 1000000L; end_usec += 1000000L;
} }
udiff = secdiff*1000000L + (end->tv_usec - start->tv_usec); udiff = secdiff*1000000L + (end_usec - start->tv_usec);
if(udiff < 0) { if(udiff < 0) {
log(LOG_NOTICE, "tv_udiff(): start is after end. Returning 0."); log(LOG_NOTICE, "tv_udiff(): start is after end. Returning 0.");
return 0; return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment