[Libosinfo] [libosinfo 3/3] Implement osinfo_platform_get_all_devices()
Christophe Fergeau
cfergeau at redhat.com
Tue Apr 2 09:17:04 UTC 2013
---
osinfo/libosinfo.syms | 4 ++++
osinfo/osinfo_platform.c | 38 ++++++++++++++++++++++++++++++++++++++
osinfo/osinfo_platform.h | 1 +
3 files changed, 43 insertions(+)
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 45689a2..8fcf327 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -413,6 +413,10 @@ LIBOSINFO_0.2.6 {
osinfo_install_script_get_post_install_drivers_signing_req;
} LIBOSINFO_0.2.3;
+LIBOSINFO_0.2.7 {
+ osinfo_platform_get_all_devices;
+} LIBOSINFO_0.2.6;
+
/* Symbols in next release...
LIBOSINFO_0.0.2 {
diff --git a/osinfo/osinfo_platform.c b/osinfo/osinfo_platform.c
index 222eb93..1bb3ecf 100644
--- a/osinfo/osinfo_platform.c
+++ b/osinfo/osinfo_platform.c
@@ -25,6 +25,7 @@
#include <config.h>
#include <osinfo/osinfo.h>
+#include "osinfo/osinfo_product_private.h"
#include <glib/gi18n-lib.h>
G_DEFINE_TYPE (OsinfoPlatform, osinfo_platform, OSINFO_TYPE_PRODUCT);
@@ -101,6 +102,43 @@ OsinfoPlatform *osinfo_platform_new(const gchar *id)
NULL);
}
+struct GetAllDevicesData {
+ OsinfoFilter *filter;
+ OsinfoDeviceList *devices;
+};
+
+static void get_all_devices_cb(OsinfoProduct *product, gpointer user_data)
+{
+ OsinfoDeviceList *devices;
+ OsinfoList *tmp_list;
+ struct GetAllDevicesData *foreach_data = (struct GetAllDevicesData *)user_data;
+
+ g_return_if_fail(OSINFO_IS_PLATFORM(product));
+
+ devices = osinfo_platform_get_devices(OSINFO_PLATFORM(product),
+ foreach_data->filter);
+ tmp_list = osinfo_list_new_union(OSINFO_LIST(foreach_data->devices),
+ OSINFO_LIST(devices));
+ g_object_unref(foreach_data->devices);
+ g_object_unref(devices);
+ foreach_data->devices = OSINFO_DEVICELIST(tmp_list);
+}
+
+OsinfoDeviceList *osinfo_platform_get_all_devices(OsinfoPlatform *platform,
+ OsinfoFilter *filter)
+{
+ struct GetAllDevicesData foreach_data = {
+ .filter = filter,
+ .devices = osinfo_devicelist_new()
+ };
+
+ osinfo_product_foreach_related(OSINFO_PRODUCT(platform),
+ OSINFO_PRODUCT_FOREACH_FLAG_UPGRADES,
+ get_all_devices_cb,
+ &foreach_data);
+
+ return foreach_data.devices;
+}
/**
* osinfo_platform_get_devices:
diff --git a/osinfo/osinfo_platform.h b/osinfo/osinfo_platform.h
index 8455a32..d5df225 100644
--- a/osinfo/osinfo_platform.h
+++ b/osinfo/osinfo_platform.h
@@ -71,6 +71,7 @@ GType osinfo_platform_get_type(void);
OsinfoPlatform *osinfo_platform_new(const gchar *id);
OsinfoDeviceList *osinfo_platform_get_devices(OsinfoPlatform *platform, OsinfoFilter *filter);
+OsinfoDeviceList *osinfo_platform_get_all_devices(OsinfoPlatform *platform, OsinfoFilter *filter);
OsinfoDeviceLinkList *osinfo_platform_get_device_links(OsinfoPlatform *platform, OsinfoFilter *filter);
OsinfoDeviceLink *osinfo_platform_add_device(OsinfoPlatform *platform, OsinfoDevice *dev);
--
1.8.1.4
More information about the Libosinfo
mailing list