diff options
author | Anders Broman <anders.broman@ericsson.com> | 2013-03-17 09:20:13 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2013-03-17 09:20:13 +0000 |
commit | 05a8c94ddf4bc48888d3dfbdcfff3eddc0f15093 (patch) | |
tree | 97ab76474fb96e5d33e9769d8a50ed6f584bbe9f /wiretap/netxray.c | |
parent | 2e52e2ac997ca58caabee3270b5a6c3f96159ff0 (diff) |
From beroset:
implemented wtap_dump_file_seek() and _tell()
implemented the previously declared but unimplemented wtap_dump_file_seek() and wtap_dump_file_tell() functions and used them in the seven files that had previously used a plain ftell or fseek and added error checking as appropriate. I also added a new error WTAP_ERR_CANT_SEEK_COMPRESSED and put it next to WTAP_ERR_CANT_SEEK causing renumbering of two of the existing error codes.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8416
svn path=/trunk/; revision=48348
Diffstat (limited to 'wiretap/netxray.c')
-rw-r--r-- | wiretap/netxray.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/wiretap/netxray.c b/wiretap/netxray.c index 19bcc9b129..8acf26a86e 100644 --- a/wiretap/netxray.c +++ b/wiretap/netxray.c @@ -1520,10 +1520,8 @@ gboolean netxray_dump_open_1_1(wtap_dumper *wdh, int *err) haven't yet written any packets. As we'll have to rewrite the header when we've written out all the packets, we just skip over the header for now. */ - if (fseek(wdh->fh, CAPTUREFILE_HEADER_SIZE, SEEK_SET) == -1) { - *err = errno; + if (wtap_dump_file_seek(wdh, CAPTUREFILE_HEADER_SIZE, SEEK_SET, err) == -1) return FALSE; - } wdh->bytes_dumped += CAPTUREFILE_HEADER_SIZE; netxray = (netxray_dump_t *)g_malloc(sizeof(netxray_dump_t)); @@ -1593,13 +1591,15 @@ static gboolean netxray_dump_close_1_1(wtap_dumper *wdh, int *err) { char hdr_buf[CAPTUREFILE_HEADER_SIZE - sizeof(netxray_magic)]; netxray_dump_t *netxray = (netxray_dump_t *)wdh->priv; - guint32 filelen; + gint64 filelen; struct netxray_hdr file_hdr; - filelen = (guint32)ftell(wdh->fh); /* XXX - large files? */ + if (-1 == (filelen = wtap_dump_file_tell(wdh, err))) + return FALSE; /* Go back to beginning */ - fseek(wdh->fh, 0, SEEK_SET); + if (wtap_dump_file_seek(wdh, 0, SEEK_SET, err) == -1) + return FALSE; /* Rewrite the file header. */ if (!wtap_dump_file_write(wdh, netxray_magic, sizeof netxray_magic, err)) @@ -1611,7 +1611,8 @@ static gboolean netxray_dump_close_1_1(wtap_dumper *wdh, int *err) file_hdr.start_time = htolel(netxray->start.secs); file_hdr.nframes = htolel(netxray->nframes); file_hdr.start_offset = htolel(CAPTUREFILE_HEADER_SIZE); - file_hdr.end_offset = htolel(filelen); + /* XXX - large files? */ + file_hdr.end_offset = htolel((guint32)filelen); file_hdr.network = wtap_encap_to_netxray_1_1_encap(wdh->encap); file_hdr.timelo = htolel(0); file_hdr.timehi = htolel(0); @@ -1679,10 +1680,9 @@ gboolean netxray_dump_open_2_0(wtap_dumper *wdh, int *err) haven't yet written any packets. As we'll have to rewrite the header when we've written out all the packets, we just skip over the header for now. */ - if (fseek(wdh->fh, CAPTUREFILE_HEADER_SIZE, SEEK_SET) == -1) { - *err = errno; + if (wtap_dump_file_seek(wdh, CAPTUREFILE_HEADER_SIZE, SEEK_SET, err) == -1) return FALSE; - } + wdh->bytes_dumped += CAPTUREFILE_HEADER_SIZE; netxray = (netxray_dump_t *)g_malloc(sizeof(netxray_dump_t)); @@ -1771,13 +1771,15 @@ static gboolean netxray_dump_close_2_0(wtap_dumper *wdh, int *err) { char hdr_buf[CAPTUREFILE_HEADER_SIZE - sizeof(netxray_magic)]; netxray_dump_t *netxray = (netxray_dump_t *)wdh->priv; - guint32 filelen; + gint64 filelen; struct netxray_hdr file_hdr; - filelen = (guint32)ftell(wdh->fh); /* XXX - large files? */ + if (-1 == (filelen = wtap_dump_file_tell(wdh, err))) + return FALSE; /* Go back to beginning */ - fseek(wdh->fh, 0, SEEK_SET); + if (wtap_dump_file_seek(wdh, 0, SEEK_SET, err) == -1) + return FALSE; /* Rewrite the file header. */ if (!wtap_dump_file_write(wdh, netxray_magic, sizeof netxray_magic, err)) @@ -1789,7 +1791,8 @@ static gboolean netxray_dump_close_2_0(wtap_dumper *wdh, int *err) file_hdr.start_time = htolel(netxray->start.secs); file_hdr.nframes = htolel(netxray->nframes); file_hdr.start_offset = htolel(CAPTUREFILE_HEADER_SIZE); - file_hdr.end_offset = htolel(filelen); + /* XXX - large files? */ + file_hdr.end_offset = htolel((guint32)filelen); file_hdr.network = wtap_encap_to_netxray_2_0_encap(wdh->encap); file_hdr.timelo = htolel(0); file_hdr.timehi = htolel(0); |