aboutsummaryrefslogtreecommitdiffstats
path: root/epan/uat.c
diff options
context:
space:
mode:
authorDario Lombardo <lomato@gmail.com>2016-12-21 11:50:47 +0100
committerMichael Mann <mmann78@netscape.net>2017-01-12 12:39:15 +0000
commit805ddd1addbea96308fe3b790043ec511c73bbfa (patch)
treefbb2f6b1ee81a849e1afd5cac1f180601d9c7273 /epan/uat.c
parent01c8028add4099ad8707302efd9207b82daa7f81 (diff)
uat: add a reset callback.
This function will free the resources allocated by the caller. Change-Id: Ib486c14e4fd3c321662fb71f7fd06733ce9a64a4 Reviewed-on: https://code.wireshark.org/review/19375 Reviewed-by: Peter Wu <peter@lekensteyn.nl> Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/uat.c')
-rw-r--r--epan/uat.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/epan/uat.c b/epan/uat.c
index b3b0f10e9a..ff8b6fb34a 100644
--- a/epan/uat.c
+++ b/epan/uat.c
@@ -51,10 +51,6 @@
static GPtrArray* all_uats = NULL;
-void uat_init(void) {
- all_uats = g_ptr_array_new();
-}
-
uat_t* uat_new(const char* name,
size_t size,
const char* filename,
@@ -67,6 +63,7 @@ uat_t* uat_new(const char* name,
uat_update_cb_t update_cb,
uat_free_cb_t free_cb,
uat_post_update_cb_t post_update_cb,
+ uat_reset_cb_t reset_cb,
uat_field_t* flds_array) {
/* Create new uat */
uat_t* uat = (uat_t *)g_malloc(sizeof(uat_t));
@@ -97,6 +94,7 @@ uat_t* uat_new(const char* name,
uat->update_cb = update_cb;
uat->free_cb = free_cb;
uat->post_update_cb = post_update_cb;
+ uat->reset_cb = reset_cb;
uat->fields = flds_array;
uat->user_data = g_array_new(FALSE,FALSE,(guint)uat->record_size);
uat->raw_data = g_array_new(FALSE,FALSE,(guint)uat->record_size);
@@ -106,7 +104,7 @@ uat_t* uat_new(const char* name,
uat->from_global = FALSE;
uat->rep = NULL;
uat->free_rep = NULL;
- uat->help = help;
+ uat->help = g_strdup(help);
uat->flags = flags;
for (i=0;flds_array[i].title;i++) {
@@ -390,12 +388,6 @@ gboolean uat_save(uat_t* uat, char** error) {
return TRUE;
}
-void uat_destroy(uat_t* uat) {
- /* XXX still missing a destructor */
- g_ptr_array_remove(all_uats,uat);
-
-}
-
uat_t *uat_find(gchar *name) {
guint i;
@@ -430,6 +422,10 @@ void uat_clear(uat_t* uat) {
*((uat)->user_ptr) = NULL;
*((uat)->nrows_p) = 0;
+
+ if (uat->reset_cb) {
+ uat->reset_cb();
+ }
}
void uat_unload_all(void) {
@@ -445,15 +441,27 @@ void uat_unload_all(void) {
}
}
-#if 0
-static void uat_cleanup(void) {
- while( all_uats->len ) {
- uat_destroy((uat_t*)all_uats->pdata);
+void uat_cleanup(void) {
+ guint i;
+ guint j;
+ uat_t* uat;
+
+ for (i = 0; i < all_uats->len; i++) {
+ uat = (uat_t *)g_ptr_array_index(all_uats, i);
+ uat_clear(uat);
+ g_free(uat->help);
+ g_free(uat->name);
+ g_free(uat->filename);
+ g_array_free(uat->user_data, TRUE);
+ g_array_free(uat->raw_data, TRUE);
+ g_array_free(uat->valid_data, TRUE);
+ for (j = 0; uat->fields[j].title; j++)
+ g_free(uat->fields[j].priv);
+ g_free(uat);
}
g_ptr_array_free(all_uats,TRUE);
}
-#endif
void uat_foreach_table(uat_cb_t cb,void* user_data) {
guint i;
@@ -463,7 +471,6 @@ void uat_foreach_table(uat_cb_t cb,void* user_data) {
}
-
void uat_load_all(void) {
guint i;
gchar* err;