aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/netmon.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2010-07-18 20:47:48 +0000
committerGuy Harris <guy@alum.mit.edu>2010-07-18 20:47:48 +0000
commit9903a7853cce6413e1ffb12906ea23a16eb31131 (patch)
tree0745dc1d8484a654f02589bc22a594e11f6e3549 /wiretap/netmon.c
parent770dc398a412cdfc0a911670f576929d7e51bd25 (diff)
The time delta in a NetMon frame header is signed - it can be negative.
svn path=/trunk/; revision=33576
Diffstat (limited to 'wiretap/netmon.c')
-rw-r--r--wiretap/netmon.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/wiretap/netmon.c b/wiretap/netmon.c
index ec9bab75d6..afd8f1a90c 100644
--- a/wiretap/netmon.c
+++ b/wiretap/netmon.c
@@ -380,6 +380,7 @@ static gboolean netmon_read(wtap *wth, int *err, gchar **err_info,
int trlr_size = 0;
int rec_offset;
guint8 *data_ptr;
+ gint64 delta = 0; /* signed - frame times can be before the nominal start */
time_t secs;
guint32 usecs;
double t;
@@ -514,14 +515,15 @@ again:
switch (netmon->version_major) {
case 1:
- t += ((double)pletohl(&hdr.hdr_1_x.ts_delta))*1000;
+ delta = ((gint32)pletohl(&hdr.hdr_1_x.ts_delta))*1000;
break;
case 2:
- t += (double)pletohl(&hdr.hdr_2_x.ts_delta_lo)
- + (double)pletohl(&hdr.hdr_2_x.ts_delta_hi)*4294967296.0;
+ delta = pletohl(&hdr.hdr_2_x.ts_delta_lo)
+ | (((guint64)pletohl(&hdr.hdr_2_x.ts_delta_hi)) << 32);
break;
}
+ t += (double)delta;
secs = (time_t)(t/1000000);
usecs = (guint32)(t - (double)secs*1000000);
wth->phdr.ts.secs = netmon->start_secs + secs;