summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epan/epan.c1
-rw-r--r--epan/export_object.c57
-rw-r--r--epan/export_object.h7
-rw-r--r--ui/cli/tap-exportobject.c9
-rw-r--r--ui/gtk/main_menubar.c9
-rw-r--r--ui/qt/main_window.cpp7
-rw-r--r--ui/qt/main_window.h2
7 files changed, 26 insertions, 66 deletions
diff --git a/epan/epan.c b/epan/epan.c
index 16f46b5b25..b79769b24e 100644
--- a/epan/epan.c
+++ b/epan/epan.c
@@ -223,7 +223,6 @@ epan_cleanup(void)
expert_cleanup();
capture_dissector_cleanup();
export_pdu_cleanup();
- export_object_cleanup();
stat_tap_table_cleanup();
follow_cleanup();
disabled_protos_cleanup();
diff --git a/epan/export_object.c b/epan/export_object.c
index d5e4c0eed6..37199fddbf 100644
--- a/epan/export_object.c
+++ b/epan/export_object.c
@@ -35,16 +35,7 @@ struct register_eo {
export_object_gui_reset_cb reset_cb; /* function to parse parameters of optional arguments of tap string */
};
-static GSList *registered_eo_tables = NULL;
-
-static gint
-insert_sorted_by_table_name(gconstpointer aparam, gconstpointer bparam)
-{
- const register_eo_t *a = (const register_eo_t *)aparam;
- const register_eo_t *b = (const register_eo_t *)bparam;
-
- return g_ascii_strcasecmp(proto_get_protocol_filter_name(a->proto_id), proto_get_protocol_filter_name(b->proto_id));
-}
+static wmem_tree_t *registered_eo_tables = NULL;
int
register_export_object(const int proto_id, tap_packet_cb export_packet_func, export_object_gui_reset_cb reset_cb)
@@ -52,14 +43,17 @@ register_export_object(const int proto_id, tap_packet_cb export_packet_func, exp
register_eo_t *table;
DISSECTOR_ASSERT(export_packet_func);
- table = g_new(register_eo_t,1);
+ table = wmem_new(wmem_epan_scope(), register_eo_t);
table->proto_id = proto_id;
- table->tap_listen_str = g_strdup_printf("%s_eo", proto_get_protocol_filter_name(proto_id));
+ table->tap_listen_str = wmem_strdup_printf(wmem_epan_scope(), "%s_eo", proto_get_protocol_filter_name(proto_id));
table->eo_func = export_packet_func;
table->reset_cb = reset_cb;
- registered_eo_tables = g_slist_insert_sorted(registered_eo_tables, table, insert_sorted_by_table_name);
+ if (registered_eo_tables == NULL)
+ registered_eo_tables = wmem_tree_new(wmem_epan_scope());
+
+ wmem_tree_insert_string(registered_eo_tables, wmem_strdup(wmem_epan_scope(), proto_get_protocol_filter_name(proto_id)), table, 0);
return register_tap(table->tap_listen_str);
}
@@ -86,31 +80,14 @@ export_object_gui_reset_cb get_eo_reset_func(register_eo_t* eo)
return eo->reset_cb;
}
-static gint
-find_matching_eo(gconstpointer arg1, gconstpointer arg2)
-{
- register_eo_t *eo = (register_eo_t*)arg1;
- const gchar *name = (const gchar *)arg2;
-
- return strcmp(proto_get_protocol_filter_name(eo->proto_id), name);
-}
-
register_eo_t* get_eo_by_name(const char* name)
{
- GSList *found_eo;
-
- found_eo = g_slist_find_custom(registered_eo_tables,
- (gpointer)name, find_matching_eo);
-
- if (found_eo)
- return (register_eo_t*)found_eo->data;
-
- return NULL;
+ return (register_eo_t*)wmem_tree_lookup_string(registered_eo_tables, name, 0);
}
-void eo_iterate_tables(GFunc func, gpointer user_data)
+void eo_iterate_tables(wmem_foreach_func func, gpointer user_data)
{
- g_slist_foreach(registered_eo_tables, func, user_data);
+ wmem_tree_foreach(registered_eo_tables, func, user_data);
}
static GString *eo_rename(GString *gstr, int dupn)
@@ -198,20 +175,6 @@ void eo_free_entry(export_object_entry_t *entry)
g_free(entry);
}
-static void
-free_eo_table(gpointer p, gpointer user_data _U_)
-{
- register_eo_t *table = (register_eo_t*)p;
- g_free((gpointer)table->tap_listen_str);
- g_free(table);
-}
-
-void export_object_cleanup(void)
-{
- g_slist_foreach(registered_eo_tables, free_eo_table, NULL);
- g_slist_free(registered_eo_tables);
-}
-
/*
* Editor modelines
*
diff --git a/epan/export_object.h b/epan/export_object.h
index 475b1d8f0d..1e0e25e174 100644
--- a/epan/export_object.h
+++ b/epan/export_object.h
@@ -24,6 +24,7 @@
#define __EXPORT_OBJECT_H__
#include "tap.h"
+#include "wmem/wmem.h"
#ifdef __cplusplus
extern "C" {
@@ -111,7 +112,7 @@ WS_DLL_PUBLIC register_eo_t* get_eo_by_name(const char* name);
* @param func action to be performed on all Export Objects
* @param user_data any data needed to help perform function
*/
-WS_DLL_PUBLIC void eo_iterate_tables(GFunc func, gpointer user_data);
+WS_DLL_PUBLIC void eo_iterate_tables(wmem_foreach_func func, gpointer user_data);
/** Find all disallowed characters/bytes and replace them with %xx
*
@@ -135,10 +136,6 @@ WS_DLL_PUBLIC const char *eo_ct2ext(const char *content_type);
*/
WS_DLL_PUBLIC void eo_free_entry(export_object_entry_t *entry);
-/** Free the export objects table
- */
-extern void export_object_cleanup(void);
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/ui/cli/tap-exportobject.c b/ui/cli/tap-exportobject.c
index 7ea0f207b4..91fe5a9086 100644
--- a/ui/cli/tap-exportobject.c
+++ b/ui/cli/tap-exportobject.c
@@ -96,12 +96,11 @@ typedef struct _export_object_list_gui_t {
static GHashTable* eo_opts = NULL;
-static void
-list_exportobject_protocol(gpointer data, gpointer user_data _U_)
+static gboolean
+list_exportobject_protocol(const void *key, void *value _U_, void *userdata _U_)
{
- register_eo_t *eo = (register_eo_t*)data;
-
- fprintf(stderr, " %s\n", proto_get_protocol_filter_name(get_eo_proto_id(eo)));
+ fprintf(stderr, " %s\n", (gchar*)key);
+ return FALSE;
}
void eo_list_object_types(void)
diff --git a/ui/gtk/main_menubar.c b/ui/gtk/main_menubar.c
index 59d2041db6..1ced34fece 100644
--- a/ui/gtk/main_menubar.c
+++ b/ui/gtk/main_menubar.c
@@ -2818,11 +2818,11 @@ menu_exportobject_cb(GtkAction *action _U_, gpointer user_data)
exportobject_cb(eo);
}
-static void
-add_export_object_menuitem(gpointer data, gpointer user_data)
+static gboolean
+add_export_object_menuitem(const void *key _U_, void *value, void *userdata)
{
- register_eo_t *eo = (register_eo_t*)data;
- eo_menu_t *eo_menu_data = (eo_menu_t*)user_data;
+ register_eo_t *eo = (register_eo_t*)value;
+ eo_menu_t *eo_menu_data = (eo_menu_t*)userdata;
gchar *action_name;
GtkAction *action;
@@ -2846,6 +2846,7 @@ add_export_object_menuitem(gpointer data, gpointer user_data)
FALSE);
g_free(action_name);
eo_menu_data->counter++;
+ return FALSE;
}
static void
diff --git a/ui/qt/main_window.cpp b/ui/qt/main_window.cpp
index 9e33774057..45479df68d 100644
--- a/ui/qt/main_window.cpp
+++ b/ui/qt/main_window.cpp
@@ -1986,10 +1986,10 @@ void MainWindow::initConversationMenus()
connect(colorize_action, SIGNAL(triggered()), this, SLOT(colorizeActionTriggered()));
}
-void MainWindow::addExportObjectsMenuItem(gpointer data, gpointer user_data)
+gboolean MainWindow::addExportObjectsMenuItem(const void *key _U_, void *value, void *userdata)
{
- register_eo_t *eo = (register_eo_t*)data;
- MainWindow *window = (MainWindow*)user_data;
+ register_eo_t *eo = (register_eo_t*)value;
+ MainWindow *window = (MainWindow*)userdata;
ExportObjectAction *export_action = new ExportObjectAction(window->main_ui_->menuFileExportObjects, eo);
window->main_ui_->menuFileExportObjects->addAction(export_action);
@@ -2000,6 +2000,7 @@ void MainWindow::addExportObjectsMenuItem(gpointer data, gpointer user_data)
connect(&window->capture_file_, SIGNAL(captureFileOpened()), export_action, SLOT(captureFileOpened()));
connect(&window->capture_file_, SIGNAL(captureFileClosed()), export_action, SLOT(captureFileClosed()));
connect(export_action, SIGNAL(triggered()), window, SLOT(applyExportObject()));
+ return FALSE;
}
void MainWindow::initExportObjectsMenus()
diff --git a/ui/qt/main_window.h b/ui/qt/main_window.h
index 987da8e6f6..29a7cc2117 100644
--- a/ui/qt/main_window.h
+++ b/ui/qt/main_window.h
@@ -300,7 +300,7 @@ private slots:
void initViewColorizeMenu();
void initConversationMenus();
- static void addExportObjectsMenuItem(gpointer data, gpointer user_data);
+ static gboolean addExportObjectsMenuItem(const void *key, void *value, void *userdata);
void initExportObjectsMenus();
// in main_window_slots.cpp