summaryrefslogtreecommitdiff
path: root/gtk/gtkbuilderparser.c
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2007-11-10 23:57:32 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2007-11-10 23:57:32 +0000
commit464ae984952cca6afe954cf3bb89e17a40fc58e6 (patch)
tree352bc1113b0c6a9454fb965612c756ed842bfcd6 /gtk/gtkbuilderparser.c
parent06d28ff88481c3074ee6bd18a359b9826afc1c90 (diff)
downloadgtk+-464ae984952cca6afe954cf3bb89e17a40fc58e6.tar.gz
Leak less in error paths
svn path=/trunk/; revision=18980
Diffstat (limited to 'gtk/gtkbuilderparser.c')
-rw-r--r--gtk/gtkbuilderparser.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index ee66b8d2dc..7f43af64e2 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -917,6 +917,21 @@ text (GMarkupParseContext *context,
}
}
+static void
+free_info (CommonInfo *info)
+{
+ if (strcmp (info->tag.name, "object") == 0)
+ free_object_info ((ObjectInfo *)info);
+ else if (strcmp (info->tag.name, "child") == 0)
+ free_child_info ((ChildInfo *)info);
+ else if (strcmp (info->tag.name, "property") == 0)
+ free_property_info ((PropertyInfo *)info);
+ else if (strcmp (info->tag.name, "signal") == 0)
+ _free_signal_info ((SignalInfo *)info, NULL);
+ else
+ g_assert_not_reached ();
+}
+
static const GMarkupParser parser = {
start_element,
end_element,
@@ -940,8 +955,9 @@ _gtk_builder_parser_parse_buffer (GtkBuilder *builder,
data->filename = filename;
data->domain = g_strdup (gtk_builder_get_translation_domain (builder));
- data->ctx = g_markup_parse_context_new (
- &parser, G_MARKUP_TREAT_CDATA_AS_TEXT, data, NULL);
+ data->ctx = g_markup_parse_context_new (&parser,
+ G_MARKUP_TREAT_CDATA_AS_TEXT,
+ data, NULL);
if (!g_markup_parse_context_parse (data->ctx, buffer, length, error))
goto out;
@@ -960,7 +976,6 @@ _gtk_builder_parser_parse_buffer (GtkBuilder *builder,
sub->child,
sub->tagname,
sub->data);
- free_subparser (sub);
}
/* Common parser_finished, for all created objects */
@@ -972,11 +987,13 @@ _gtk_builder_parser_parse_buffer (GtkBuilder *builder,
}
out:
- g_markup_parse_context_free (data->ctx);
+ g_slist_foreach (data->stack, (GFunc)free_info, NULL);
g_slist_free (data->stack);
+ g_slist_foreach (data->custom_finalizers, (GFunc)free_subparser, NULL);
g_slist_free (data->custom_finalizers);
g_slist_free (data->finalizers);
g_free (data->domain);
+ g_markup_parse_context_free (data->ctx);
g_free (data);
}