[Libosinfo] [libosinfo PATCH v2 5/5] loader: Load Images information
Fabiano Fidêncio
fidencio at redhat.com
Thu Nov 1 12:45:10 UTC 2018
Now that we've OsinfoImage and OsinfoImageList objects in place and
OsinfoOs already provides us an API to add an OsinfoImage to an
OsinfoOS, let's properly load the images' information present in
osinfo-db.
https://gitlab.com/libosinfo/osinfo-db/issues/10
Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
osinfo/osinfo_loader.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index d1bf61d..3a3aa90 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -1238,6 +1238,26 @@ static OsinfoTree *osinfo_loader_tree(OsinfoLoader *loader,
return tree;
}
+static OsinfoImage *osinfo_loader_image(OsinfoLoader *loader,
+ xmlXPathContextPtr ctxt,
+ xmlNodePtr root,
+ const gchar *id,
+ GError **err)
+{
+ const OsinfoEntityKey keys[] = {
+ { OSINFO_IMAGE_PROP_URL, G_TYPE_STRING },
+ { NULL, G_TYPE_INVALID }
+ };
+
+ gchar *arch = (gchar *)xmlGetProp(root, BAD_CAST "arch");
+ OsinfoImage *image = osinfo_image_new(id, arch);
+ xmlFree(arch);
+
+ osinfo_loader_entity(loader, OSINFO_ENTITY(image), keys, ctxt, root, err);
+
+ return image;
+}
+
static OsinfoOsVariant *osinfo_loader_os_variant(OsinfoLoader *loader,
xmlXPathContextPtr ctxt,
xmlNodePtr root,
@@ -1488,6 +1508,26 @@ static void osinfo_loader_os(OsinfoLoader *loader,
g_free(nodes);
+ nnodes = osinfo_loader_nodeset("./image", loader, ctxt, &nodes, err);
+ if (error_is_set(err))
+ goto cleanup;
+
+ for (i = 0; i < nnodes; i++) {
+ xmlNodePtr saved = ctxt->node;
+ ctxt->node = nodes[i];
+ gchar *image_id = g_strdup_printf("%s:%u", id, i);
+ OsinfoImage *image = osinfo_loader_image(loader, ctxt, nodes[i], image_id, err);
+ g_free(image_id);
+ ctxt->node = saved;
+ if (error_is_set(err))
+ goto cleanup;
+
+ osinfo_os_add_image(os, image);
+ g_object_unref(G_OBJECT(image));
+ }
+
+ g_free(nodes);
+
nnodes = osinfo_loader_nodeset("./variant", loader, ctxt, &nodes, err);
if (error_is_set(err))
goto cleanup;
--
2.19.1
More information about the Libosinfo
mailing list