[virt-tools-list] [libosinfo 4/4] API to indicate media is live and/or installer

Christophe Fergeau cfergeau at redhat.com
Thu Nov 24 08:48:09 UTC 2011


On Thu, Nov 24, 2011 at 12:07:58AM +0200, Zeeshan Ali (Khattak) wrote:
> From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
> 
> Add live and installer boolean getters to Media.
> ---
>  osinfo/libosinfo.syms  |    2 ++
>  osinfo/osinfo_loader.c |   15 +++++++++++++++
>  osinfo/osinfo_media.c  |   40 ++++++++++++++++++++++++++++++++++++++++
>  osinfo/osinfo_media.h  |    4 ++++
>  tools/osinfo-detect.c  |   25 +++++++++++++++++--------
>  5 files changed, 78 insertions(+), 8 deletions(-)
> 
> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
> index 5b4113e..f1411f7 100644
> --- a/osinfo/libosinfo.syms
> +++ b/osinfo/libosinfo.syms
> @@ -157,6 +157,8 @@ LIBOSINFO_0.0.1 {
>  	osinfo_media_get_publisher_id;
>          osinfo_media_get_kernel_path;
>          osinfo_media_get_initrd_path;
> +	osinfo_media_get_installer;
> +	osinfo_media_get_live;

osinfo_media_is_installer and osinfo_media_is_live sounds better

Christophe

>  	osinfo_medialist_get_type;
>  	osinfo_medialist_new;
>  	osinfo_medialist_new_copy;
> diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
> index 8a3de6a..79cc815 100644
> --- a/osinfo/osinfo_loader.c
> +++ b/osinfo/osinfo_loader.c
> @@ -489,6 +489,8 @@ static OsinfoMedia *osinfo_loader_media (OsinfoLoader *loader,
>      guint i;
>  
>      gchar *arch = (gchar *)xmlGetProp(root, BAD_CAST "arch");
> +    xmlChar *live = xmlGetProp(root, BAD_CAST OSINFO_MEDIA_PROP_LIVE);
> +    xmlChar *installer = xmlGetProp(root, BAD_CAST OSINFO_MEDIA_PROP_INSTALLER);
>      const gchar *const keys[] = {
>          OSINFO_MEDIA_PROP_URL,
>          OSINFO_MEDIA_PROP_KERNEL,
> @@ -499,6 +501,19 @@ static OsinfoMedia *osinfo_loader_media (OsinfoLoader *loader,
>      OsinfoMedia *media = osinfo_media_new(id, arch);
>  
>      osinfo_loader_entity(loader, OSINFO_ENTITY(media), keys, ctxt, root, err);
> +    if (live) {
> +        osinfo_entity_set_param(OSINFO_ENTITY(media),
> +                                OSINFO_MEDIA_PROP_LIVE,
> +                                (gchar *)live);
> +        xmlFree(live);
> +    }
> +
> +    if (installer) {
> +        osinfo_entity_set_param(OSINFO_ENTITY(media),
> +                                OSINFO_MEDIA_PROP_INSTALLER,
> +                                (gchar *)installer);
> +        xmlFree(installer);
> +    }
>  
>      gint nnodes = osinfo_loader_nodeset("./iso/*", ctxt, &nodes, err);
>      if (*err)
> diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c
> index 6c98ba7..db262c6 100644
> --- a/osinfo/osinfo_media.c
> +++ b/osinfo/osinfo_media.c
> @@ -577,6 +577,46 @@ const gchar *osinfo_media_get_initrd_path(OsinfoMedia *media)
>                                           OSINFO_MEDIA_PROP_INITRD);
>  }
>  
> +static gboolean get_param_as_bool (OsinfoMedia *media,
> +                                   const char *key,
> +                                   gboolean default_value)
> +{
> +    const gchar *value;
> +
> +    value = osinfo_entity_get_param_value(OSINFO_ENTITY(media), key);
> +    if (value == NULL)
> +        return default_value;
> +
> +    return (g_strcmp0 ("true", value) == 0 ||
> +            g_strcmp0 ("yes", value) == 0);
> +}
> +
> +/**
> + * osinfo_media_get_installer:
> + * @media: a #OsinfoMedia instance
> + *
> + * Wether @media provides a installer for an OS.
> + *
> + * Returns: #TRUE if media is installer, #FALSE otherwise
> + */
> +gboolean osinfo_media_get_installer(OsinfoMedia *media)
> +{
> +    return get_param_as_bool (media, OSINFO_MEDIA_PROP_INSTALLER, TRUE);
> +}
> +
> +/**
> + * osinfo_media_get_live:
> + * @media: a #OsinfoMedia instance
> + *
> + * Wether @media can boot directly an OS without any installations.
> + *
> + * Returns: #TRUE if media is live, #FALSE otherwise
> + */
> +gboolean osinfo_media_get_live(OsinfoMedia *media)
> +{
> +    return get_param_as_bool (media, OSINFO_MEDIA_PROP_LIVE, FALSE);
> +}
> +
>  /*
>   * Local variables:
>   *  indent-tabs-mode: nil
> diff --git a/osinfo/osinfo_media.h b/osinfo/osinfo_media.h
> index 4a82025..6b15861 100644
> --- a/osinfo/osinfo_media.h
> +++ b/osinfo/osinfo_media.h
> @@ -77,6 +77,8 @@ typedef struct _OsinfoMediaPrivate OsinfoMediaPrivate;
>  #define OSINFO_MEDIA_PROP_PUBLISHER_ID "publisher-id"
>  #define OSINFO_MEDIA_PROP_KERNEL       "kernel"
>  #define OSINFO_MEDIA_PROP_INITRD       "initrd"
> +#define OSINFO_MEDIA_PROP_LIVE         "live"
> +#define OSINFO_MEDIA_PROP_INSTALLER    "installer"
>  
>  /* object */
>  struct _OsinfoMedia
> @@ -118,6 +120,8 @@ const gchar *osinfo_media_get_system_id(OsinfoMedia *media);
>  const gchar *osinfo_media_get_publisher_id(OsinfoMedia *media);
>  const gchar *osinfo_media_get_kernel_path(OsinfoMedia *media);
>  const gchar *osinfo_media_get_initrd_path(OsinfoMedia *media);
> +gboolean osinfo_media_get_installer(OsinfoMedia *media);
> +gboolean osinfo_media_get_live(OsinfoMedia *media);
>  
>  #endif /* __OSINFO_MEDIA_H__ */
>  /*
> diff --git a/tools/osinfo-detect.c b/tools/osinfo-detect.c
> index 0051cf4..750f98f 100644
> --- a/tools/osinfo-detect.c
> +++ b/tools/osinfo-detect.c
> @@ -79,17 +79,26 @@ static void print_bootable(gboolean bootable)
>              g_print("Media is not bootable.\n");
>  }
>  
> -static void print_os(OsinfoOs *os)
> +static void print_os(OsinfoOs *os, OsinfoMedia *media)
>  {
>      if (os == NULL)
>          return;
>  
> -    if (format == OUTPUT_FORMAT_ENV)
> -        g_print("OSINFO_INSTALLER=%s\n",
> -                osinfo_entity_get_id(OSINFO_ENTITY(os)));
> -    else
> -        g_print("Media is an installer for OS '%s'\n",
> -                osinfo_product_get_name(OSINFO_PRODUCT(os)));
> +    if (format == OUTPUT_FORMAT_ENV) {
> +        const gchar *id = osinfo_entity_get_id(OSINFO_ENTITY(os));
> +
> +        if (osinfo_media_get_installer (media))
> +            g_print("OSINFO_INSTALLER=%s\n", id);
> +        if (osinfo_media_get_live (media))
> +            g_print("OSINFO_LIVE=%s\n", id);
> +    } else {
> +        const gchar *name = osinfo_product_get_name(OSINFO_PRODUCT(os));
> +
> +        if (osinfo_media_get_installer (media))
> +            g_print("Media is an installer for OS '%s'\n", name);
> +        if (osinfo_media_get_live (media))
> +            g_print("Media is live media for OS '%s'\n", name);
> +    }
>  }
>  
>  gint main(gint argc, gchar **argv)
> @@ -148,7 +157,7 @@ gint main(gint argc, gchar **argv)
>      db = osinfo_loader_get_db(loader);
>      os = osinfo_db_guess_os_from_media(db, media, &matched_media);
>  
> -    print_os(os);
> +    print_os(os, matched_media);
>  
>  EXIT:
>      g_clear_error(&error);
> -- 
> 1.7.7.1
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
-------------- 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/virt-tools-list/attachments/20111124/3be46468/attachment.sig>


More information about the virt-tools-list mailing list