aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/lanalyzer.c
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>2000-09-07 05:34:23 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>2000-09-07 05:34:23 +0000
commitf52ffba40709c1d134671eef22086827cdeda0f3 (patch)
tree31fc7f12926ced1a03d1ebd95053a6131039c09b /wiretap/lanalyzer.c
parente1f3604b376f38c081ff142d54d91aa3f68bd0f8 (diff)
Change wtap_read() API so that the data offset is set via a pointer, and
a "keep reading" boolean value is returned from the function. This avoids having to hack around the fact that some file formats truly do have records that start at offset 0. (i4btrace and csids have no file header. Neither does the pppdump-style file that I'm looking at right now). svn path=/trunk/; revision=2392
Diffstat (limited to 'wiretap/lanalyzer.c')
-rw-r--r--wiretap/lanalyzer.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/wiretap/lanalyzer.c b/wiretap/lanalyzer.c
index bf2966fc82..4df14843c9 100644
--- a/wiretap/lanalyzer.c
+++ b/wiretap/lanalyzer.c
@@ -1,6 +1,6 @@
/* lanalyzer.c
*
- * $Id: lanalyzer.c,v 1.24 2000/08/25 21:25:38 gram Exp $
+ * $Id: lanalyzer.c,v 1.25 2000/09/07 05:34:10 gram Exp $
*
* Wiretap Library
* Copyright (c) 1998 by Gilbert Ramirez <gram@xiexie.org>
@@ -47,7 +47,7 @@
#define BOARD_325 226 /* LANalyzer 325 (Ethernet) */
#define BOARD_325TR 227 /* LANalyzer 325TR (Token-ring) */
-static int lanalyzer_read(wtap *wth, int *err);
+static gboolean lanalyzer_read(wtap *wth, int *err, int *data_offset);
static void lanalyzer_close(wtap *wth);
int lanalyzer_open(wtap *wth, int *err)
@@ -199,7 +199,7 @@ int lanalyzer_open(wtap *wth, int *err)
#define DESCRIPTOR_LEN 32
/* Read the next packet */
-static int lanalyzer_read(wtap *wth, int *err)
+static gboolean lanalyzer_read(wtap *wth, int *err, int *data_offset)
{
int packet_size = 0;
int bytes_read;
@@ -207,7 +207,6 @@ static int lanalyzer_read(wtap *wth, int *err)
char LE_record_length[2];
guint16 record_type, record_length;
gchar descriptor[DESCRIPTOR_LEN];
- int data_offset;
guint16 time_low, time_med, time_high, true_size;
double t;
@@ -216,13 +215,10 @@ static int lanalyzer_read(wtap *wth, int *err)
bytes_read = file_read(LE_record_type, 1, 2, wth->fh);
if (bytes_read != 2) {
*err = file_error(wth->fh);
- if (*err != 0)
- return -1;
- if (bytes_read != 0) {
+ if (*err == 0 && bytes_read != 0) {
*err = WTAP_ERR_SHORT_READ;
- return -1;
}
- return 0;
+ return FALSE;
}
wth->data_offset += 2;
bytes_read = file_read(LE_record_length, 1, 2, wth->fh);
@@ -230,7 +226,7 @@ static int lanalyzer_read(wtap *wth, int *err)
*err = file_error(wth->fh);
if (*err == 0)
*err = WTAP_ERR_SHORT_READ;
- return -1;
+ return FALSE;
}
wth->data_offset += 2;
@@ -244,7 +240,7 @@ static int lanalyzer_read(wtap *wth, int *err)
g_message("lanalyzer: record type %u seen after trace summary record",
record_type);
*err = WTAP_ERR_BAD_RECORD;
- return -1;
+ return FALSE;
}
else {
packet_size = record_length - DESCRIPTOR_LEN;
@@ -257,13 +253,13 @@ static int lanalyzer_read(wtap *wth, int *err)
*err = file_error(wth->fh);
if (*err == 0)
*err = WTAP_ERR_SHORT_READ;
- return -1;
+ return FALSE;
}
wth->data_offset += DESCRIPTOR_LEN;
/* Read the packet data */
buffer_assure_space(wth->frame_buffer, packet_size);
- data_offset = wth->data_offset;
+ *data_offset = wth->data_offset;
errno = WTAP_ERR_CANT_READ;
bytes_read = file_read(buffer_start_ptr(wth->frame_buffer), 1,
packet_size, wth->fh);
@@ -272,7 +268,7 @@ static int lanalyzer_read(wtap *wth, int *err)
*err = file_error(wth->fh);
if (*err == 0)
*err = WTAP_ERR_SHORT_READ;
- return -1;
+ return FALSE;
}
wth->data_offset += packet_size;
@@ -294,7 +290,7 @@ static int lanalyzer_read(wtap *wth, int *err)
wth->phdr.caplen = packet_size;
wth->phdr.pkt_encap = wth->file_encap;
- return data_offset;
+ return TRUE;
}
static void