aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2009-04-26 02:59:16 +0000
committerGuy Harris <guy@alum.mit.edu>2009-04-26 02:59:16 +0000
commita043d8482fb1fc3663e029fe365aebbc6087cb84 (patch)
treefe709c987a2585b08cee3d3ab2be1068217cc6d1
parentf71921252e0a3dc26cae9089fe92b4c83027b314 (diff)
Don't do pointer casting - some version of GCC complain about that.
svn path=/trunk/; revision=28153
-rw-r--r--wiretap/pcapng.c70
1 files changed, 43 insertions, 27 deletions
diff --git a/wiretap/pcapng.c b/wiretap/pcapng.c
index 7071de2abd..a3fc86123e 100644
--- a/wiretap/pcapng.c
+++ b/wiretap/pcapng.c
@@ -622,7 +622,7 @@ pcapng_read_packet_block(FILE_T fh, pcapng_block_header_t *bh, pcapng_t *pn, wta
int to_read;
guint64 file_offset64;
pcapng_enhanced_packet_block_t epb;
- pcapng_packet_block_t *pb;
+ pcapng_packet_block_t pb;
guint32 block_total_length;
pcapng_option_header_t oh;
char option_content[100]; /* XXX - size might need to be increased, if we see longer options */
@@ -630,40 +630,56 @@ pcapng_read_packet_block(FILE_T fh, pcapng_block_header_t *bh, pcapng_t *pn, wta
/* "(Enhanced) Packet Block" read fixed part */
errno = WTAP_ERR_CANT_READ;
- bytes_read = file_read(&epb, 1, sizeof epb, fh);
- if (bytes_read != sizeof epb) {
- pcapng_debug0("pcapng_read_packet_block: failed to read packet data");
- *err = file_error(fh);
- return 0;
- }
- block_read = bytes_read;
- pb = (pcapng_packet_block_t *)&epb;
+ if (enhanced) {
+ bytes_read = file_read(&epb, 1, sizeof epb, fh);
+ if (bytes_read != sizeof epb) {
+ pcapng_debug0("pcapng_read_packet_block: failed to read packet data");
+ *err = file_error(fh);
+ return 0;
+ }
+ block_read = bytes_read;
- /* XXX - as we currently ignore the interface id, both packet blocks are the same for us */
- if(pn->byte_swapped) {
- if (enhanced) {
+ /* XXX - as we currently ignore the interface id, both packet blocks are the same for us */
+ if(pn->byte_swapped) {
wblock->data.packet.interface_id = BSWAP32(epb.interface_id);
wblock->data.packet.drops_count = -1; /* invalid */
+ wblock->data.packet.ts_high = BSWAP32(epb.timestamp_high);
+ wblock->data.packet.ts_low = BSWAP32(epb.timestamp_low);
+ wblock->data.packet.cap_len = BSWAP32(epb.captured_len);
+ wblock->data.packet.packet_len = BSWAP32(epb.packet_len);
} else {
- wblock->data.packet.interface_id = BSWAP16(pb->interface_id);
- wblock->data.packet.drops_count = BSWAP16(pb->drops_count);
- }
- wblock->data.packet.ts_high = BSWAP32(epb.timestamp_high);
- wblock->data.packet.ts_low = BSWAP32(epb.timestamp_low);
- wblock->data.packet.cap_len = BSWAP32(epb.captured_len);
- wblock->data.packet.packet_len = BSWAP32(epb.packet_len);
- } else {
- if (enhanced) {
wblock->data.packet.interface_id = epb.interface_id;
wblock->data.packet.drops_count = -1; /* invalid */
+ wblock->data.packet.ts_high = epb.timestamp_high;
+ wblock->data.packet.ts_low = epb.timestamp_low;
+ wblock->data.packet.cap_len = epb.captured_len;
+ wblock->data.packet.packet_len = epb.packet_len;
+ }
+ } else {
+ bytes_read = file_read(&pb, 1, sizeof pb, fh);
+ if (bytes_read != sizeof pb) {
+ pcapng_debug0("pcapng_read_packet_block: failed to read packet data");
+ *err = file_error(fh);
+ return 0;
+ }
+ block_read = bytes_read;
+
+ /* XXX - as we currently ignore the interface id, both packet blocks are the same for us */
+ if(pn->byte_swapped) {
+ wblock->data.packet.interface_id = BSWAP16(pb.interface_id);
+ wblock->data.packet.drops_count = BSWAP16(pb.drops_count);
+ wblock->data.packet.ts_high = BSWAP32(pb.timestamp_high);
+ wblock->data.packet.ts_low = BSWAP32(pb.timestamp_low);
+ wblock->data.packet.cap_len = BSWAP32(pb.captured_len);
+ wblock->data.packet.packet_len = BSWAP32(pb.packet_len);
} else {
- wblock->data.packet.interface_id = pb->interface_id;
- wblock->data.packet.drops_count = pb->drops_count;
+ wblock->data.packet.interface_id = pb.interface_id;
+ wblock->data.packet.drops_count = pb.drops_count;
+ wblock->data.packet.ts_high = pb.timestamp_high;
+ wblock->data.packet.ts_low = pb.timestamp_low;
+ wblock->data.packet.cap_len = pb.captured_len;
+ wblock->data.packet.packet_len = pb.packet_len;
}
- wblock->data.packet.ts_high = epb.timestamp_high;
- wblock->data.packet.ts_low = epb.timestamp_low;
- wblock->data.packet.cap_len = epb.captured_len;
- wblock->data.packet.packet_len = epb.packet_len;
}
pcapng_debug3("pcapng_read_packet_block: packet data: packet_len %u captured_len %u interface_id %u",