[Libosinfo] [libosinfo PATCH v3 11/12] os: Add osinfo_os_is_feature_supported()

Fabiano Fidêncio fidencio at redhat.com
Fri Jan 18 12:30:46 UTC 2019


This is a helper function that apps can take advantage of in orther to
easily figure out whether some feature is supported by the os or not.

Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
 osinfo/libosinfo.syms |  2 ++
 osinfo/osinfo_os.c    | 31 +++++++++++++++++++++++++++++++
 osinfo/osinfo_os.h    |  1 +
 3 files changed, 34 insertions(+)

diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 99a7843..4a3d5cd 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -570,6 +570,8 @@ LIBOSINFO_1.3.0 {
 	osinfo_os_get_image_list;
 	osinfo_os_get_maximum_resources;
 
+	osinfo_os_is_feature_supported;
+
 	osinfo_tree_has_treeinfo;
 } LIBOSINFO_0.2.13;
 
diff --git a/osinfo/osinfo_os.c b/osinfo/osinfo_os.c
index c29ffd2..9d24a64 100644
--- a/osinfo/osinfo_os.c
+++ b/osinfo/osinfo_os.c
@@ -693,6 +693,37 @@ void osinfo_os_add_feature(OsinfoOs *os, OsinfoFeature *feature)
     osinfo_list_add(OSINFO_LIST(os->priv->features), OSINFO_ENTITY(feature));
 }
 
+/**
+ * osinfo_os_is_feature_supported:
+ * @os: an operating system
+ * @arch: the target architecture
+ * @name: the feature's name
+ *
+ * Returns whether the named feature is supported or not by @os on @arch
+ *
+ * Returns: TRUE if the named feature is supported. Otherwise, FALSE.
+ */
+gboolean osinfo_os_is_feature_supported(OsinfoOs *os,
+                                        const gchar *name,
+                                        const gchar *arch)
+{
+    OsinfoFeatureList *list;
+    gboolean supports = FALSE;
+
+    g_return_val_if_fail(OSINFO_IS_OS(os), FALSE);
+    g_return_val_if_fail(arch != NULL, FALSE);
+    g_return_val_if_fail(name != NULL, FALSE);
+
+    list = osinfo_os_get_feature_list(os, arch);
+
+    if (feature_exists_in_list(name, OSINFO_LIST(list)))
+        supports = TRUE;
+
+    g_object_unref(list);
+
+    return supports;
+}
+
 /**
  * osinfo_os_get_family:
  * @os: an #OsinfoOs
diff --git a/osinfo/osinfo_os.h b/osinfo/osinfo_os.h
index 6ea825d..19c31ce 100644
--- a/osinfo/osinfo_os.h
+++ b/osinfo/osinfo_os.h
@@ -140,6 +140,7 @@ void osinfo_os_add_device_driver(OsinfoOs *os, OsinfoDeviceDriver *driver);
 
 OsinfoFeatureList *osinfo_os_get_feature_list(OsinfoOs *os, const gchar *arch);
 void osinfo_os_add_feature(OsinfoOs *os, OsinfoFeature *feature);
+gboolean osinfo_os_is_feature_supported(OsinfoOs *os, const gchar *name, const gchar *arch);
 
 #endif /* __OSINFO_OS_H__ */
 /*
-- 
2.19.2




More information about the Libosinfo mailing list