[Libosinfo] [PATCH v3 55/60] loader: re-arrange code for loading list of directories
Daniel P. Berrange
berrange at redhat.com
Mon Oct 12 17:11:16 UTC 2015
Re-arrange the loading code so that there is a single helper
method that takes an array of GFile * to load. This will
facilitate future code for handling overrides between
directories.
Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
osinfo/osinfo_loader.c | 128 ++++++++++++++++++++++++++++---------------------
1 file changed, 73 insertions(+), 55 deletions(-)
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index 1c35a3c..b9e47ed 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -1848,6 +1848,36 @@ osinfo_loader_process_file(OsinfoLoader *loader,
g_propagate_error(err, error);
}
+
+static void osinfo_loader_process_list(OsinfoLoader *loader,
+ GFile **dirs,
+ GError **err)
+{
+ GError *lerr = NULL;
+ GHashTableIter iter;
+ gpointer key, value;
+
+ while (dirs && *dirs) {
+ osinfo_loader_process_file(loader,
+ *dirs,
+ TRUE,
+ &lerr);
+ if (lerr) {
+ g_propagate_error(err, lerr);
+ return;
+ }
+
+ dirs++;
+ }
+
+ g_hash_table_iter_init(&iter, loader->priv->entity_refs);
+ while (g_hash_table_iter_next(&iter, &key, &value)) {
+ g_warning("Entity %s referenced but not defined", (const char *)key);
+ }
+ g_hash_table_remove_all(loader->priv->entity_refs);
+}
+
+
/**
* osinfo_loader_get_db:
* @loader: the loader object
@@ -1878,12 +1908,12 @@ void osinfo_loader_process_path(OsinfoLoader *loader,
const gchar *path,
GError **err)
{
- GFile *file = g_file_new_for_path(path);
- osinfo_loader_process_file(loader,
- file,
- FALSE,
- err);
- g_object_unref(file);
+ GFile *dirs[] = {
+ g_file_new_for_path(path),
+ NULL,
+ };
+ osinfo_loader_process_list(loader, dirs, err);
+ g_object_unref(dirs[0]);
}
/**
@@ -1901,12 +1931,12 @@ void osinfo_loader_process_uri(OsinfoLoader *loader,
const gchar *uri,
GError **err)
{
- GFile *file = g_file_new_for_uri(uri);
- osinfo_loader_process_file(loader,
- file,
- FALSE,
- err);
- g_object_unref(file);
+ GFile *dirs[] = {
+ g_file_new_for_uri(uri),
+ NULL,
+ };
+ osinfo_loader_process_list(loader, dirs, err);
+ g_object_unref(dirs[0]);
}
@@ -1943,32 +1973,17 @@ static GFile *osinfo_loader_get_user_path(void)
void osinfo_loader_process_default_path(OsinfoLoader *loader, GError **err)
{
- GError *error = NULL;
-
- osinfo_loader_process_system_path(loader, &error);
- if (error)
- goto error;
-
- osinfo_loader_process_local_path(loader, &error);
- if (error)
- goto error;
-
- osinfo_loader_process_user_path(loader, &error);
- if (error)
- goto error;
-
- GHashTableIter iter;
- gpointer key, value;
- g_hash_table_iter_init(&iter, loader->priv->entity_refs);
- while (g_hash_table_iter_next(&iter, &key, &value)) {
- g_warning("Entity %s referenced but not defined", (const char *)key);
- }
- g_hash_table_remove_all(loader->priv->entity_refs);
- return;
+ GFile *dirs[] = {
+ osinfo_loader_get_system_path(),
+ osinfo_loader_get_local_path(),
+ osinfo_loader_get_user_path(),
+ NULL,
+ };
- error:
- g_propagate_error(err, error);
- return;
+ osinfo_loader_process_list(loader, dirs, err);
+ g_object_unref(dirs[0]);
+ g_object_unref(dirs[1]);
+ g_object_unref(dirs[2]);
}
/**
@@ -1981,32 +1996,35 @@ void osinfo_loader_process_default_path(OsinfoLoader *loader, GError **err)
void osinfo_loader_process_system_path(OsinfoLoader *loader,
GError **err)
{
- GFile *file = osinfo_loader_get_system_path();
- osinfo_loader_process_file(loader,
- file,
- FALSE,
- err);
- g_object_unref(file);
+ GFile *dirs[] = {
+ osinfo_loader_get_system_path(),
+ NULL,
+ };
+
+ osinfo_loader_process_list(loader, dirs, err);
+ g_object_unref(dirs[0]);
}
void osinfo_loader_process_local_path(OsinfoLoader *loader, GError **err)
{
- GFile *file = osinfo_loader_get_local_path();
- osinfo_loader_process_file(loader,
- file,
- TRUE,
- err);
- g_object_unref(file);
+ GFile *dirs[] = {
+ osinfo_loader_get_local_path(),
+ NULL,
+ };
+
+ osinfo_loader_process_list(loader, dirs, err);
+ g_object_unref(dirs[0]);
}
void osinfo_loader_process_user_path(OsinfoLoader *loader, GError **err)
{
- GFile *file = osinfo_loader_get_user_path();
- osinfo_loader_process_file(loader,
- file,
- TRUE,
- err);
- g_object_unref(file);
+ GFile *dirs[] = {
+ osinfo_loader_get_user_path(),
+ NULL,
+ };
+
+ osinfo_loader_process_list(loader, dirs, err);
+ g_object_unref(dirs[0]);
}
/*
--
2.4.3
More information about the Libosinfo
mailing list