diff options
author | Guy Harris <guy@alum.mit.edu> | 2012-05-04 16:56:18 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2012-05-04 16:56:18 +0000 |
commit | 33bb54a9452f4be53377a185195a63194016241a (patch) | |
tree | 9308829e2105b6e51e0dc5cc0af2295d8d97a0a3 /wiretap/i4btrace.c | |
parent | f65cb5f27bab6310e847f88cd763eb08bff1c93b (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/i4btrace.c')
-rw-r--r-- | wiretap/i4btrace.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/wiretap/i4btrace.c b/wiretap/i4btrace.c index 05b6087583..0a8e3e438e 100644 --- a/wiretap/i4btrace.c +++ b/wiretap/i4btrace.c @@ -101,7 +101,6 @@ int i4btrace_open(wtap *wth, int *err, gchar **err_info) if (file_seek(wth->fh, 0, SEEK_SET, err) == -1) return -1; - wth->data_offset = 0; /* Get capture start time */ @@ -130,13 +129,12 @@ static gboolean i4btrace_read(wtap *wth, int *err, gchar **err_info, void *bufp; /* Read record header. */ - *data_offset = wth->data_offset; + *data_offset = file_tell(wth->fh); ret = i4b_read_rec_header(wth->fh, &hdr, err, err_info); if (ret <= 0) { /* Read error or EOF */ return FALSE; } - wth->data_offset += sizeof hdr; i4b_byte_swap_header(wth, &hdr); if (hdr.length < sizeof(hdr)) { *err = WTAP_ERR_BAD_FILE; /* record length < header! */ @@ -171,7 +169,6 @@ static gboolean i4btrace_read(wtap *wth, int *err, gchar **err_info, bufp = buffer_start_ptr(wth->frame_buffer); if (!i4b_read_rec_data(wth->fh, bufp, length, err, err_info)) return FALSE; /* Read error */ - wth->data_offset += length; switch (hdr.type) { |