diff options
author | Peter Wu <peter@lekensteyn.nl> | 2018-03-09 19:52:07 +0100 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2018-03-15 20:04:20 +0000 |
commit | dc2f4bdf26ed3f48070604ebe09a623d3f4070e0 (patch) | |
tree | 8febe1951f49b0759fa147744bce4e0920533c6b | |
parent | c7fda768f4558d62803e74c71f56a9b06174bf54 (diff) |
wslua: use Filehandler.extensions for controlling output files
Allow FileHandlers to specify the extension that is used for saved
files. Implementation note: previously "fh->extensions" was unused;
memory is not freed anywhere because registered file handlers can
currently not be destroyed.
Bug: 14386
Change-Id: I65509c10a678fc6af0cf6a4c5c8aed56e79ea34a
Reviewed-on: https://code.wireshark.org/review/26399
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
-rw-r--r-- | epan/wslua/wslua_file_handler.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/epan/wslua/wslua_file_handler.c b/epan/wslua/wslua_file_handler.c index 04935fec9a..f347530cda 100644 --- a/epan/wslua/wslua_file_handler.c +++ b/epan/wslua/wslua_file_handler.c @@ -633,6 +633,7 @@ WSLUA_CONSTRUCTOR FileHandler_new(lua_State* L) { } fh->type = g_strdup(type); + fh->extensions = NULL; fh->finfo.name = g_strdup(name); fh->finfo.short_name = g_strdup(short_name); fh->finfo.default_file_extension = NULL; @@ -718,6 +719,16 @@ WSLUA_FUNCTION wslua_register_filehandler(lua_State* L) { return luaL_error(L,"this FileHandler is not complete enough to register"); if (fh->is_writer) { + if (fh->extensions && fh->extensions[0]) { + char *extension = g_strdup(fh->extensions); + char *extra_extensions = strchr(extension, ';'); + if (extra_extensions) { + /* Split "cap;pcap" -> "cap" and "pcap" */ + *extra_extensions++ = '\0'; + } + fh->finfo.default_file_extension = extension; + fh->finfo.additional_file_extensions = extra_extensions; + } fh->finfo.can_write_encap = wslua_dummy_can_write_encap; fh->finfo.wslua_info = (wtap_wslua_file_info_t*) g_malloc0(sizeof(wtap_wslua_file_info_t)); fh->finfo.wslua_info->wslua_can_write_encap = wslua_filehandler_can_write_encap; @@ -731,7 +742,7 @@ WSLUA_FUNCTION wslua_register_filehandler(lua_State* L) { struct open_info oi = { NULL, OPEN_INFO_HEURISTIC, NULL, NULL, NULL, NULL }; oi.name = fh->finfo.short_name; oi.open_routine = wslua_filehandler_open; - oi.extensions = fh->finfo.additional_file_extensions; + oi.extensions = fh->extensions; oi.wslua_data = (void*)(fh); if (strchr(fh->type,'m') != NULL) { oi.type = OPEN_INFO_MAGIC; @@ -933,13 +944,15 @@ WSLUA_ATTRIBUTE_FUNC_SETTER(FileHandler,write_close); number when the FileHandler is registered. */ WSLUA_ATTRIBUTE_NAMED_NUMBER_GETTER(FileHandler,type,file_type); -/* WSLUA_ATTRIBUTE FileHandler_extensions RW One or more file extensions that this file type usually uses. +/* WSLUA_ATTRIBUTE FileHandler_extensions RW One or more semicolon-separated file extensions that this file type usually uses. For readers using heuristics to determine file type, Wireshark will try the readers of the file's extension first, before trying other readers. But ultimately Wireshark tries all file readers - for any file extension, until it finds one that accepts the file. */ -WSLUA_ATTRIBUTE_NAMED_STRING_GETTER(FileHandler,extensions,finfo.additional_file_extensions); -WSLUA_ATTRIBUTE_NAMED_STRING_SETTER(FileHandler,extensions,finfo.additional_file_extensions,TRUE); + for any file extension, until it finds one that accepts the file. + + (Since 2.6) For writers, the first extension is used to suggest the default file extension. */ +WSLUA_ATTRIBUTE_STRING_GETTER(FileHandler,extensions); +WSLUA_ATTRIBUTE_STRING_SETTER(FileHandler,extensions,TRUE); /* WSLUA_ATTRIBUTE FileHandler_writing_must_seek RW true if the ability to seek is required when writing this file format, else false. |