aboutsummaryrefslogtreecommitdiffstats
path: root/filter/rule-context.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2001-08-08 17:39:56 +0800
committerMichael Zucci <zucchi@src.gnome.org>2001-08-08 17:39:56 +0800
commitbbfda4227e6790fa945368cb5d4cb3d24e4da3d7 (patch)
tree6a451fa92a651f0750f0001e49d8b38a28c90e96 /filter/rule-context.c
parente835aa2faf3bf45c930924aaa60a134cdd269c35 (diff)
downloadgsoc2013-evolution-bbfda4227e6790fa945368cb5d4cb3d24e4da3d7.tar
gsoc2013-evolution-bbfda4227e6790fa945368cb5d4cb3d24e4da3d7.tar.gz
gsoc2013-evolution-bbfda4227e6790fa945368cb5d4cb3d24e4da3d7.tar.bz2
gsoc2013-evolution-bbfda4227e6790fa945368cb5d4cb3d24e4da3d7.tar.lz
gsoc2013-evolution-bbfda4227e6790fa945368cb5d4cb3d24e4da3d7.tar.xz
gsoc2013-evolution-bbfda4227e6790fa945368cb5d4cb3d24e4da3d7.tar.zst
gsoc2013-evolution-bbfda4227e6790fa945368cb5d4cb3d24e4da3d7.zip
Properly free the list of parts, and the private data.
2001-08-07 Not Zed <NotZed@Ximian.com> * filter-rule.c (filter_rule_finalise): Properly free the list of parts, and the private data. (FilterRulePrivate): Remove unused 'parts' member. * filter-option.c (free_option): For freeing options. (filter_option_finalise): Free options list. * filter-element.c (filter_element_finalise): free name. * filter-input.c (filter_input_finalise): Free type and values list. * filter-context.c (filter_context_finalise): Free the actions. * rule-context.c (rule_context_finalise): Remove the totally weird arsed *_set_list free code. (free_part_set): (free_rule_set): Use this to free stuff using g_list_foreach. (rule_context_finalise): Free the error string. (rule_context_finalise): Free the rules and parts. svn path=/trunk/; revision=11774
Diffstat (limited to 'filter/rule-context.c')
-rw-r--r--filter/rule-context.c51
1 files changed, 32 insertions, 19 deletions
diff --git a/filter/rule-context.c b/filter/rule-context.c
index f24e9948be..b77d5646c9 100644
--- a/filter/rule-context.c
+++ b/filter/rule-context.c
@@ -103,37 +103,46 @@ rule_context_init(RuleContext * o)
}
static void
+free_part_set(struct _part_set_map *map, void *data)
+{
+ g_free(map->name);
+ g_free(map);
+}
+
+static void
+free_rule_set(struct _rule_set_map *map, void *data)
+{
+ g_free(map->name);
+ g_free(map);
+}
+
+static void
rule_context_finalise(GtkObject * obj)
{
RuleContext *o = (RuleContext *) obj;
- struct _part_set_map *psm;
- struct _rule_set_map *rsm;
- GList *next;
- g_free(o->priv);
- g_hash_table_destroy(o->part_set_map);
+ g_list_foreach(o->rule_set_list, (GFunc)free_rule_set, NULL);
+ g_list_free(o->rule_set_list);
g_hash_table_destroy(o->rule_set_map);
- for (; o->part_set_list; o->part_set_list = next) {
- psm = o->part_set_list->data;
- g_free (psm->name);
- g_free (psm);
- next = o->part_set_list->next;
- g_list_free_1 (o->part_set_list);
- }
- for (; o->rule_set_list; o->rule_set_list = next) {
- rsm = o->rule_set_list->data;
- g_free (rsm->name);
- g_free (rsm);
- next = o->rule_set_list->next;
- g_list_free_1 (o->rule_set_list);
- }
+ g_list_foreach(o->part_set_list, (GFunc)free_part_set, NULL);
+ g_list_free(o->part_set_list);
+ g_hash_table_destroy(o->part_set_map);
+
+ g_free(o->error);
+
+ g_list_foreach(o->parts, (GFunc)gtk_object_unref, NULL);
+ g_list_free(o->parts);
+ g_list_foreach(o->rules, (GFunc)gtk_object_unref, NULL);
+ g_list_free(o->rules);
if (o->system)
xmlFreeDoc(o->system);
if (o->user)
xmlFreeDoc(o->user);
+ g_free(o->priv);
+
((GtkObjectClass *) (parent_class))->finalize(obj);
}
@@ -157,6 +166,8 @@ rule_context_add_part_set(RuleContext * f, const char *setname, int part_type, R
{
struct _part_set_map *map;
+ g_assert(g_hash_table_lookup(f->part_set_map, setname) == NULL);
+
map = g_malloc0(sizeof(*map));
map->type = part_type;
map->append = append;
@@ -172,6 +183,8 @@ rule_context_add_rule_set(RuleContext * f, const char *setname, int rule_type, R
{
struct _rule_set_map *map;
+ g_assert(g_hash_table_lookup(f->rule_set_map, setname) == NULL);
+
map = g_malloc0(sizeof(*map));
map->type = rule_type;
map->append = append;