[Libosinfo] [libosinfo PATCH 1/7] entity: Add methods to deal with GFlags

Fabiano Fidêncio fidencio at redhat.com
Mon Dec 3 09:11:46 UTC 2018


Add osinfo_entity_get_param_value_flags() and
osinfo_entity_set_param_flags() in order to deal with flags as such
OsinfoInstallScriptMethods.

Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
 osinfo/libosinfo.syms  |  3 +++
 osinfo/osinfo_entity.c | 41 +++++++++++++++++++++++++++++++++++++++++
 osinfo/osinfo_entity.h |  5 +++++
 3 files changed, 49 insertions(+)

diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 5396c72..365914c 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -531,6 +531,9 @@ LIBOSINFO_0.2.13 {
 
 LIBOSINFO_1.3.0 {
     global:
+	osinfo_entity_get_param_value_flags;
+	osinfo_entity_set_param_flags;
+
 	osinfo_error_quark;
 
 	osinfo_os_add_maximum_resources;
diff --git a/osinfo/osinfo_entity.c b/osinfo/osinfo_entity.c
index 20b9115..563432a 100644
--- a/osinfo/osinfo_entity.c
+++ b/osinfo/osinfo_entity.c
@@ -221,6 +221,22 @@ void osinfo_entity_set_param_enum(OsinfoEntity *entity, const gchar *key, gint v
     osinfo_entity_set_param(entity, key, enum_value->value_nick);
 }
 
+void osinfo_entity_set_param_flags(OsinfoEntity *entity, const gchar *key, guint value, GType flags_type)
+{
+    GFlagsClass *flags_class;
+    guint i;
+
+    g_return_if_fail(G_TYPE_IS_FLAGS(flags_type));
+
+    flags_class = g_type_class_ref(flags_type);
+    for (i = 0; i < flags_class->n_values; i++) {
+        if ((flags_class->values[i].value & value) != 0) {
+            osinfo_entity_set_param(entity, key, flags_class->values[i].value_nick);
+            break;
+        }
+    }
+}
+
 /**
  * osinfo_entity_add_param:
  * @entity: an #OsinfoEntity containing the parameters
@@ -401,6 +417,31 @@ gint osinfo_entity_get_param_value_enum(OsinfoEntity *entity,
     g_return_val_if_reached(default_value);
 }
 
+guint osinfo_entity_get_param_value_flags(OsinfoEntity *entity,
+                                          const char *key,
+                                          GType flags_type,
+                                          guint default_value)
+{
+    const gchar *nick;
+    GFlagsClass *flags_class;
+    GFlagsValue *flags_value;
+
+    g_return_val_if_fail(G_TYPE_IS_FLAGS(flags_type), default_value);
+
+    nick = osinfo_entity_get_param_value(entity, key);
+    if (nick == NULL)
+        return default_value;
+
+    flags_class = g_type_class_ref(flags_type);
+    flags_value = g_flags_get_value_by_nick(flags_class, nick);
+    g_type_class_unref(flags_class);
+
+    if (flags_value != NULL)
+        return flags_value->value;
+
+    g_return_val_if_reached(default_value);
+}
+
 /**
  * osinfo_entity_get_param_value_list:
  * @entity: an #OsinfoEntity containing the parameters
diff --git a/osinfo/osinfo_entity.h b/osinfo/osinfo_entity.h
index d41237b..f4ed465 100644
--- a/osinfo/osinfo_entity.h
+++ b/osinfo/osinfo_entity.h
@@ -79,6 +79,10 @@ gint osinfo_entity_get_param_value_enum(OsinfoEntity *entity,
                                         const char *key,
                                         GType enum_type,
                                         gint default_value);
+guint osinfo_entity_get_param_value_flags(OsinfoEntity *entity,
+                                           const char *key,
+                                           GType flags_type,
+                                           guint default_value);
 gint64 osinfo_entity_get_param_value_int64(OsinfoEntity *entity, const gchar *key);
 gint64 osinfo_entity_get_param_value_int64_with_default(OsinfoEntity *entity,
                                                         const gchar *key,
@@ -88,6 +92,7 @@ void osinfo_entity_set_param(OsinfoEntity *entity, const gchar *key, const gchar
 void osinfo_entity_set_param_boolean(OsinfoEntity *entity, const gchar *key, gboolean value);
 void osinfo_entity_set_param_int64(OsinfoEntity *entity, const gchar *key, gint64 value);
 void osinfo_entity_set_param_enum(OsinfoEntity *entity, const gchar *key, gint value, GType enum_type);
+void osinfo_entity_set_param_flags(OsinfoEntity *entity, const gchar *key, guint value, GType flags_type);
 void osinfo_entity_add_param(OsinfoEntity *entity, const gchar *key, const gchar *value);
 void osinfo_entity_clear_param(OsinfoEntity *entity, const gchar *key);
 
-- 
2.19.1




More information about the Libosinfo mailing list