[glib] glib-compile-schemas: check for undefined refs
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] glib-compile-schemas: check for undefined refs
- Date: Fri, 8 Apr 2011 05:50:22 +0000 (UTC)
commit 3498d58289ed833aeae59bfc76db0f5fa5840481
Author: Ryan Lortie <desrt desrt ca>
Date: Fri Apr 8 01:47:52 2011 -0400
glib-compile-schemas: check for undefined refs
For child schemas, verify that the named schema actually exists and
issue a warning if not. This error in schema files will cause runtime
errors when iterating over the list of child schemas and attempting to
instantiate each one.
This will move from being merely a warning to a hard error in the
future.
Bug #646039.
gio/glib-compile-schemas.c | 28 ++++++++++++++++++++++------
1 files changed, 22 insertions(+), 6 deletions(-)
---
diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c
index 1a312c0..7a684ad 100644
--- a/gio/glib-compile-schemas.c
+++ b/gio/glib-compile-schemas.c
@@ -1532,6 +1532,13 @@ gvdb_pair_init (GvdbPair *pair)
typedef struct
{
+ GHashTable *schema_table;
+ GvdbPair root_pair;
+} WriteToFileData;
+
+typedef struct
+{
+ GHashTable *schema_table;
GvdbPair pair;
gboolean l10n;
} OutputSchemaData;
@@ -1556,6 +1563,11 @@ output_key (gpointer key,
if (state->l10n)
data->l10n = TRUE;
+
+ if (state->child_schema &&
+ !g_hash_table_lookup (data->schema_table, state->child_schema))
+ g_printerr ("warning: undefined reference to <schema id='%s'/>\n",
+ state->child_schema);
}
static void
@@ -1563,6 +1575,7 @@ output_schema (gpointer key,
gpointer value,
gpointer user_data)
{
+ WriteToFileData *wtf_data = user_data;
OutputSchemaData data;
GvdbPair *root_pair;
SchemaState *state;
@@ -1571,8 +1584,9 @@ output_schema (gpointer key,
id = key;
state = value;
- root_pair = user_data;
+ root_pair = &wtf_data->root_pair;
+ data.schema_table = wtf_data->schema_table;
gvdb_pair_init (&data.pair);
data.l10n = FALSE;
@@ -1604,17 +1618,19 @@ write_to_file (GHashTable *schema_table,
const gchar *filename,
GError **error)
{
+ WriteToFileData data;
gboolean success;
- GvdbPair pair;
- gvdb_pair_init (&pair);
+ data.schema_table = schema_table;
+
+ gvdb_pair_init (&data.root_pair);
- g_hash_table_foreach (schema_table, output_schema, &pair);
+ g_hash_table_foreach (schema_table, output_schema, &data);
- success = gvdb_table_write_contents (pair.table, filename,
+ success = gvdb_table_write_contents (data.root_pair.table, filename,
G_BYTE_ORDER != G_LITTLE_ENDIAN,
error);
- g_hash_table_unref (pair.table);
+ g_hash_table_unref (data.root_pair.table);
return success;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]