[PATCHv4 05/11] OsinfoInstallScript: Use an OsinfoInstallConfigParamList

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Currently the install script config parameters are stored in a
raw GList. However, OsinfoInstallScript ends up reimplementing
part of the OsinfoList API, and the raw GList also does not make
it convenient to pass the list of config parameters around.
Replace the internal GList with an OsinfoInstallConfigParamList,
which has the side-effect of nicely simplifying the code.
---
 osinfo/libosinfo.syms          |  2 ++
 osinfo/osinfo_install_script.c | 74 ++++++++++++++++++++++--------------------
 osinfo/osinfo_install_script.h |  1 +
 3 files changed, 42 insertions(+), 35 deletions(-)

diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 7d295a2..a1c2d71 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -391,6 +391,8 @@ LIBOSINFO_0.2.3 {
 	osinfo_install_config_paramlist_get_type;
 	osinfo_install_config_paramlist_new;
 
+	osinfo_install_script_get_config_params;
+
 	osinfo_media_get_languages;
 	osinfo_media_get_os;
 
diff --git a/osinfo/osinfo_install_script.c b/osinfo/osinfo_install_script.c
index 2229843..d72c394 100644
--- a/osinfo/osinfo_install_script.c
+++ b/osinfo/osinfo_install_script.c
@@ -50,7 +50,7 @@ struct _OsinfoInstallScriptPrivate
 {
     gchar *output_prefix;
     gchar *output_filename;
-    GList *config_param_list;
+    OsinfoInstallConfigParamList *config_params;
     OsinfoAvatarFormat *avatar;
 };
 
@@ -164,8 +164,11 @@ osinfo_install_script_finalize (GObject *object)
     OsinfoInstallScript *script = OSINFO_INSTALL_SCRIPT (object);
     g_free(script->priv->output_prefix);
     g_free(script->priv->output_filename);
-    g_list_free_full(script->priv->config_param_list, g_object_unref);
-    if (script->priv->avatar != NULL)
+
+    if (script->priv->config_params)
+        g_object_unref(script->priv->config_params);
+
+    if (script->priv->avatar)
         g_object_unref(script->priv->avatar);
 
     /* Chain up to the parent class */
@@ -258,35 +261,23 @@ void osinfo_install_script_add_config_param(OsinfoInstallScript *script, OsinfoI
     g_return_if_fail(OSINFO_IS_INSTALL_SCRIPT(script));
     g_return_if_fail(OSINFO_IS_INSTALL_CONFIG_PARAM(param));
 
-    script->priv->config_param_list =
-        g_list_prepend(script->priv->config_param_list, param);
+    osinfo_list_add(OSINFO_LIST(script->priv->config_params),
+                    OSINFO_ENTITY(param));
 }
 
 gboolean osinfo_install_script_has_config_param(const OsinfoInstallScript *script, const OsinfoInstallConfigParam *config_param)
 {
-    GList *l;
-
-    for (l = script->priv->config_param_list; l != NULL; l = l->next) {
-        OsinfoInstallConfigParam *tmp = l->data;
-
-        if (g_strcmp0(osinfo_install_config_param_get_name(tmp),
-                      osinfo_install_config_param_get_name(config_param)) == 0)
-            return TRUE;
-    }
-    return FALSE;
+    /* NB: this code assumes that the 'id' and 'name' entity properties
+     * are the same
+     */
+    const char *name = osinfo_install_config_param_get_name(config_param);
+    return osinfo_install_script_has_config_param_name(script, name);
 }
 
 gboolean osinfo_install_script_has_config_param_name(const OsinfoInstallScript *script, const gchar *name)
 {
-    GList *l;
-
-    for (l = script->priv->config_param_list; l != NULL; l = l->next) {
-        OsinfoInstallConfigParam *tmp = l->data;
-
-        if (g_strcmp0(osinfo_install_config_param_get_name(tmp), name) == 0)
-            return TRUE;
-    }
-    return FALSE;
+    OsinfoList *l = OSINFO_LIST(script->priv->config_params);
+    return (osinfo_list_find_by_id(l, name) != NULL);
 }
 
 /**
@@ -300,7 +291,20 @@ gboolean osinfo_install_script_has_config_param_name(const OsinfoInstallScript *
  */
 GList *osinfo_install_script_get_config_param_list(const OsinfoInstallScript *script)
 {
-    return g_list_copy(script->priv->config_param_list);
+    return osinfo_list_get_elements(OSINFO_LIST(script->priv->config_params));
+}
+
+/**
+ * osinfo_install_script_get_config_params:
+ *
+ * Get the list of valid config parameters for @script.
+ *
+ * Returns: (transfer none): the list of valid #OsinfoInstallConfigParam
+ * parameters.
+ */
+OsinfoInstallConfigParamList *osinfo_install_script_get_config_params(const OsinfoInstallScript *script)
+{
+    return script->priv->config_params;
 }
 
 /**
@@ -317,16 +321,16 @@ OsinfoInstallConfigParam *
 osinfo_install_script_get_config_param(const OsinfoInstallScript *script,
                                        const gchar *name)
 {
-    GList *l;
-
-    for (l = script->priv->config_param_list; l != NULL; l = l->next) {
-        OsinfoInstallConfigParam *tmp = l->data;
-
-        if (g_strcmp0(osinfo_install_config_param_get_name(tmp), name) == 0)
-            return g_object_ref(tmp);
-    }
+    /* NB: this code assumes that the 'id' and 'name' entity properties
+     * are the same
+     */
+    OsinfoInstallConfigParam *param;
+    OsinfoList *l = OSINFO_LIST(script->priv->config_params);
+    param = OSINFO_INSTALL_CONFIG_PARAM(osinfo_list_find_by_id(l, name));
+    if (param == NULL)
+        return NULL;
 
-    return NULL;
+    return g_object_ref(G_OBJECT(param));
 }
 
 static void
@@ -335,7 +339,7 @@ osinfo_install_script_init (OsinfoInstallScript *list)
     OsinfoInstallScriptPrivate *priv;
     list->priv = priv = OSINFO_INSTALL_SCRIPT_GET_PRIVATE(list);
 
-    list->priv->config_param_list = NULL;
+    list->priv->config_params = osinfo_install_config_paramlist_new();
 }
 
 
diff --git a/osinfo/osinfo_install_script.h b/osinfo/osinfo_install_script.h
index f610716..d91751e 100644
--- a/osinfo/osinfo_install_script.h
+++ b/osinfo/osinfo_install_script.h
@@ -157,6 +157,7 @@ OsinfoInstallConfigParam *osinfo_install_script_get_config_param(const OsinfoIns
 void osinfo_install_script_add_config_param(OsinfoInstallScript *script, OsinfoInstallConfigParam *param);
 
 GList *osinfo_install_script_get_config_param_list(const OsinfoInstallScript *script);
+OsinfoInstallConfigParamList *osinfo_install_script_get_config_params(const OsinfoInstallScript *script);
 OsinfoPathFormat osinfo_install_script_get_path_format(OsinfoInstallScript *script);
 
 gboolean osinfo_install_script_get_can_pre_install_drivers(OsinfoInstallScript *script);
-- 
1.8.0.2


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Fedora Users]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux