From dd5907d2a3f6d0ac572a76770b43422b0b82c2ab Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Wed, 7 Jul 2021 22:43:29 -0700 Subject: [PATCH] Consistently refer to blocks that have been modified as "modified". "User" sounds as if the blocks belong to the user; at most, the current user might have modified them directly, but they might also have, for example, run a Lua script that, unknown to them, modified comments. Also, a file might have "user comments" added by a previous user, who them wrote the file and and provided it to the current user. "Modified" seems a bit clearer than "changed". --- cfile.h | 4 ++-- debian/libwireshark0.symbols | 2 +- editcap.c | 4 ++-- epan/epan.c | 6 +++--- epan/epan.h | 4 ++-- epan/frame_data.c | 2 +- epan/frame_data.h | 2 +- epan/packet.c | 18 ++++++++++++------ epan/wslua/wslua_dumper.c | 8 ++++---- file.c | 28 ++++++++++++++-------------- file.h | 2 +- file_packet_provider.c | 6 +++--- sharkd.c | 18 +++++++++--------- sharkd.h | 4 ++-- sharkd_session.c | 10 +++++----- ui/qt/packet_list.cpp | 6 +++--- ui/tap_export_pdu.c | 8 ++++---- wiretap/erf.c | 4 ++-- wiretap/wtap.c | 4 ++-- wiretap/wtap.h | 14 +++++++------- 20 files changed, 80 insertions(+), 74 deletions(-) diff --git a/cfile.h b/cfile.h index 61d9e43837..99d0ef59da 100644 --- a/cfile.h +++ b/cfile.h @@ -131,8 +131,8 @@ extern void cap_file_init(capture_file *cf); const char *cap_file_provider_get_interface_name(struct packet_provider_data *prov, guint32 interface_id); const char *cap_file_provider_get_interface_description(struct packet_provider_data *prov, guint32 interface_id); -wtap_block_t cap_file_provider_get_user_block(struct packet_provider_data *prov, const frame_data *fd); -void cap_file_provider_set_user_block(struct packet_provider_data *prov, frame_data *fd, const wtap_block_t new_block); +wtap_block_t cap_file_provider_get_modified_block(struct packet_provider_data *prov, const frame_data *fd); +void cap_file_provider_set_modified_block(struct packet_provider_data *prov, frame_data *fd, const wtap_block_t new_block); #ifdef __cplusplus } diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols index 30d847ca20..54de56216c 100644 --- a/debian/libwireshark0.symbols +++ b/debian/libwireshark0.symbols @@ -558,8 +558,8 @@ libwireshark.so.0 libwireshark0 #MINVER# epan_get_compiled_version_info@Base 1.9.1 epan_get_interface_description@Base 2.3.0 epan_get_interface_name@Base 1.99.2 + epan_get_modified_block@Base 3.5.0 epan_get_runtime_version_info@Base 1.9.1 - epan_get_user_block@Base 3.5.0 epan_get_version@Base 1.9.1 epan_get_version_number@Base 2.5.0 epan_init@Base 2.9.0 diff --git a/editcap.c b/editcap.c index 851dca5561..a3cb393b85 100644 --- a/editcap.c +++ b/editcap.c @@ -2186,12 +2186,12 @@ main(int argc, char *argv[]) temp_rec = *rec; /* The comment is not modified by dumper, cast away. */ wtap_block_add_string_option(rec->block, OPT_COMMENT, (char *)comment, strlen((char *)comment)); - temp_rec.has_block_changed = TRUE; + temp_rec.block_was_modified = TRUE; rec = &temp_rec; } else { /* Copy and change rather than modify returned rec */ temp_rec = *rec; - temp_rec.has_block_changed = FALSE; + temp_rec.block_was_modified = FALSE; rec = &temp_rec; } } diff --git a/epan/epan.c b/epan/epan.c index bd17666f79..1eea3d1906 100644 --- a/epan/epan.c +++ b/epan/epan.c @@ -449,10 +449,10 @@ epan_new(struct packet_provider_data *prov, } wtap_block_t -epan_get_user_block(const epan_t *session, const frame_data *fd) +epan_get_modified_block(const epan_t *session, const frame_data *fd) { - if (session->funcs.get_user_block) - return session->funcs.get_user_block(session->prov, fd); + if (session->funcs.get_modified_block) + return session->funcs.get_modified_block(session->prov, fd); return NULL; } diff --git a/epan/epan.h b/epan/epan.h index dc42541d93..dd322644e4 100644 --- a/epan/epan.h +++ b/epan/epan.h @@ -50,7 +50,7 @@ struct packet_provider_funcs { const nstime_t *(*get_frame_ts)(struct packet_provider_data *prov, guint32 frame_num); const char *(*get_interface_name)(struct packet_provider_data *prov, guint32 interface_id); const char *(*get_interface_description)(struct packet_provider_data *prov, guint32 interface_id); - wtap_block_t (*get_user_block)(struct packet_provider_data *prov, const frame_data *fd); + wtap_block_t (*get_modified_block)(struct packet_provider_data *prov, const frame_data *fd); }; /** @@ -154,7 +154,7 @@ typedef struct epan_session epan_t; WS_DLL_PUBLIC epan_t *epan_new(struct packet_provider_data *prov, const struct packet_provider_funcs *funcs); -WS_DLL_PUBLIC wtap_block_t epan_get_user_block(const epan_t *session, const frame_data *fd); +WS_DLL_PUBLIC wtap_block_t epan_get_modified_block(const epan_t *session, const frame_data *fd); WS_DLL_PUBLIC const char *epan_get_interface_name(const epan_t *session, guint32 interface_id); diff --git a/epan/frame_data.c b/epan/frame_data.c index 8cc35ee374..c60271e674 100644 --- a/epan/frame_data.c +++ b/epan/frame_data.c @@ -219,7 +219,7 @@ frame_data_init(frame_data *fdata, guint32 num, const wtap_rec *rec, fdata->tsprec = (unsigned int)rec->tsprec; fdata->abs_ts = rec->ts; fdata->has_phdr_block = (rec->block != NULL); - fdata->has_user_block = 0; + fdata->has_modified_block = 0; fdata->need_colorize = 0; fdata->color_filter = NULL; fdata->shift_offset.secs = 0; diff --git a/epan/frame_data.h b/epan/frame_data.h index 00d7585ef3..004d931830 100644 --- a/epan/frame_data.h +++ b/epan/frame_data.h @@ -85,7 +85,7 @@ typedef struct _frame_data { unsigned int ignored : 1; /**< 1 = ignore this frame, 0 = normal */ unsigned int has_ts : 1; /**< 1 = has time stamp, 0 = no time stamp */ unsigned int has_phdr_block : 1; /** 1 = there's a block (possibly with options) for this packet */ - unsigned int has_user_block : 1; /** 1 = user changed block (or its options) for this packet */ + unsigned int has_modified_block : 1; /** 1 = block for this packet has been modified */ unsigned int need_colorize : 1; /**< 1 = need to (re-)calculate packet color */ unsigned int tsprec : 4; /**< Time stamp precision -2^tsprec gives up to femtoseconds */ nstime_t abs_ts; /**< Absolute timestamp */ diff --git a/epan/packet.c b/epan/packet.c index 969c77b056..c2eb0c9c75 100644 --- a/epan/packet.c +++ b/epan/packet.c @@ -583,9 +583,12 @@ dissect_record(epan_dissect_t *edt, int file_type_subtype, frame_delta_abs_time(edt->session, fd, fd->frame_ref_num, &edt->pi.rel_ts); - /* pkt block use first user, later from rec */ - if (fd->has_user_block) { - frame_dissector_data.pkt_block = epan_get_user_block(edt->session, fd); + /* + * If the block has been modified, use the modified block, + * otherwise use the block from the file. + */ + if (fd->has_modified_block) { + frame_dissector_data.pkt_block = epan_get_modified_block(edt->session, fd); } else if (fd->has_phdr_block) { frame_dissector_data.pkt_block = rec->block; @@ -657,9 +660,12 @@ dissect_file(epan_dissect_t *edt, wtap_rec *rec, TRY { - /* pkt block use first user, later from rec */ - if (fd->has_user_block) { - file_dissector_data.pkt_block = epan_get_user_block(edt->session, fd); + /* + * If the block has been modified, use the modified block, + * otherwise use the block from the file. + */ + if (fd->has_modified_block) { + file_dissector_data.pkt_block = epan_get_modified_block(edt->session, fd); } else if (fd->has_phdr_block) { file_dissector_data.pkt_block = rec->block; diff --git a/epan/wslua/wslua_dumper.c b/epan/wslua/wslua_dumper.c index b733a19578..4f6527c8af 100644 --- a/epan/wslua/wslua_dumper.c +++ b/epan/wslua/wslua_dumper.c @@ -541,12 +541,12 @@ WSLUA_METHOD Dumper_dump_current(lua_State* L) { /* * wtap_dump does not modify rec.block, so it should be possible to - * pass epan_get_user_block() or lua_pinfo->rec->block directly. + * pass epan_get_modified_block() or lua_pinfo->rec->block directly. * Temporarily duplicating the memory should not hurt though. */ - if (lua_pinfo->fd->has_user_block) { - rec.block = epan_get_user_block(lua_pinfo->epan, lua_pinfo->fd); - rec.has_block_changed = TRUE; + if (lua_pinfo->fd->has_modified_block) { + rec.block = epan_get_modified_block(lua_pinfo->epan, lua_pinfo->fd); + rec.block_was_modified = TRUE; } else if (lua_pinfo->fd->has_phdr_block) { rec.block = lua_pinfo->rec->block; } diff --git a/file.c b/file.c index 44f2958686..67186813bb 100644 --- a/file.c +++ b/file.c @@ -252,7 +252,7 @@ ws_epan_new(capture_file *cf) ws_get_frame_ts, cap_file_provider_get_interface_name, cap_file_provider_get_interface_description, - cap_file_provider_get_user_block + cap_file_provider_get_modified_block }; return epan_new(&cf->provider, &funcs); @@ -4003,9 +4003,9 @@ cf_update_section_comment(capture_file *cf, gchar *comment) wtap_block_t cf_get_packet_block(capture_file *cf, const frame_data *fd) { - /* fetch user block */ - if (fd->has_user_block) - return wtap_block_ref(cap_file_provider_get_user_block(&cf->provider, fd)); + /* If this block has been modified, fetch the modified version */ + if (fd->has_modified_block) + return wtap_block_ref(cap_file_provider_get_modified_block(&cf->provider, fd)); /* fetch phdr block */ if (fd->has_phdr_block) { @@ -4033,20 +4033,20 @@ cf_get_packet_block(capture_file *cf, const frame_data *fd) * Update(replace) the block on a capture from a frame */ gboolean -cf_set_user_packet_block(capture_file *cf, frame_data *fd, const wtap_block_t new_block) +cf_set_modified_block(capture_file *cf, frame_data *fd, const wtap_block_t new_block) { wtap_block_t pkt_block = cf_get_packet_block(cf, fd); - /* It's possible to edit the user block "in place" by doing a call to - * cf_get_packet_block() that returns an already created user block, - * editing that, and calling this function. + /* It's possible to further modify the modified block "in place" by doing + * a call to cf_get_packet_block() that returns an already created modified + * block, modifying that, and calling this function. * If the caller did that, then the block pointers will be equal. */ if (pkt_block == new_block) { /* No need to save anything here, the caller changes went right * onto the block. * Unfortunately we don't have a way to know how many comments were in the block - * before the caller edited it. + * before the caller modified it. */ } else { @@ -4056,7 +4056,7 @@ cf_set_user_packet_block(capture_file *cf, frame_data *fd, const wtap_block_t ne if (new_block) cf->packet_comment_count += wtap_block_count_option(new_block, OPT_COMMENT); - cap_file_provider_set_user_block(&cf->provider, fd, new_block); + cap_file_provider_set_modified_block(&cf->provider, fd, new_block); expert_update_comment_count(cf->packet_comment_count); } @@ -4147,12 +4147,12 @@ save_record(capture_file *cf, frame_data *fdata, wtap_rec *rec, /* Make changes based on anything that the user has done but that hasn't been saved yet. */ - if (fdata->has_user_block) - pkt_block = cap_file_provider_get_user_block(&cf->provider, fdata); + if (fdata->has_modified_block) + pkt_block = cap_file_provider_get_modified_block(&cf->provider, fdata); else pkt_block = rec->block; new_rec.block = pkt_block; - new_rec.has_block_changed = fdata->has_user_block ? TRUE : FALSE; + new_rec.block_was_modified = fdata->has_modified_block ? TRUE : FALSE; /* XXX - what if times have been shifted? */ /* and save the packet */ @@ -4770,7 +4770,7 @@ cf_save_records(capture_file *cf, const char *fname, guint save_format, // XXX: This also ignores non-comment options like verdict fdata->has_phdr_block = FALSE; - fdata->has_user_block = FALSE; + fdata->has_modified_block = FALSE; } if (cf->provider.frames_edited_blocks) { diff --git a/file.h b/file.h index 295ce03d5b..0de3e3017c 100644 --- a/file.h +++ b/file.h @@ -706,7 +706,7 @@ wtap_block_t cf_get_packet_block(capture_file *cf, const frame_data *fd); * @param fd the frame_data structure for the frame * @param new_block the block replacing the old block */ -gboolean cf_set_user_packet_block(capture_file *cf, frame_data *fd, wtap_block_t new_block); +gboolean cf_set_modified_block(capture_file *cf, frame_data *fd, wtap_block_t new_block); /** * What types of comments does this file have? diff --git a/file_packet_provider.c b/file_packet_provider.c index 2411ac5481..282f0b8733 100644 --- a/file_packet_provider.c +++ b/file_packet_provider.c @@ -70,7 +70,7 @@ cap_file_provider_get_interface_description(struct packet_provider_data *prov, g } wtap_block_t -cap_file_provider_get_user_block(struct packet_provider_data *prov, const frame_data *fd) +cap_file_provider_get_modified_block(struct packet_provider_data *prov, const frame_data *fd) { if (prov->frames_edited_blocks) return (wtap_block_t)g_tree_lookup(prov->frames_edited_blocks, fd); @@ -80,7 +80,7 @@ cap_file_provider_get_user_block(struct packet_provider_data *prov, const frame_ } void -cap_file_provider_set_user_block(struct packet_provider_data *prov, frame_data *fd, wtap_block_t new_block) +cap_file_provider_set_modified_block(struct packet_provider_data *prov, frame_data *fd, wtap_block_t new_block) { if (!prov->frames_edited_blocks) prov->frames_edited_blocks = g_tree_new_full(frame_cmp, NULL, NULL, (GDestroyNotify)wtap_block_unref); @@ -88,5 +88,5 @@ cap_file_provider_set_user_block(struct packet_provider_data *prov, frame_data * /* insert new packet block */ g_tree_replace(prov->frames_edited_blocks, fd, (gpointer)new_block); - fd->has_user_block = TRUE; + fd->has_modified_block = TRUE; } diff --git a/sharkd.c b/sharkd.c index deac44b06f..3eb5fbd0c6 100644 --- a/sharkd.c +++ b/sharkd.c @@ -241,7 +241,7 @@ sharkd_epan_new(capture_file *cf) sharkd_get_frame_ts, cap_file_provider_get_interface_name, cap_file_provider_get_interface_description, - cap_file_provider_get_user_block + cap_file_provider_get_modified_block }; return epan_new(&cf->provider, &funcs); @@ -769,25 +769,25 @@ sharkd_filter(const char *dftext, guint8 **result) } /* - * Get the user block if available, nothing otherwise. + * Get the modified block if available, nothing otherwise. * Must be cloned if changes desired. */ wtap_block_t -sharkd_get_user_block(const frame_data *fd) +sharkd_get_modified_block(const frame_data *fd) { - return cap_file_provider_get_user_block(&cfile.provider, fd); + return cap_file_provider_get_modified_block(&cfile.provider, fd); } /* - * Gets the user block if available, otherwise the packet's default block, + * Gets the modified block if available, otherwise the packet's default block, * or a new packet block. * User must wtap_block_unref() it when done. */ wtap_block_t sharkd_get_packet_block(const frame_data *fd) { - if (fd->has_user_block) - return wtap_block_ref(cap_file_provider_get_user_block(&cfile.provider, fd)); + if (fd->has_modified_block) + return wtap_block_ref(cap_file_provider_get_modified_block(&cfile.provider, fd)); if (fd->has_phdr_block) { wtap_rec rec; /* Record metadata */ @@ -814,9 +814,9 @@ sharkd_get_packet_block(const frame_data *fd) } int -sharkd_set_user_block(frame_data *fd, wtap_block_t new_block) +sharkd_set_modified_block(frame_data *fd, wtap_block_t new_block) { - cap_file_provider_set_user_block(&cfile.provider, fd, new_block); + cap_file_provider_set_modified_block(&cfile.provider, fd, new_block); return 0; } diff --git a/sharkd.h b/sharkd.h index 5d21d61a04..a6f018031f 100644 --- a/sharkd.h +++ b/sharkd.h @@ -36,9 +36,9 @@ int sharkd_filter(const char *dftext, guint8 **result); frame_data *sharkd_get_frame(guint32 framenum); int sharkd_dissect_columns(frame_data *fdata, guint32 frame_ref_num, guint32 prev_dis_num, column_info *cinfo, gboolean dissect_color); int sharkd_dissect_request(guint32 framenum, guint32 frame_ref_num, guint32 prev_dis_num, sharkd_dissect_func_t cb, guint32 dissect_flags, void *data); -wtap_block_t sharkd_get_user_block(const frame_data *fd); +wtap_block_t sharkd_get_modified_block(const frame_data *fd); wtap_block_t sharkd_get_packet_block(const frame_data *fd); -int sharkd_set_user_block(frame_data *fd, wtap_block_t new_block); +int sharkd_set_modified_block(frame_data *fd, wtap_block_t new_block); const char *sharkd_version(void); /* sharkd_daemon.c */ diff --git a/sharkd_session.c b/sharkd_session.c index c282a6a439..1f542dd211 100644 --- a/sharkd_session.c +++ b/sharkd_session.c @@ -1444,9 +1444,9 @@ sharkd_session_process_frames(const char *buf, const jsmntok_t *tokens, int coun sharkd_json_value_anyf("num", "%u", framenum); - if (fdata->has_user_block || fdata->has_phdr_block) + if (fdata->has_modified_block || fdata->has_phdr_block) { - if (!fdata->has_user_block || sharkd_get_user_block(fdata) != NULL) + if (!fdata->has_modified_block || sharkd_get_modified_block(fdata) != NULL) sharkd_json_value_anyf("ct", "true"); } @@ -3355,8 +3355,8 @@ sharkd_session_process_frame_cb(epan_dissect_t *edt, proto_tree *tree, struct ep sharkd_json_result_prologue(rpcid); - if (fdata->has_user_block) - pkt_block = sharkd_get_user_block(fdata); + if (fdata->has_modified_block) + pkt_block = sharkd_get_modified_block(fdata); else if (fdata->has_phdr_block) pkt_block = pi->rec->block; @@ -4241,7 +4241,7 @@ sharkd_session_process_setcomment(char *buf, const jsmntok_t *tokens, int count) } else { - sharkd_set_user_block(fdata, pkt_block); + sharkd_set_modified_block(fdata, pkt_block); sharkd_json_simple_ok(rpcid); } diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index 0862ff8227..c1489952d1 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -1415,7 +1415,7 @@ void PacketList::addPacketComment(QString new_comment) QByteArray ba = new_comment.toLocal8Bit(); wtap_block_add_string_option(pkt_block, OPT_COMMENT, ba.data(), ba.size()); - cf_set_user_packet_block(cap_file_, fdata, pkt_block); + cf_set_modified_block(cap_file_, fdata, pkt_block); redrawVisiblePackets(); } @@ -1441,7 +1441,7 @@ void PacketList::setPacketComment(guint c_number, QString new_comment) wtap_block_set_nth_string_option_value(pkt_block, OPT_COMMENT, c_number, ba.data(), ba.size()); } - cf_set_user_packet_block(cap_file_, fdata, pkt_block); + cf_set_modified_block(cap_file_, fdata, pkt_block); redrawVisiblePackets(); } @@ -1495,7 +1495,7 @@ void PacketList::deleteAllPacketComments() for (i = 0; i < n_comments; i++) { wtap_block_remove_nth_option_instance(pkt_block, OPT_COMMENT, 0); } - cf_set_user_packet_block(cap_file_, fdata, pkt_block); + cf_set_modified_block(cap_file_, fdata, pkt_block); } cap_file_->packet_comment_count = 0; diff --git a/ui/tap_export_pdu.c b/ui/tap_export_pdu.c index 1a2bf001a6..6364169138 100644 --- a/ui/tap_export_pdu.c +++ b/ui/tap_export_pdu.c @@ -60,11 +60,11 @@ export_pdu_packet(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const rec.rec_header.packet_header.pkt_encap = exp_pdu_tap_data->pkt_encap; /* rec.opt_block is not modified by wtap_dump, but if for some reason the - * epan_get_user_block() or pinfo->rec->block are invalidated, + * epan_get_modified_block() or pinfo->rec->block are invalidated, * copying it here does not hurt. (Can invalidation really happen?) */ - if (pinfo->fd->has_user_block) { - rec.block = epan_get_user_block(edt->session, pinfo->fd); - rec.has_block_changed = TRUE; + if (pinfo->fd->has_modified_block) { + rec.block = epan_get_modified_block(edt->session, pinfo->fd); + rec.block_was_modified = TRUE; } else if (pinfo->fd->has_phdr_block) { rec.block = pinfo->rec->block; } diff --git a/wiretap/erf.c b/wiretap/erf.c index 4ff5a01b98..fde4f20289 100644 --- a/wiretap/erf.c +++ b/wiretap/erf.c @@ -1982,11 +1982,11 @@ static gboolean erf_dump( * construct a new header with additional Host ID and Anchor ID * and insert a metadata record before that frame */ /*XXX: The user may have changed the comment to cleared! */ - if(rec->has_block_changed) { + if(rec->block_was_modified) { if (encap == WTAP_ENCAP_ERF) { /* XXX: What about ERF-in-pcapng with existing comment (that wasn't * modified)? */ - if(rec->has_block_changed) { + if(rec->block_was_modified) { memmove(&other_phdr, pseudo_header, sizeof(union wtap_pseudo_header)); if(!erf_write_anchor_meta_update_phdr(wdh, dump_priv, rec, &other_phdr, err)) return FALSE; pseudo_header = &other_phdr; diff --git a/wiretap/wtap.c b/wiretap/wtap.c index b69f1ac47e..c652cbc7ad 100644 --- a/wiretap/wtap.c +++ b/wiretap/wtap.c @@ -1516,7 +1516,7 @@ wtap_init_rec(wtap *wth, wtap_rec *rec) rec->rec_header.packet_header.pkt_encap = wth->file_encap; rec->tsprec = wth->file_tsprec; rec->block = NULL; - rec->has_block_changed = FALSE; + rec->block_was_modified = FALSE; } gboolean @@ -1675,7 +1675,7 @@ wtap_rec_cleanup(wtap_rec *rec) { wtap_block_unref(rec->block); rec->block = NULL; - rec->has_block_changed = FALSE; + rec->block_was_modified = FALSE; ws_buffer_free(&rec->options_buf); } diff --git a/wiretap/wtap.h b/wiretap/wtap.h index 0eff12953a..598d24a3f4 100644 --- a/wiretap/wtap.h +++ b/wiretap/wtap.h @@ -1331,10 +1331,10 @@ typedef struct { } wtap_custom_block_header; typedef struct { - guint rec_type; /* what type of record is this? */ - guint32 presence_flags; /* what stuff do we have? */ - nstime_t ts; /* time stamp */ - int tsprec; /* WTAP_TSPREC_ value for this record */ + guint rec_type; /* what type of record is this? */ + guint32 presence_flags; /* what stuff do we have? */ + nstime_t ts; /* time stamp */ + int tsprec; /* WTAP_TSPREC_ value for this record */ union { wtap_packet_header packet_header; wtap_ft_specific_header ft_specific_header; @@ -1343,14 +1343,14 @@ typedef struct { wtap_custom_block_header custom_block_header; } rec_header; - wtap_block_t block; /* packet block; holds comments and verdicts in its options */ - gboolean has_block_changed; /* TRUE if ANY aspect of the block has changed */ + wtap_block_t block ; /* packet block; holds comments and verdicts in its options */ + gboolean block_was_modified; /* TRUE if ANY aspect of the block has been modified */ /* * We use a Buffer so that we don't have to allocate and free * a buffer for the options for each record. */ - Buffer options_buf; /* file-type specific data */ + Buffer options_buf; /* file-type specific data */ } wtap_rec; /*