From b8b3531883db249be80e217154c7e7fffb86f5bd Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sun, 14 Feb 2021 00:34:10 -0800 Subject: wiretap: register most built-in file types from its module. Remove most of the built-in file types from the table in wiretap/file_access.c and, instead, have the file types register themselves, using wtap_register_file_type_subtypes(). This reduces the source code changes needed to add a new file type from three (add the handler, add the file type to the table in file_access.c, add a #define for the file type in wiretap/wtap.h) to one (add the handler). (It also requires adding the handler's source file to wiretap/CMakeLists.txt, but that's required in both cases.) A few remain because the WTAP_FILE_TYPE_SUBTYPE_ #define is used elsewhere; that needs to be fixed. Fix the wiretap/CMakefile.txt file to scan k12text.l, as that now contains a registration routine. In the process, avoid scanning files that don't implement a file type and won't ever have a registration routine. Add a Lua routine to fetch the total number of file types; we use that in some code to construct the wtap_filetypes table, which we need to do in order to continue to have all the values that used to come from the WTAP_FILE_TYPE_SUBTYPE_ types. While we're at it, add modelines to a file that lacked them. --- wiretap/commview.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'wiretap/commview.c') diff --git a/wiretap/commview.c b/wiretap/commview.c index 08910dad16..68d04ef76a 100644 --- a/wiretap/commview.c +++ b/wiretap/commview.c @@ -89,6 +89,10 @@ static gboolean commview_read_header(commview_header_t *cv_hdr, FILE_T fh, static gboolean commview_dump(wtap_dumper *wdh, const wtap_rec *rec, const guint8 *pd, int *err, gchar **err_info); +static int commview_file_type_subtype = -1; + +void register_commview(void); + wtap_open_return_val commview_open(wtap *wth, int *err, gchar **err_info) { commview_header_t cv_hdr; @@ -122,7 +126,7 @@ wtap_open_return_val commview_open(wtap *wth, int *err, gchar **err_info) wth->subtype_read = commview_read; wth->subtype_seek_read = commview_seek_read; - wth->file_type_subtype = WTAP_FILE_TYPE_SUBTYPE_COMMVIEW; + wth->file_type_subtype = commview_file_type_subtype; wth->file_encap = WTAP_ENCAP_PER_PACKET; wth->file_tsprec = WTAP_TSPREC_USEC; @@ -596,6 +600,19 @@ static gboolean commview_dump(wtap_dumper *wdh, return TRUE; } +static const struct file_type_subtype_info commview_info = { + "TamoSoft CommView", "commview", "ncf", NULL, + FALSE, FALSE, 0, + commview_dump_can_write_encap, commview_dump_open, NULL +}; + +void register_commview(void) +{ + commview_file_type_subtype = + wtap_register_file_type_subtypes(&commview_info, + WTAP_FILE_TYPE_SUBTYPE_UNKNOWN); +} + /* * Editor modelines - https://www.wireshark.org/tools/modelines.html * -- cgit v1.2.3