Silence a bunch of -Wunused-but-set-variable warnings
[platform/upstream/glib.git] / gio / glib-compile-schemas.c
index 1bf9c21..d2c3f77 100644 (file)
@@ -328,6 +328,23 @@ key_state_set_range (KeyState     *state,
                      const gchar  *max_str,
                      GError      **error)
 {
+  const struct {
+    const gchar  type;
+    const gchar *min;
+    const gchar *max;
+  } table[] = {
+    { 'y',                    "0",                  "255" },
+    { 'n',               "-32768",                "32767" },
+    { 'q',                    "0",                "65535" },
+    { 'i',          "-2147483648",           "2147483647" },
+    { 'u',                    "0",           "4294967295" },
+    { 'x', "-9223372036854775808",  "9223372036854775807" },
+    { 't',                    "0", "18446744073709551615" },
+    { 'd',                 "-inf",                  "inf" },
+  };
+  gboolean type_ok = FALSE;
+  gint i;
+
   if (state->minimum)
     {
       g_set_error_literal (error, G_MARKUP_ERROR,
@@ -336,7 +353,16 @@ key_state_set_range (KeyState     *state,
       return;
     }
 
-  if (strchr ("ynqiuxtd", *(char *) state->type) == NULL)
+  for (i = 0; i < G_N_ELEMENTS (table); i++)
+    if (*(char *) state->type == table[i].type)
+      {
+        min_str = min_str ? min_str : table[i].min;
+        max_str = max_str ? max_str : table[i].max;
+        type_ok = TRUE;
+        break;
+      }
+
+  if (!type_ok)
     {
       gchar *type = g_variant_type_dup_string (state->type);
       g_set_error (error, G_MARKUP_ERROR,
@@ -1320,7 +1346,8 @@ start_element (GMarkupParseContext  *context,
       else if (strcmp (element_name, "range") == 0)
         {
           const gchar *min, *max;
-          if (COLLECT (STRING, "min", &min, STRING, "max", &max))
+          if (COLLECT (STRING | OPTIONAL, "min", &min,
+                       STRING | OPTIONAL, "max", &max))
             key_state_set_range (state->key_state, min, max, error);
           return;
         }
@@ -1415,9 +1442,6 @@ static void
 schema_state_end (SchemaState **state_ptr,
                   GError      **error)
 {
-  SchemaState *state;
-
-  state = *state_ptr;
   *state_ptr = NULL;
 }
 
@@ -1505,6 +1529,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;
@@ -1529,6 +1560,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
@@ -1536,6 +1572,7 @@ output_schema (gpointer key,
                gpointer value,
                gpointer user_data)
 {
+  WriteToFileData *wtf_data = user_data;
   OutputSchemaData data;
   GvdbPair *root_pair;
   SchemaState *state;
@@ -1544,8 +1581,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;
 
@@ -1577,17 +1615,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;
 }