GSettingsSchema: alter our 'reverse' technology

Instead of building a reversed linked list by prepending in order and
then reversing it at the end, prepend in reverse by iterating backwards
through the directories (to get a list in-order when we're done).
This commit is contained in:
Ryan Lortie 2011-11-15 07:16:48 +00:00
parent 104f7353a7
commit 5ec84e8056

View File

@ -47,18 +47,25 @@ initialise_schema_sources (void)
{ {
static gsize initialised; static gsize initialised;
/* need a separate variable because 'schema_sources' may legitimately
* be null if we have zero valid schema sources
*/
if G_UNLIKELY (g_once_init_enter (&initialised)) if G_UNLIKELY (g_once_init_enter (&initialised))
{ {
const gchar * const *dir; const gchar * const *dirs;
const gchar *path; const gchar *path;
gint i;
for (dir = g_get_system_data_dirs (); *dir; dir++) /* iterate in reverse: count up, then count down */
dirs = g_get_system_data_dirs ();
for (i = 0; dirs[i]; i++);
while (i--)
{ {
gchar *filename; gchar *filename;
GvdbTable *table; GvdbTable *table;
filename = g_build_filename (*dir, "glib-2.0", "schemas", filename = g_build_filename (dirs[i], "glib-2.0", "schemas", "gschemas.compiled", NULL);
"gschemas.compiled", NULL);
table = gvdb_table_new (filename, TRUE, NULL); table = gvdb_table_new (filename, TRUE, NULL);
if (table != NULL) if (table != NULL)
@ -67,8 +74,6 @@ initialise_schema_sources (void)
g_free (filename); g_free (filename);
} }
schema_sources = g_slist_reverse (schema_sources);
if ((path = g_getenv ("GSETTINGS_SCHEMA_DIR")) != NULL) if ((path = g_getenv ("GSETTINGS_SCHEMA_DIR")) != NULL)
{ {
gchar *filename; gchar *filename;