summaryrefslogtreecommitdiff
path: root/wiretap/csids.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/csids.c
parentf65cb5f27bab6310e847f88cd763eb08bff1c93b (diff)
downloadwireshark-33bb54a9452f4be53377a185195a63194016241a.tar.gz
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/csids.c')
-rw-r--r--wiretap/csids.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/wiretap/csids.c b/wiretap/csids.c
index 23f97c5749..61722f6dcb 100644
--- a/wiretap/csids.c
+++ b/wiretap/csids.c
@@ -136,7 +136,6 @@ int csids_open(wtap *wth, int *err, gchar **err_info)
if (file_seek(wth->fh, 0, SEEK_SET, err) == -1)
return -1;
- wth->data_offset = 0;
csids = (csids_t *)g_malloc(sizeof(csids_t));
wth->priv = (void *)csids;
csids->byteswapped = byteswap;
@@ -159,7 +158,7 @@ static gboolean csids_read(wtap *wth, int *err, gchar **err_info,
int bytesRead = 0;
struct csids_header hdr;
- *data_offset = wth->data_offset;
+ *data_offset = file_tell(wth->fh);
bytesRead = file_read( &hdr, sizeof( struct csids_header) , wth->fh );
if( bytesRead != sizeof( struct csids_header) ) {
@@ -171,8 +170,6 @@ static gboolean csids_read(wtap *wth, int *err, gchar **err_info,
hdr.seconds = pntohl(&hdr.seconds);
hdr.caplen = pntohs(&hdr.caplen);
- wth->data_offset += sizeof( struct csids_header );
-
/* Make sure we have enough room for the packet */
buffer_assure_space(wth->frame_buffer, hdr.caplen);
buf = buffer_start_ptr(wth->frame_buffer);
@@ -185,8 +182,6 @@ static gboolean csids_read(wtap *wth, int *err, gchar **err_info,
return FALSE;
}
- wth->data_offset += hdr.caplen;
-
wth->phdr.presence_flags = WTAP_HAS_TS;
wth->phdr.len = hdr.caplen;
wth->phdr.caplen = hdr.caplen;