"inherit" is the new attribute of the resources that means whether this
resources should have its (non filled) values inherited.

In case the "inherit" attribute is present and as is "true", let's set
it. Otherwise (the default option), there's no change from the current
behaviour.

https://gitlab.com/libosinfo/osinfo-db/issues/15

Signed-off-by: Fabiano Fidêncio <[email protected]>
---
 osinfo/osinfo_loader.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index d1bf61d..21a20fe 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -38,6 +38,7 @@
 #include "ignore-value.h"
 #include "osinfo_install_script_private.h"
 #include "osinfo_device_driver_private.h"
+#include "osinfo_resources_private.h"
 
 #ifndef USB_IDS
 #define USB_IDS PKG_DATA_DIR "/usb.ids"
@@ -1269,13 +1270,17 @@ static OsinfoResources 
*osinfo_loader_resources(OsinfoLoader *loader,
     guint i;
 
     gchar *arch = (gchar *)xmlGetProp(root, BAD_CAST "arch");
+    gchar *inherit_str = (gchar *)xmlGetProp(root, BAD_CAST "inherit");
     gchar *node_path = g_strjoin("/", ".", name, "*", NULL);
     gint nnodes = osinfo_loader_nodeset(node_path, loader, ctxt, &nodes, err);
+    gboolean inherit = inherit_str != NULL && g_str_equal(inherit_str, "true");
     g_free(node_path);
-    if (error_is_set(err) || nnodes < 1)
+    g_free(inherit_str);
+    if (error_is_set(err) || (!inherit && nnodes < 1))
         goto EXIT;
 
     resources = osinfo_resources_new(id, arch);
+    osinfo_resources_set_inherit(resources, inherit);
 
     for (i = 0; i < nnodes; i++) {
         if (!nodes[i]->children ||
-- 
2.19.1

_______________________________________________
Libosinfo mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libosinfo

Reply via email to