aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/commview.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2012-05-04 16:56:18 +0000
committerGuy Harris <guy@alum.mit.edu>2012-05-04 16:56:18 +0000
commit33bb54a9452f4be53377a185195a63194016241a (patch)
tree9308829e2105b6e51e0dc5cc0af2295d8d97a0a3 /wiretap/commview.c
parentf65cb5f27bab6310e847f88cd763eb08bff1c93b (diff)
file_seek() used to be a wrapper around fseek() or gzseek(), both of
which could use lseek() and were thus expensive due to system call overhead. To avoid making a system call for every packet on a sequential read, we maintained a data_offset field in the wtap structure for sequential reads. It's now a routine that just returns information from the FILE_T data structure, so it's cheap. Use it, rather than maintaining the data_offset field. Readers for some file formats need to maintain file offset themselves; have them do so in their private data structures. svn path=/trunk/; revision=42423
Diffstat (limited to 'wiretap/commview.c')
-rw-r--r--wiretap/commview.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/wiretap/commview.c b/wiretap/commview.c
index a2415fdcd7..f3c3e3ecb1 100644
--- a/wiretap/commview.c
+++ b/wiretap/commview.c
@@ -124,7 +124,6 @@ int commview_open(wtap *wth, int *err, gchar **err_info)
wth->subtype_read = commview_read;
wth->subtype_seek_read = commview_seek_read;
- wth->data_offset = 0;
wth->file_type = WTAP_FILE_COMMVIEW;
wth->file_encap = WTAP_ENCAP_PER_PACKET;
wth->tsprecision = WTAP_FILE_TSPREC_USEC;
@@ -162,13 +161,11 @@ commview_read(wtap *wth, int *err, gchar **err_info, gint64 *data_offset)
struct tm tm;
int bytes_read;
- *data_offset = wth->data_offset;
+ *data_offset = file_tell(wth->fh);
if(!commview_read_header(&cv_hdr, wth->fh, err, err_info))
return FALSE;
- wth->data_offset += COMMVIEW_HEADER_SIZE;
-
switch(cv_hdr.flags & FLAGS_MEDIUM) {
case MEDIUM_ETHERNET :
@@ -210,8 +207,6 @@ commview_read(wtap *wth, int *err, gchar **err_info, gint64 *data_offset)
tm.tm_sec = cv_hdr.seconds;
tm.tm_isdst = -1;
- wth->data_offset += cv_hdr.data_len;
-
wth->phdr.presence_flags = WTAP_HAS_TS;
wth->phdr.len = cv_hdr.data_len;