forked from osmocom/wireshark
get rid of GTree and use emem trees instead
svn path=/trunk/; revision=23738
This commit is contained in:
parent
ee6c98b8b2
commit
8686381c19
|
@ -32,7 +32,7 @@ struct pref_module {
|
|||
const char *description;/* Description of module (displayed in preferences notebook) */
|
||||
void (*apply_cb)(void); /* routine to call when preferences applied */
|
||||
GList *prefs; /* list of its preferences */
|
||||
GTree *submodules; /* list of its submodules */
|
||||
emem_tree_t *submodules;/* list of its submodules */
|
||||
int numprefs; /* number of non-obsolete preferences */
|
||||
gboolean prefs_changed; /* if TRUE, a preference has changed since we last checked */
|
||||
gboolean obsolete; /* if TRUE, this is a module that used to
|
||||
|
|
82
epan/prefs.c
82
epan/prefs.c
|
@ -110,39 +110,24 @@ static const gchar *gui_layout_content_text[] =
|
|||
/*
|
||||
* List of all modules with preference settings.
|
||||
*/
|
||||
static GTree *modules = NULL;
|
||||
static emem_tree_t *prefs_modules = NULL;
|
||||
|
||||
/*
|
||||
* List of all modules that should show up at the top level of the
|
||||
* tree in the preference dialog box.
|
||||
*/
|
||||
static GTree *top_level_modules = NULL;
|
||||
|
||||
gint
|
||||
cmp_names(gconstpointer a, gconstpointer b)
|
||||
{
|
||||
return g_ascii_strcasecmp((const gchar*)a, (const gchar*)b);
|
||||
}
|
||||
static emem_tree_t *prefs_top_level_modules = NULL;
|
||||
|
||||
/** Sets up memory used by proto routines. Called at program startup */
|
||||
void prefs_init(void)
|
||||
{
|
||||
modules = g_tree_new(cmp_names);
|
||||
top_level_modules = g_tree_new(cmp_names);
|
||||
|
||||
prefs_modules = pe_tree_create(EMEM_TREE_TYPE_RED_BLACK, "prefs_modules");
|
||||
prefs_top_level_modules = pe_tree_create(EMEM_TREE_TYPE_RED_BLACK, "prefs_top_level_modules");
|
||||
}
|
||||
|
||||
/** Frees memory used by proto routines. Called at program shutdown */
|
||||
void prefs_cleanup(void)
|
||||
{
|
||||
if (modules) {
|
||||
g_tree_destroy(modules);
|
||||
modules = NULL;
|
||||
}
|
||||
if (top_level_modules) {
|
||||
g_tree_destroy(top_level_modules);
|
||||
top_level_modules = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -188,9 +173,10 @@ prefs_register_module_or_subtree(module_t *parent, const char *name,
|
|||
module->apply_cb = apply_cb;
|
||||
module->description = description;
|
||||
|
||||
if (prefs_find_module(name) == NULL)
|
||||
g_tree_insert(modules, (gpointer)name, module);
|
||||
|
||||
if (prefs_find_module(name) == NULL) {
|
||||
pe_tree_insert_string(prefs_modules, name, module, EMEM_TREE_STRING_NOCASE);
|
||||
}
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
|
@ -200,7 +186,7 @@ prefs_register_module_or_subtree(module_t *parent, const char *name,
|
|||
module->description = description;
|
||||
module->apply_cb = apply_cb;
|
||||
module->prefs = NULL; /* no preferences, to start */
|
||||
module->submodules = g_tree_new(cmp_names); /* no submodules, to start */
|
||||
module->submodules = pe_tree_create(EMEM_TREE_TYPE_RED_BLACK, "prefs_submodules");
|
||||
module->numprefs = 0;
|
||||
module->prefs_changed = FALSE;
|
||||
module->obsolete = FALSE;
|
||||
|
@ -242,7 +228,7 @@ prefs_register_module_or_subtree(module_t *parent, const char *name,
|
|||
/*
|
||||
* Insert this module in the list of all modules.
|
||||
*/
|
||||
g_tree_insert(modules, (gpointer)name, module);
|
||||
pe_tree_insert_string(prefs_modules, name, module, EMEM_TREE_STRING_NOCASE);
|
||||
} else {
|
||||
/*
|
||||
* This has no name, just a title; check to make sure it's a
|
||||
|
@ -259,12 +245,12 @@ prefs_register_module_or_subtree(module_t *parent, const char *name,
|
|||
/*
|
||||
* It goes at the top.
|
||||
*/
|
||||
g_tree_insert(top_level_modules, (gpointer)title, module);
|
||||
pe_tree_insert_string(prefs_top_level_modules, title, module, EMEM_TREE_STRING_NOCASE);
|
||||
} else {
|
||||
/*
|
||||
* It goes into the list for this module.
|
||||
*/
|
||||
g_tree_insert(parent->submodules, (gpointer)title, module);
|
||||
pe_tree_insert_string(parent->submodules, title, module, EMEM_TREE_STRING_NOCASE);
|
||||
}
|
||||
|
||||
return module;
|
||||
|
@ -394,21 +380,13 @@ static void *discard_const(const void *const_ptr)
|
|||
module_t *
|
||||
prefs_find_module(const char *name)
|
||||
{
|
||||
#if GLIB_MAJOR_VERSION < 2
|
||||
return g_tree_lookup(modules, discard_const(name));
|
||||
#else
|
||||
return g_tree_lookup(modules, name);
|
||||
#endif
|
||||
return pe_tree_lookup_string(prefs_modules, name, EMEM_TREE_STRING_NOCASE);
|
||||
}
|
||||
|
||||
static module_t *
|
||||
find_subtree(module_t *parent, const char *name)
|
||||
{
|
||||
#if GLIB_MAJOR_VERSION < 2
|
||||
return g_tree_lookup(parent ? parent->submodules : top_level_modules, discard_const(name));
|
||||
#else
|
||||
return g_tree_lookup(parent ? parent->submodules : top_level_modules, name);
|
||||
#endif
|
||||
return pe_tree_lookup_string(parent ? parent->submodules : prefs_top_level_modules, name, EMEM_TREE_STRING_NOCASE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -431,7 +409,7 @@ typedef struct {
|
|||
} call_foreach_t;
|
||||
|
||||
static gboolean
|
||||
call_foreach_cb(gpointer key _U_, gpointer value, gpointer data)
|
||||
call_foreach_cb(void *value, void *data)
|
||||
{
|
||||
module_t *module = (module_t*)value;
|
||||
call_foreach_t *call_data = (call_foreach_t*)data;
|
||||
|
@ -443,18 +421,18 @@ call_foreach_cb(gpointer key _U_, gpointer value, gpointer data)
|
|||
}
|
||||
|
||||
static guint
|
||||
prefs_module_list_foreach(GTree *module_list, module_cb callback,
|
||||
prefs_module_list_foreach(emem_tree_t *module_list, module_cb callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
call_foreach_t call_data;
|
||||
|
||||
if (module_list == NULL)
|
||||
module_list = top_level_modules;
|
||||
module_list = prefs_top_level_modules;
|
||||
|
||||
call_data.callback = callback;
|
||||
call_data.user_data = user_data;
|
||||
call_data.ret = 0;
|
||||
g_tree_foreach(module_list, call_foreach_cb, &call_data);
|
||||
pe_tree_foreach(module_list, call_foreach_cb, &call_data);
|
||||
return call_data.ret;
|
||||
}
|
||||
|
||||
|
@ -463,7 +441,15 @@ prefs_module_list_foreach(GTree *module_list, module_cb callback,
|
|||
*/
|
||||
gboolean prefs_module_has_submodules(module_t *module)
|
||||
{
|
||||
return (g_tree_nnodes(module->submodules) > 0);
|
||||
if (module->submodules == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (module->submodules->tree == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -477,7 +463,7 @@ gboolean prefs_module_has_submodules(module_t *module)
|
|||
guint
|
||||
prefs_modules_foreach(module_cb callback, gpointer user_data)
|
||||
{
|
||||
return prefs_module_list_foreach(modules, callback, user_data);
|
||||
return prefs_module_list_foreach(prefs_modules, callback, user_data);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -493,11 +479,11 @@ prefs_modules_foreach(module_cb callback, gpointer user_data)
|
|||
guint
|
||||
prefs_modules_foreach_submodules(module_t *module, module_cb callback, gpointer user_data)
|
||||
{
|
||||
return prefs_module_list_foreach((module)?module->submodules:top_level_modules, callback, user_data);
|
||||
return prefs_module_list_foreach((module)?module->submodules:prefs_top_level_modules, callback, user_data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
call_apply_cb(gpointer key _U_, gpointer value, gpointer data _U_)
|
||||
call_apply_cb(void *value, void *data _U_)
|
||||
{
|
||||
module_t *module = value;
|
||||
|
||||
|
@ -520,7 +506,7 @@ call_apply_cb(gpointer key _U_, gpointer value, gpointer data _U_)
|
|||
void
|
||||
prefs_apply_all(void)
|
||||
{
|
||||
g_tree_foreach(modules, call_apply_cb, NULL);
|
||||
pe_tree_foreach(prefs_modules, call_apply_cb, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -533,7 +519,7 @@ void
|
|||
prefs_apply(module_t *module)
|
||||
{
|
||||
if (module && module->prefs_changed)
|
||||
call_apply_cb((gpointer)module->name, module, NULL);
|
||||
call_apply_cb(module, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2420,7 +2406,7 @@ write_pref(gpointer data, gpointer user_data)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
write_module_prefs(gpointer key _U_, gpointer value, gpointer data)
|
||||
write_module_prefs(void *value, void *data)
|
||||
{
|
||||
write_pref_arg_t arg;
|
||||
|
||||
|
@ -2746,7 +2732,7 @@ write_prefs(char **pf_path_return)
|
|||
|
||||
fprintf(pf, "\n####### Protocols ########\n");
|
||||
|
||||
g_tree_foreach(modules, write_module_prefs, pf);
|
||||
pe_tree_foreach(prefs_modules, write_module_prefs, pf);
|
||||
|
||||
fclose(pf);
|
||||
|
||||
|
|
Loading…
Reference in New Issue