[Libosinfo] [v2 3/8] installer: API to query supported device driver formats

Christophe Fergeau cfergeau at redhat.com
Wed Feb 13 17:24:36 UTC 2013


On Sun, Feb 10, 2013 at 06:41:04PM +0200, Zeeshan Ali (Khattak) wrote:
> From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
> 
> ---
>  data/install-scripts/windows-sif.xml      |  2 ++
>  data/install-scripts/windows-unattend.xml |  2 ++
>  data/schemas/libosinfo.rng                | 10 ++++++++++
>  osinfo/libosinfo.syms                     |  2 ++
>  osinfo/osinfo_install_script.c            | 28 ++++++++++++++++++++++++++++
>  osinfo/osinfo_install_script.h            |  5 +++++
>  osinfo/osinfo_loader.c                    | 20 ++++++++++++++++++++
>  7 files changed, 69 insertions(+)
> 
> diff --git a/data/install-scripts/windows-sif.xml b/data/install-scripts/windows-sif.xml
> index c072f4b..262e6ec 100644
> --- a/data/install-scripts/windows-sif.xml
> +++ b/data/install-scripts/windows-sif.xml
> @@ -6,6 +6,7 @@
>      <product-key-format>$$$$$-$$$$$-$$$$$-$$$$$-$$$$$</product-key-format>
>      <expected-filename>winnt.sif</expected-filename>
>      <can-pre-install-drivers>true</can-pre-install-drivers>
> +    <pre-install-driver-format>windows</pre-install-driver-format>
>      <config>
>        <param name="admin-password" policy="optional"/>
>        <param name="reg-product-key" policy="required"/>
> @@ -72,6 +73,7 @@
>      <product-key-format>$$$$$-$$$$$-$$$$$-$$$$$-$$$$$</product-key-format>
>      <expected-filename>winnt.sif</expected-filename>
>      <can-pre-install-drivers>true</can-pre-install-drivers>
> +    <pre-install-driver-format>windows</pre-install-driver-format>
>      <config>
>        <param name="admin-password" policy="optional"/>
>        <param name="reg-product-key" policy="required"/>
> diff --git a/data/install-scripts/windows-unattend.xml b/data/install-scripts/windows-unattend.xml
> index e140617..e306ec4 100644
> --- a/data/install-scripts/windows-unattend.xml
> +++ b/data/install-scripts/windows-unattend.xml
> @@ -5,6 +5,7 @@
>      <product-key-format>$$$$$-$$$$$-$$$$$-$$$$$-$$$$$</product-key-format>
>     <expected-filename>autounattend.xml</expected-filename>
>     <can-pre-install-drivers>true</can-pre-install-drivers>
> +   <pre-install-driver-format>windows</pre-install-driver-format>
>      <config>
>        <param name="admin-password" policy="optional"/>
>        <param name="hardware-arch" policy="optional"/>
> @@ -220,6 +221,7 @@
>     <product-key-format>$$$$$-$$$$$-$$$$$-$$$$$-$$$$$</product-key-format>
>     <expected-filename>autounattend.xml</expected-filename>
>     <can-pre-install-drivers>true</can-pre-install-drivers>
> +   <pre-install-driver-format>windows</pre-install-driver-format>
>     <config>
>      <param name="admin-password" policy="optional"/>
>      <param name="hardware-arch" policy="required"/>
> diff --git a/data/schemas/libosinfo.rng b/data/schemas/libosinfo.rng
> index 74fc9ce..042ba53 100644
> --- a/data/schemas/libosinfo.rng
> +++ b/data/schemas/libosinfo.rng
> @@ -579,11 +579,21 @@
>              <ref name='bool'/>
>            </element>
>          </optional>
> +        <zeroOrMore>
> +          <element name='pre-install-driver-format'>
> +            <ref name='driver-formats'/>
> +          </element>
> +        </zeroOrMore>
>          <optional>
>            <element name='can-post-install-drivers'>
>              <ref name='bool'/>
>            </element>
>          </optional>
> +        <zeroOrMore>
> +          <element name='post-install-driver-format'>
> +            <ref name='driver-formats'/>
> +          </element>
> +        </zeroOrMore>
>          <element name='template'>
>            <choice>
>              <group>
> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
> index 1ad4d82..5a61e93 100644
> --- a/osinfo/libosinfo.syms
> +++ b/osinfo/libosinfo.syms
> @@ -404,6 +404,8 @@ LIBOSINFO_0.2.4 {
>  	osinfo_device_driver_format_get_type;
>  	osinfo_device_driver_get_format;
>  	osinfo_entity_get_param_value_enum_list;
> +	osinfo_install_script_get_pre_install_driver_formats;
> +	osinfo_install_script_get_post_install_driver_formats;

I tend to add blank lines between methods pertaining to different classes:

osinfo_device_driver_format_get_type;
osinfo_device_driver_get_format;

osinfo_entity_get_param_value_enum_list;

osinfo_install_script_get_pre_install_driver_formats;
osinfo_install_script_get_post_install_driver_formats;


>  } LIBOSINFO_0.2.3;
>  
>  /* Symbols in next release...
> diff --git a/osinfo/osinfo_install_script.c b/osinfo/osinfo_install_script.c
> index 276c756..8b70365 100644
> --- a/osinfo/osinfo_install_script.c
> +++ b/osinfo/osinfo_install_script.c
> @@ -1230,6 +1230,34 @@ gboolean osinfo_install_script_get_can_post_install_drivers(OsinfoInstallScript
>           OSINFO_INSTALL_SCRIPT_PROP_CAN_POST_INSTALL_DRIVERS);
>  }
>  
> +/**
> + * osinfo_install_script_get_pre_install_driver_formats:
> + *
> + * Returns: (transfer container) (element-type OsinfoDeviceDriverFormat):
> + */
> +GList *osinfo_install_script_get_pre_install_driver_formats(OsinfoInstallScript *script)
> +{
> +    return osinfo_entity_get_param_value_enum_list
> +        (OSINFO_ENTITY(script),
> +         OSINFO_INSTALL_SCRIPT_PROP_PRE_INSTALL_DEVICE_DRIVER_FORMAT,
> +         OSINFO_TYPE_DEVICE_DRIVER_FORMAT,
> +         OSINFO_DEVICE_DRIVER_FORMAT_SCRIPT);
> +}
> +
> +/**
> + * osinfo_install_script_get_post_install_driver_formats:
> + *
> + * Returns: (transfer container) (element-type OsinfoDeviceDriverFormat):
> + */
> +GList *osinfo_install_script_get_post_install_driver_formats(OsinfoInstallScript *script)
> +{
> +    return osinfo_entity_get_param_value_enum_list
> +        (OSINFO_ENTITY(script),
> +         OSINFO_INSTALL_SCRIPT_PROP_POST_INSTALL_DEVICE_DRIVER_FORMAT,
> +         OSINFO_TYPE_DEVICE_DRIVER_FORMAT,
> +         OSINFO_DEVICE_DRIVER_FORMAT_SCRIPT);
> +}
> +
>  /*
>   * Local variables:
>   *  indent-tabs-mode: nil
> diff --git a/osinfo/osinfo_install_script.h b/osinfo/osinfo_install_script.h
> index d91751e..f9c0aaf 100644
> --- a/osinfo/osinfo_install_script.h
> +++ b/osinfo/osinfo_install_script.h
> @@ -55,6 +55,8 @@ typedef struct _OsinfoInstallScriptPrivate OsinfoInstallScriptPrivate;
>  #define OSINFO_INSTALL_SCRIPT_PROP_PATH_FORMAT        "path-format"
>  #define OSINFO_INSTALL_SCRIPT_PROP_CAN_PRE_INSTALL_DRIVERS "can-pre-install-drivers"
>  #define OSINFO_INSTALL_SCRIPT_PROP_CAN_POST_INSTALL_DRIVERS "can-post-install-drivers"
> +#define OSINFO_INSTALL_SCRIPT_PROP_PRE_INSTALL_DEVICE_DRIVER_FORMAT "pre-install-driver-format"
> +#define OSINFO_INSTALL_SCRIPT_PROP_POST_INSTALL_DEVICE_DRIVER_FORMAT "post-install-driver-format"
>  
>  /* object */
>  struct _OsinfoInstallScript
> @@ -163,6 +165,9 @@ OsinfoPathFormat osinfo_install_script_get_path_format(OsinfoInstallScript *scri
>  gboolean osinfo_install_script_get_can_pre_install_drivers(OsinfoInstallScript *script);
>  gboolean osinfo_install_script_get_can_post_install_drivers(OsinfoInstallScript *script);
>  
> +GList *osinfo_install_script_get_pre_install_driver_formats(OsinfoInstallScript *script);
> +GList *osinfo_install_script_get_post_install_driver_formats(OsinfoInstallScript *script);
> +
>  #endif /* __OSINFO_INSTALL_SCRIPT_H__ */
>  /*
>   * Local variables:
> diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
> index a190018..0c9cc0b 100644
> --- a/osinfo/osinfo_loader.c
> +++ b/osinfo/osinfo_loader.c
> @@ -705,6 +705,7 @@ static void osinfo_loader_install_script(OsinfoLoader *loader,
>      gchar *value = NULL;
>      xmlNodePtr *nodes = NULL;
>      int nnodes;
> +    int i;
>  
>      if (!id) {
>          OSINFO_ERROR(err, _("Missing install script id property"));
> @@ -762,6 +763,25 @@ static void osinfo_loader_install_script(OsinfoLoader *loader,
>      }
>      g_free(nodes);
>  
> +    nnodes = osinfo_loader_nodeset("./*", ctxt, &nodes, err);
> +    if (error_is_set(err))
> +        goto error;
> +
> +    for (i = 0 ; i < nnodes ; i++) {
> +        if (!nodes[i]->children ||
> +            nodes[i]->children->type != XML_TEXT_NODE ||
> +            (strcmp((const gchar *)nodes[i]->name,
> +                    OSINFO_INSTALL_SCRIPT_PROP_PRE_INSTALL_DEVICE_DRIVER_FORMAT) != 0 &&
> +             strcmp((const gchar *)nodes[i]->name,
> +                    OSINFO_INSTALL_SCRIPT_PROP_POST_INSTALL_DEVICE_DRIVER_FORMAT)))

The last strcmp is missing a != 0

Looks good otherwise, though this is dependant on what we decide for the
first patch in this series.

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libosinfo/attachments/20130213/cc1333b2/attachment.sig>


More information about the Libosinfo mailing list