summaryrefslogtreecommitdiff
path: root/osinfo/osinfo_os.c
diff options
context:
space:
mode:
authorZeeshan Ali (Khattak) <zeeshanak@gnome.org>2012-01-10 21:04:46 +0200
committerZeeshan Ali (Khattak) <zeeshanak@gnome.org>2012-01-10 21:14:59 +0200
commitdd24f9cd56329c58db565b8923baf39b8348817a (patch)
tree57641bb15c5ab61dd5669654c3f4d0ffbc162b47 /osinfo/osinfo_os.c
parent161b468198925e3a1042910a8498296e9aee4b30 (diff)
downloadlibosinfo-dd24f9cd56329c58db565b8923baf39b8348817a.tar.gz
Add osinfo_os_get_all_devices()
Add a function to retreive all supported devices from an OS.
Diffstat (limited to 'osinfo/osinfo_os.c')
-rw-r--r--osinfo/osinfo_os.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/osinfo/osinfo_os.c b/osinfo/osinfo_os.c
index 968ef83..0facb08 100644
--- a/osinfo/osinfo_os.c
+++ b/osinfo/osinfo_os.c
@@ -192,7 +192,50 @@ OsinfoDeviceList *osinfo_os_get_devices(OsinfoOs *os, OsinfoFilter *filter)
return newList;
}
+/**
+ * osinfo_os_get_all_devices:
+ * @os: an operating system
+ * @filter: (allow-none)(transfer none): an optional device property filter
+ *
+ * Get all devices matching a given filter but unlike osinfo_os_get_devices
+ * this function also retreives devices from all derived and cloned operating
+ * systems.
+ *
+ * Returns: (transfer full): A list of devices
+ */
+OsinfoDeviceList *osinfo_os_get_all_devices(OsinfoOs *os, OsinfoFilter *filter)
+{
+ OsinfoProductList *derived, *cloned, *related_list;
+ OsinfoDeviceList *devices;
+ guint i;
+
+ devices = osinfo_os_get_devices(os, filter);
+
+ derived = osinfo_product_get_related
+ (OSINFO_PRODUCT(os), OSINFO_PRODUCT_RELATIONSHIP_DERIVES_FROM);
+ cloned = osinfo_product_get_related(OSINFO_PRODUCT(os),
+ OSINFO_PRODUCT_RELATIONSHIP_CLONES);
+ related_list = osinfo_productlist_new_union(derived, cloned);
+ g_object_unref(derived);
+ g_object_unref(cloned);
+
+ for (i = 0; i < osinfo_list_get_length(OSINFO_LIST(related_list)); i++) {
+ OsinfoEntity *related;
+ OsinfoDeviceList *related_devices;
+
+ related = osinfo_list_get_nth(OSINFO_LIST(related_list), i);
+ related_devices = osinfo_os_get_all_devices(OSINFO_OS(related), filter);
+ if (osinfo_list_get_length(OSINFO_LIST(related_devices)) > 0) {
+ OsinfoDeviceList *tmp_list = devices;
+ devices = osinfo_devicelist_new_union(devices, related_devices);
+ g_object_unref(tmp_list);
+ }
+ }
+
+ g_object_unref (related_list);
+ return devices;
+}
/**
* osinfo_os_get_device_links: