Windows: GetTickCount() returns a DWORD (not a time_t);
authorwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>
Wed, 7 Sep 2011 18:25:54 +0000 (18:25 +0000)
committerwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>
Wed, 7 Sep 2011 18:25:54 +0000 (18:25 +0000)
Fixes a problem on Windows wherein specifying a capture file
time duration for autostop or file-switching would stop
working after some period of time.

The reason:
GetTickCount returns DWORD (unsigned int) which
 wraps "every 49.7 days";

and: The GetTickCount() return value was being stored in a time_t which is
 int64 on Windows;

thus:
 The test for elapsed time (using signed integers) didn't work correctly after
 the time had wrapped.

Fixes Bug #6280: https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6280

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@38921 f5534014-38df-0310-8fa8-9805f1628bb7

dumpcap.c

index 6479f09523a473ed1ae241e41dd2a84333d21088..49a5fa655e54bf13fd846356a0bacfb5610a0855 100644 (file)
--- a/dumpcap.c
+++ b/dumpcap.c
@@ -3043,7 +3043,7 @@ static gboolean
 capture_loop_start(capture_options *capture_opts, gboolean *stats_known, struct pcap_stat *stats)
 {
 #ifdef WIN32
-    time_t upd_time, cur_time;
+    DWORD upd_time, cur_time;   /* GetTickCount() returns a "DWORD" (which is 'unsigned long') */
 #else
     struct timeval upd_time, cur_time;
 #endif
@@ -3267,8 +3267,8 @@ capture_loop_start(capture_options *capture_opts, gboolean *stats_known, struct
 #define DUMPCAP_UPD_TIME 500
 
 #ifdef WIN32
-        cur_time = GetTickCount();
-        if ( (cur_time - upd_time) > DUMPCAP_UPD_TIME) {
+        cur_time = GetTickCount();  /* Note: wraps to 0 if sys runs for 49.7 days */
+        if ((cur_time - upd_time) > DUMPCAP_UPD_TIME) { /* wrap just causes an extra update */
 #else
         gettimeofday(&cur_time, NULL);
         if ((cur_time.tv_sec * 1000000 + cur_time.tv_usec) >