Bug 623402 - schema compiler reports wrong line
authorRyan Lortie <desrt@desrt.ca>
Fri, 2 Jul 2010 15:14:28 +0000 (11:14 -0400)
committerRyan Lortie <desrt@desrt.ca>
Fri, 2 Jul 2010 15:14:28 +0000 (11:14 -0400)
Don't reuse the GMarkupParseContext in order to avoid inaccurate line
number reports.  Fix a memory leak, too.

gio/gschema-compile.c

index 33d6ea4..8923723 100644 (file)
@@ -1552,14 +1552,9 @@ parse_gschema_files (gchar  **files,
                      GError **error)
 {
   GMarkupParser parser = { start_element, end_element, text };
-  GMarkupParseContext *context;
   ParseState state = { 0, };
   const gchar *filename;
 
-  context = g_markup_parse_context_new (&parser,
-                                        G_MARKUP_PREFIX_ERROR_POSITION,
-                                        &state, NULL);
-
   state.enum_table = g_hash_table_new_full (g_str_hash, g_str_equal,
                                             g_free, enum_state_free);
 
@@ -1571,9 +1566,14 @@ parse_gschema_files (gchar  **files,
 
   while ((filename = *files++) != NULL)
     {
+      GMarkupParseContext *context;
       gchar *contents;
       gsize size;
 
+      context = g_markup_parse_context_new (&parser,
+                                            G_MARKUP_PREFIX_ERROR_POSITION,
+                                            &state, NULL);
+
       if (!g_file_get_contents (filename, &contents, &size, error))
         return FALSE;
 
@@ -1588,6 +1588,8 @@ parse_gschema_files (gchar  **files,
           g_prefix_error (error, "%s: ", filename);
           return FALSE;
         }
+
+      g_markup_parse_context_free (context);
     }
 
   g_hash_table_unref (state.enum_table);