diff options
author | Dario Lombardo <lomato@gmail.com> | 2017-02-08 14:25:57 +0100 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2017-02-18 13:45:14 +0000 |
commit | 6d79055ba651c6f1e45b22960c5fd34c75c95133 (patch) | |
tree | 02b09c689172f03796eeee0dca4e664286b64a9b /wsutil/plugins.c | |
parent | 19b97fbfb0b7aac19c2a2817f4e2cc0f295d4352 (diff) |
wsutil: remove leaks from filesystem and plugins code.
Change-Id: Iac2805c0130bd2ba6cdb3c9dd997050274d58d99
Reviewed-on: https://code.wireshark.org/review/20020
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'wsutil/plugins.c')
-rw-r--r-- | wsutil/plugins.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/wsutil/plugins.c b/wsutil/plugins.c index 1f637c552b..2e8b7dcfe8 100644 --- a/wsutil/plugins.c +++ b/wsutil/plugins.c @@ -156,6 +156,10 @@ plugins_scan_dir(const char *dirname, plugin_load_failure_mode mode) gchar *dot; int cr; + if (!g_file_test(dirname, G_FILE_TEST_EXISTS) || !g_file_test(dirname, G_FILE_TEST_IS_DIR)) { + return; + } + if ((dir = ws_dir_open(dirname, 0, NULL)) != NULL) { while ((file = ws_dir_read_name(dir)) != NULL) @@ -180,6 +184,7 @@ plugins_scan_dir(const char *dirname, plugin_load_failure_mode mode) #endif g_snprintf(filename, FILENAME_LEN, "%s" G_DIR_SEPARATOR_S "%s", dirname, name); + if ((handle = g_module_open(filename, G_MODULE_BIND_LOCAL)) == NULL) { /* @@ -265,7 +270,6 @@ plugins_scan_dir(const char *dirname, plugin_load_failure_mode mode) g_free(new_plug); continue; } - } ws_dir_close(dir); } @@ -422,6 +426,29 @@ plugins_dump_all(void) plugins_get_descriptions(print_plugin_description, NULL); } +void +plugins_cleanup(void) +{ + plugin* prev; + plugin* cur; + + if (!plugin_list) + return; + + prev = plugin_list; + cur = plugin_list->next; + + do { + g_free(prev->name); + g_free(prev); + prev = cur; + cur = cur->next; + } while(cur); + + g_free(prev->name); + g_free(prev); +} + #endif /* HAVE_PLUGINS */ /* |