[virt-tools-list] [PATCH 2/2] install script: add config_param entity
Fabiano Fidêncio
fabiano at fidencio.org
Mon Aug 13 07:56:28 UTC 2012
On Mon, Aug 13, 2012 at 4:54 AM, Christophe Fergeau <cfergeau at redhat.com> wrote:
> On Mon, Aug 13, 2012 at 04:37:37AM -0300, Fabiano Fidêncio wrote:
>> Now we need to set what are the configs that will be used in each
>> script. To set it, just add, in the .xml's script file:
>> <config>
>> <param name="..." policy="mandatory"|"optional"/>
>> </config>
>>
>> For manage these configs, a new entity was created, called:
>> OsinfoInstallConfigParam. And the OsinfoInstallScript entity is, now,
>> keeping an internal list of the OsinfoInstallConfigParam entity.
>>
>> With these changes, applications that uses/will use libosinfo can check
>> if an install script has some config to be set using, consulting by:
>> - ConfigParam entity:
>> osinfo_install_script_has_config_param(OsinfoInstallScript *script,
>> const OsinfoInstallConfigParameter config_param);
>>
>> - Parameter name:
>> osinfo_install_script_has_config_param_name(OsinfoInstallScript *script,
>> const gchar* name);
>> ---
>> data/install-scripts/fedora.xml | 6 +
>> data/install-scripts/windows-sif.xml | 5 +
>> data/install-scripts/windows-unattend.xml | 9 ++
>> data/schemas/libosinfo.rng | 12 ++
>> docs/reference/Libosinfo.types | 1 +
>> osinfo/Makefile.am | 1 +
>> osinfo/libosinfo.syms | 8 +
>> osinfo/osinfo.h | 1 +
>> osinfo/osinfo_install_config_param.c | 234 ++++++++++++++++++++++++++++++
>> osinfo/osinfo_install_config_param.h | 83 +++++++++++
>> osinfo/osinfo_install_script.c | 49 ++++++-
>> osinfo/osinfo_install_script.h | 12 +-
>> osinfo/osinfo_loader.c | 36 +++++
>> 13 files changed, 455 insertions(+), 2 deletions(-)
>> create mode 100644 osinfo/osinfo_install_config_param.c
>> create mode 100644 osinfo/osinfo_install_config_param.h
>>
>> diff --git a/data/install-scripts/fedora.xml b/data/install-scripts/fedora.xml
>> index 338a570..a608cdb 100644
>> --- a/data/install-scripts/fedora.xml
>> +++ b/data/install-scripts/fedora.xml
>> @@ -1,6 +1,12 @@
>> <libosinfo version="0.0.1">
>> <install-script id='http://fedoraproject.org/scripts/fedora/jeos'>
>> <profile>jeos</profile>
>> + <config>
>> + <param name="admin-password" policy="optional"/>
>> + <param name="l10n-keyboard" policy="optional"/>
>> + <param name="l10n-language" policy="optional"/>
>> + <param name="l10n-timezone" policy="optional"/>
>> + </config>
>> <template filename="fedora.ks">
>> <xsl:stylesheet
>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>> diff --git a/data/install-scripts/windows-sif.xml b/data/install-scripts/windows-sif.xml
>> index 46b24ae..77fc2c5 100644
>> --- a/data/install-scripts/windows-sif.xml
>> +++ b/data/install-scripts/windows-sif.xml
>> @@ -1,6 +1,11 @@
>> <libosinfo version="0.0.1">
>> <install-script id='http://microsoft.com/windows/sif'>
>> <profile>jeos</profile>
>> + <config>
>> + <param name="admin-password" policy="optional"/>
>> + <param name="reg-product-key" policy="required"/>
>> + <param name="user-realname" policy="required"/>
>> + </config>
>> <template filename="windows.sif">
>> <xsl:stylesheet
>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>> diff --git a/data/install-scripts/windows-unattend.xml b/data/install-scripts/windows-unattend.xml
>> index 20e3e23..5698bc8 100644
>> --- a/data/install-scripts/windows-unattend.xml
>> +++ b/data/install-scripts/windows-unattend.xml
>> @@ -1,6 +1,15 @@
>> <libosinfo version="0.0.1">
>> <install-script id='http://microsoft.com/windows/unattend'>
>> <profile>jeos</profile>
>> + <config>
>> + <param name="admin-password" policy="optional"/>
>> + <param name="hardware-arch" policy="optional"/>
>> + <param name="l10n-language" policy="optional"/>
>> + <param name="user-login" policy="optional"/>
>> + <param name="user-password" policy="optional"/>
>> + <param name="user-realname" policy="optional"/>
>> + <param name="reg-product-key" policy="required"/>
>> + </config>
>> <template filename="windows.xml">
>> <xsl:stylesheet
>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>> diff --git a/data/schemas/libosinfo.rng b/data/schemas/libosinfo.rng
>> index 7c8d7f7..1392f74 100644
>> --- a/data/schemas/libosinfo.rng
>> +++ b/data/schemas/libosinfo.rng
>> @@ -410,6 +410,12 @@
>> <element name='profile'>
>> <text/>
>> </element>
>> + <element name='config'>
>> + <attribute name="name"/>
>> + <attribute name="policy">
>> + <ref name='policies'/>
>> + </attribute>
>> + </element>
>> <element name='product-key-format'>
>> <text/>
>> </element>
>> @@ -479,4 +485,10 @@
>> <param name="pattern">\w+://.*</param>
>> </data>
>> </define>
>> +
>> + <define name='policies'>
>> + <data type="string">
>> + <param name="pattern">required|optional</param>
>> + </data>
>> + </define>
>> </grammar>
>> diff --git a/docs/reference/Libosinfo.types b/docs/reference/Libosinfo.types
>> index faf8643..8744ee6 100644
>> --- a/docs/reference/Libosinfo.types
>> +++ b/docs/reference/Libosinfo.types
>> @@ -9,6 +9,7 @@ osinfo_devicelist_get_type
>> osinfo_entity_get_type
>> osinfo_filter_get_type
>> osinfo_install_config_get_type
>> +osinfo_install_config_param_get_type
>> osinfo_install_script_get_type
>> osinfo_install_scriptlist_get_type
>> osinfo_list_get_type
>> diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am
>> index f4aea47..68c4172 100644
>> --- a/osinfo/Makefile.am
>> +++ b/osinfo/Makefile.am
>> @@ -89,6 +89,7 @@ libosinfo_1_0_la_SOURCES = \
>> osinfo_devicelinklist.c \
>> osinfo_devicelinkfilter.c \
>> osinfo_install_config.c \
>> + osinfo_install_config_param.c \
>> osinfo_install_script.c \
>> osinfo_install_scriptlist.c \
>> osinfo_product.c \
>> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
>> index ddf736e..1e55d0e 100644
>> --- a/osinfo/libosinfo.syms
>> +++ b/osinfo/libosinfo.syms
>> @@ -264,6 +264,8 @@ LIBOSINFO_0.2.0 {
>> osinfo_install_config_set_user_administrator;
>> osinfo_install_config_set_user_autologin;
>> osinfo_install_config_set_hostname;
>> + osinfo_install_config_param_get_type;
>> + osinfo_install_config_param_new;
>> osinfo_install_script_set_output_prefix;
>> osinfo_install_script_get_type;
>> osinfo_install_script_new;
>> @@ -276,12 +278,18 @@ LIBOSINFO_0.2.0 {
>> osinfo_install_script_generate_output_async;
>> osinfo_install_script_get_profile;
>> osinfo_install_script_get_uri;
>> + osinfo_install_script_has_config_param;
>> + osinfo_install_script_has_config_param_name;
>> + osinfo_install_script_get_config_param_list;
>> osinfo_install_scriptlist_new;
>> osinfo_install_scriptlist_new_filtered;
>> osinfo_install_scriptlist_new_union;
>> osinfo_install_scriptlist_new_intersection;
>> osinfo_install_scriptlist_new_copy;
>> osinfo_install_scriptlist_get_type;
>> + osinfo_install_config_param_new;
>> + osinfo_install_config_param_get_name;
>> + osinfo_install_config_param_get_policy;
>> osinfo_db_get_install_script;
>> osinfo_db_add_install_script;
>> osinfo_db_get_install_script_list;
>> diff --git a/osinfo/osinfo.h b/osinfo/osinfo.h
>> index aa06095..204569b 100644
>> --- a/osinfo/osinfo.h
>> +++ b/osinfo/osinfo.h
>> @@ -34,6 +34,7 @@
>> #include <osinfo/osinfo_devicelinklist.h>
>> #include <osinfo/osinfo_devicelinkfilter.h>
>> #include <osinfo/osinfo_install_config.h>
>> +#include <osinfo/osinfo_install_config_param.h>
>> #include <osinfo/osinfo_install_script.h>
>> #include <osinfo/osinfo_install_scriptlist.h>
>> #include <osinfo/osinfo_productlist.h>
>> diff --git a/osinfo/osinfo_install_config_param.c b/osinfo/osinfo_install_config_param.c
>> new file mode 100644
>> index 0000000..8a0ab56
>> --- /dev/null
>> +++ b/osinfo/osinfo_install_config_param.c
>> @@ -0,0 +1,234 @@
>> +/*
>> + * libosinfo:
>> + *
>> + * Copyright (C) 2009-2012 Red Hat, Inc.
>> + *
>> + * This library is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU Lesser General Public
>> + * License as published by the Free Software Foundation; either
>> + * version 2.1 of the License, or (at your option) any later version.
>> + *
>> + * This library is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this library; if not, write to the Free Software
>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>> + *
>> + * Authors:
>> + * Fabiano Fidêncio <fabiano at fidencio.org>
>> + */
>> +
>> +#include <config.h>
>> +
>> +#include <osinfo/osinfo.h>
>> +
>> +G_DEFINE_TYPE (OsinfoInstallConfigParam, osinfo_install_config_param, OSINFO_TYPE_ENTITY);
>> +
>> +#define OSINFO_INSTALL_CONFIG_PARAM_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamPrivate))
>> +
>> +/**
>> + * SECTION:osinfo_install_config_param
>> + * @short_description: OS install configuration parameters (and its policies)
>> + * @see_also: #OsinfoInstallScript, #OsinfoInstallSciptConfig
>> + *
>> + * #OsinfoInstallConfigParam is an entity for representing all parameters that
>> + * can be set in an automated installation. It is used to help applications to
>> + * generate an automated installation script
>> + */
>> +
>> +struct _OsinfoInstallConfigParamPrivate
>> +{
>> + gchar *name;
>> + OsinfoInstallConfigParamPolicy policy;
>> +};
>> +
>> +enum {
>> + PROP_0,
>> +
>> + PROP_NAME,
>> + PROP_POLICY,
>> +};
>> +
>> +static void
>> +osinfo_install_config_param_set_property(GObject *object,
>> + guint property_id,
>> + const GValue *value,
>> + GParamSpec *pspec)
>> +{
>> + OsinfoInstallConfigParam *config_param =
>> + OSINFO_INSTALL_CONFIG_PARAM (object);
>> +
>> + switch (property_id)
>> + {
>> + case PROP_NAME:
>> + config_param->priv->name = g_value_dup_string(value);
>> + break;
>> + case PROP_POLICY:
>> + {
>> + const gchar *policy = g_value_get_string(value);
>> + if (g_strcmp0(policy, "required") == 0)
>> + config_param->priv->policy =
>> + OSINFO_INSTALL_CONFIG_PARAM_POLICY_REQUIRED;
>> + else if (g_strcmp0(policy, "optional") == 0)
>> + config_param->priv->policy =
>> + OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL;
>> + break;
>> + }
>> + default:
>> + /* We don't have any other property... */
>> + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
>> + break;
>> + }
>> +}
>> +
>> +static void
>> +osinfo_install_config_param_get_property(GObject *object,
>> + guint property_id,
>> + GValue *value,
>> + GParamSpec *pspec)
>> +{
>> + OsinfoInstallConfigParam *config_param =
>> + OSINFO_INSTALL_CONFIG_PARAM (object);
>> +
>> + switch (property_id)
>> + {
>> + case PROP_NAME:
>> + g_value_set_string(value, config_param->priv->name);
>> + break;
>> + case PROP_POLICY:
>> + g_value_set_enum(value, config_param->priv->policy);
>> + break;
>> + default:
>> + /* We don't have any other property... */
>> + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
>> + break;
>> + }
>> +}
>> +
>> +
>> +static void
>> +osinfo_install_config_param_finalize(GObject *object)
>> +{
>> + OsinfoInstallConfigParam *config_param =
>> + OSINFO_INSTALL_CONFIG_PARAM(object);
>> + g_free(config_param->priv->name);
>> +
>> + /* Chain up to the parent class */
>> + G_OBJECT_CLASS (osinfo_install_config_param_parent_class)->finalize (object);
>> +}
>> +
>> +/* Init functions */
>> +static void
>> +osinfo_install_config_param_class_init (OsinfoInstallConfigParamClass *klass)
>> +{
>> + GObjectClass *g_klass = G_OBJECT_CLASS (klass);
>> + GParamSpec *pspec;
>> +
>> + g_klass->set_property = osinfo_install_config_param_set_property;
>> + g_klass->get_property = osinfo_install_config_param_get_property;
>> +
>> + /**
>> + * OsinfoInstallConfigParam:name:
>> + *
>> + * The name of the configuration parameter.
>> + **/
>> + pspec = g_param_spec_string("name",
>> + "Name",
>> + "Parameter name",
>> + NULL,
>> + G_PARAM_WRITABLE |
>> + G_PARAM_READABLE |
>> + G_PARAM_CONSTRUCT_ONLY |
>> + G_PARAM_STATIC_NAME |
>> + G_PARAM_STATIC_NICK |
>> + G_PARAM_STATIC_BLURB);
>> + g_object_class_install_property(g_klass,
>> + PROP_NAME,
>> + pspec);
>> + /**
>> + * OsinfoInstallConfigParam:policy:
>> + *
>> + * The policy of the configuration parameter.
>> + **/
>> + pspec = g_param_spec_string("policy",
>> + "Policy",
>> + "Parameter policy",
>> + NULL,
>> + G_PARAM_WRITABLE |
>> + G_PARAM_READABLE |
>> + G_PARAM_CONSTRUCT_ONLY |
>> + G_PARAM_STATIC_NAME |
>> + G_PARAM_STATIC_NICK |
>> + G_PARAM_STATIC_BLURB);
>> + g_object_class_install_property(g_klass,
>> + PROP_POLICY,
>> + pspec);
>> +
>> +
>> + g_klass->finalize = osinfo_install_config_param_finalize;
>> +
>> + g_type_class_add_private (klass, sizeof (OsinfoInstallConfigParamPrivate));
>> +}
>> +
>> +static void
>> +osinfo_install_config_param_init (OsinfoInstallConfigParam *config_param)
>> +{
>> + OsinfoInstallConfigParamPrivate *priv;
>> + config_param->priv = priv =
>> + OSINFO_INSTALL_CONFIG_PARAM_GET_PRIVATE(config_param);
>> +
>> + config_param->priv->name = NULL;
>> + config_param->priv->policy = OSINFO_INSTALL_CONFIG_PARAM_POLICY_NONE;
>> +}
>> +
>> +
>> +/**
>> + * osinfo_install_config_param_new:
>> + * @name: the configuration parameter name
>> + * @policy: the configuration parameter policy
>> + *
>> + * Construct a new configuration parameter to a #OsinfoInstallScript.
>> + *
>> + * Returns: (transfer full): the new configuration parameter
>> + */
>> +OsinfoInstallConfigParam *osinfo_install_config_param_new(const gchar *name,
>> + const gchar *policy)
>> +{
>> + return g_object_new(OSINFO_TYPE_INSTALL_CONFIG_PARAM,
>> + "name", name,
>> + "policy", policy,
>> + NULL);
>> +}
>> +
>> +/**
>> + * osinfo_install_config_param_get_name:
>> + * @config_param: the configuration parameter
>> + *
>> + * Returns: (transfer none): the name of the configuration parameter
>> + */
>> +const gchar *osinfo_install_config_param_get_name(const OsinfoInstallConfigParam *config_param)
>> +{
>> + return config_param->priv->name;
>> +}
>> +
>> +/**
>> + * osinfo_install_config_param_get_policy:
>> + * @config_param: the configuration parameter
>> + *
>> + * Returns: (transfer none): the policy of the configuration parameter
>> + */
>> +OsinfoInstallConfigParamPolicy osinfo_install_config_param_get_policy(const OsinfoInstallConfigParam *config_param)
>> +{
>> + return config_param->priv->policy;
>> +}
>> +
>> +/*
>> + * Local variables:
>> + * indent-tabs-mode: nil
>> + * c-indent-level: 4
>> + * c-basic-offset: 4
>> + * End:
>> + */
>> diff --git a/osinfo/osinfo_install_config_param.h b/osinfo/osinfo_install_config_param.h
>> new file mode 100644
>> index 0000000..dce47bc
>> --- /dev/null
>> +++ b/osinfo/osinfo_install_config_param.h
>> @@ -0,0 +1,83 @@
>> +/*
>> + * libosinfo: OS installation configuration
>> + *
>> + * Copyright (C) 2009-2012 Red Hat, Inc.
>> + *
>> + * This library is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU Lesser General Public
>> + * License as published by the Free Software Foundation; either
>> + * version 2.1 of the License, or (at your option) any later version.
>> + *
>> + * This library is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this library; if not, write to the Free Software
>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>> + *
>> + * Authors:
>> + * Fabiano Fidêncio <fabiano at fidencio.org>
>> + */
>> +
>> +#include <glib-object.h>
>> +
>> +#ifndef __OSINFO_INSTALL_CONFIG_PARAM_H__
>> +#define __OSINFO_INSTALL_CONFIG_PARAM_H__
>> +
>> +/*
>> + * Type macros.
>> + */
>> +#define OSINFO_TYPE_INSTALL_CONFIG_PARAM (osinfo_install_config_param_get_type ())
>> +#define OSINFO_INSTALL_CONFIG_PARAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParam))
>> +#define OSINFO_IS_INSTALL_CONFIG_PARAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM))
>> +#define OSINFO_INSTALL_CONFIG_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamClass))
>> +#define OSINFO_IS_INSTALL_CONFIG_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSINFO_TYPE_INSTALL_CONFIG_PARAM))
>> +#define OSINFO_INSTALL_CONFIG_PARAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamClass))
>> +
>> +typedef struct _OsinfoInstallConfigParam OsinfoInstallConfigParam;
>> +typedef struct _OsinfoInstallConfigParamClass OsinfoInstallConfigParamClass;
>> +typedef struct _OsinfoInstallConfigParamPrivate OsinfoInstallConfigParamPrivate;
>> +
>> +typedef enum {
>> + OSINFO_INSTALL_CONFIG_PARAM_POLICY_NONE,
>> + OSINFO_INSTALL_CONFIG_PARAM_POLICY_REQUIRED,
>> + OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL,
>> +} OsinfoInstallConfigParamPolicy;
>> +
>> +/* object */
>> +struct _OsinfoInstallConfigParam
>> +{
>> + OsinfoEntity parent_instance;
>> + /* public */
>> +
>> + /* private */
>> + OsinfoInstallConfigParamPrivate *priv;
>> +};
>> +
>> +/* class */
>> +struct _OsinfoInstallConfigParamClass
>> +{
>> + OsinfoEntityClass parent_class;
>> +
>> + /* class members */
>> +};
>> +
>> +GType osinfo_install_config_param_get_type(void);
>> +
>> +OsinfoInstallConfigParam *osinfo_install_config_param_new(const gchar *name, const gchar *policy);
>> +
>> +const gchar *osinfo_install_config_param_get_name(const OsinfoInstallConfigParam *config_param);
>> +
>> +OsinfoInstallConfigParamPolicy osinfo_install_config_param_get_policy(const OsinfoInstallConfigParam *config_param);
>> +
>> +
>> +#endif /* __OSINFO_INSTALL_CONFIG_PARAM_H__ */
>> +/*
>> + * Local variables:
>> + * indent-tabs-mode: nil
>> + * c-indent-level: 4
>> + * c-basic-offset: 4
>> + * End:
>> + */
>> diff --git a/osinfo/osinfo_install_script.c b/osinfo/osinfo_install_script.c
>> index 2d0b440..2a1dfbb 100644
>> --- a/osinfo/osinfo_install_script.c
>> +++ b/osinfo/osinfo_install_script.c
>> @@ -47,6 +47,7 @@ G_DEFINE_TYPE (OsinfoInstallScript, osinfo_install_script, OSINFO_TYPE_ENTITY);
>> struct _OsinfoInstallScriptPrivate
>> {
>> gchar *output_prefix;
>> + GList *config_param_list;
>> };
>>
>> enum {
>> @@ -137,12 +138,12 @@ osinfo_os_get_property(GObject *object,
>> }
>>
>>
>> -
>> static void
>> osinfo_install_script_finalize (GObject *object)
>> {
>> OsinfoInstallScript *script = OSINFO_INSTALL_SCRIPT (object);
>> g_free(script->priv->output_prefix);
>> + g_list_free_full(script->priv->config_param_list, g_object_unref);
>>
>> /* Chain up to the parent class */
>> G_OBJECT_CLASS (osinfo_install_script_parent_class)->finalize (object);
>> @@ -216,6 +217,51 @@ osinfo_install_script_class_init (OsinfoInstallScriptClass *klass)
>> g_type_class_add_private (klass, sizeof (OsinfoInstallScriptPrivate));
>> }
>>
>> +void osinfo_install_script_add_config_param(OsinfoInstallScript *script, OsinfoInstallConfigParam *param)
>> +{
>> + 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);
>> +}
>> +
>> +gboolean osinfo_install_script_has_config_param(const OsinfoInstallScript *script, const OsinfoInstallConfigParam *config_param)
>> +{
>> + guint i, list_size = g_list_length(script->priv->config_param_list);
>> +
>> + for (i = 0; i < list_size; i++)
>> + {
>> + OsinfoInstallConfigParam *tmp;
>> + tmp = g_list_nth_data(script->priv->config_param_list, i);
>> +
>> + if (g_strcmp0(osinfo_install_config_param_get_name(tmp),
>> + osinfo_install_config_param_get_name(config_param)) == 0)
>> + return TRUE;
>> + }
>> + return FALSE;
>
> as discussed on IRC, this loop and the one below should look like:
>
> for (l = the_list; l != NULL; l = l->next) {
> SomeType *p = l->data;
> do_something (p);
> }
>
> otherwise you'll get a quadratic behaviour.
Fixed. Thanks :)
>
> Christophe
--
Fabiano Fidêncio
More information about the virt-tools-list
mailing list