UAT: Add uat_destroy()

Allow freeing/removing a single loaded UAT.
This commit is contained in:
João Valverde 2023-11-07 14:02:44 +00:00
parent eed96b41fb
commit 1e532ee7c3
2 changed files with 29 additions and 11 deletions

View File

@ -495,28 +495,40 @@ void uat_unload_all(void) {
}
}
static void free_uat(uat_t *uat)
{
unsigned j;
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);
}
void uat_cleanup(void) {
unsigned i;
unsigned 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);
free_uat(uat);
}
g_ptr_array_free(all_uats,true);
}
void uat_destroy(uat_t *uat)
{
free_uat(uat);
g_ptr_array_remove(all_uats, uat);
}
void uat_foreach_table(uat_cb_t cb,void* user_data) {
unsigned i;

View File

@ -304,6 +304,12 @@ uat_t* uat_new(const char* name,
uat_reset_cb_t reset_cb,
uat_field_t* flds_array);
/** Free and deregister a single UAT.
*
*/
WS_DLL_PUBLIC
void uat_destroy(uat_t *uat);
/** Cleanup all UATs.
*
*/