[virt-tools-list] [libosinfo 3/3] Utility function to retrieve device by property

Christophe Fergeau cfergeau at redhat.com
Thu Jan 19 09:51:32 UTC 2012


On Thu, Jan 19, 2012 at 02:37:07AM +0200, Zeeshan Ali (Khattak) wrote:
> From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
> 
> ---
>  osinfo/libosinfo.syms |    1 +
>  osinfo/osinfo_os.c    |   41 +++++++++++++++++++++++++++++++++++++++++
>  osinfo/osinfo_os.h    |    4 ++++
>  3 files changed, 46 insertions(+), 0 deletions(-)
> 
> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
> index de1ff18..8e2d929 100644
> --- a/osinfo/libosinfo.syms
> +++ b/osinfo/libosinfo.syms
> @@ -109,6 +109,7 @@ LIBOSINFO_0.0.6 {
>  	osinfo_os_new;
>  	osinfo_os_get_devices;
>  	osinfo_os_get_all_devices;
> +	osinfo_os_get_device_by_property;
>  	osinfo_os_get_device_links;
>  	osinfo_os_add_device;
>  	osinfo_os_get_family;
> diff --git a/osinfo/osinfo_os.c b/osinfo/osinfo_os.c
> index 0facb08..ec7886a 100644
> --- a/osinfo/osinfo_os.c
> +++ b/osinfo/osinfo_os.c
> @@ -238,6 +238,47 @@ OsinfoDeviceList *osinfo_os_get_all_devices(OsinfoOs *os, OsinfoFilter *filter)
>  }
>  
>  /**
> + * osinfo_os_get_device_by_property:
> + * @os: an operating system
> + * @property: the property of interest
> + * @value: the required value of property @property
> + * @inherited: Should devices from inherited and cloned OSs be included in the
> + * search.
> + *
> + * A utility function that gets the first device found from the list of devices
> + * @os supports, for which the value of @property is @value.
> + *
> + * Returns: (transfer full): The found device or NULL
> + */
> +OsinfoDevice *osinfo_os_get_device_by_property(OsinfoOs *os,
> +                                               const gchar *property,
> +                                               const gchar *value,
> +                                               gboolean inherited)
> +{
> +    OsinfoDevice *ret;
> +    OsinfoDeviceList *devices;
> +    OsinfoFilter *filter;
> +
> +    filter = osinfo_filter_new();
> +    osinfo_filter_add_constraint(filter, property, value);
> +
> +    if (inherited)
> +        devices = osinfo_os_get_all_devices(os, filter);
> +    else
> +        devices = osinfo_os_get_devices(os, filter);
> +    g_object_unref (filter);

Don't you get a warning if you don't do g_object_unref(G_OBJECT(filter)); ?
(same comment for the g_object_unref(devices) below)

> +
> +    if (osinfo_list_get_length(OSINFO_LIST(devices)) > 0)
> +        ret = OSINFO_DEVICE (osinfo_list_get_nth(OSINFO_LIST(devices), 0));

I think it would be better to return the full list and let the app decide whether
it wants the first item in the list or more than that.

> +    else
> +        ret = NULL;
> +
> +    g_object_unref(devices);
> +
> +    return ret;
> +}
> +
> +/**
>   * osinfo_os_get_device_links:
>   * @os: an operating system
>   * @filter: (allow-none)(transfer none): an optional device property filter
> diff --git a/osinfo/osinfo_os.h b/osinfo/osinfo_os.h
> index e1daff1..68e0ea9 100644
> --- a/osinfo/osinfo_os.h
> +++ b/osinfo/osinfo_os.h
> @@ -77,6 +77,10 @@ OsinfoOs *osinfo_os_new(const gchar *id);
>  
>  OsinfoDeviceList *osinfo_os_get_devices(OsinfoOs *os, OsinfoFilter *filter);
>  OsinfoDeviceList *osinfo_os_get_all_devices(OsinfoOs *os, OsinfoFilter *filter);
> +OsinfoDevice *osinfo_os_get_device_by_property(OsinfoOs *os,
> +                                               const char *property,
> +                                               const char *value,
> +                                               gboolean inherited);
>  OsinfoDeviceLinkList *osinfo_os_get_device_links(OsinfoOs *os, OsinfoFilter *filter);
>  
>  OsinfoDeviceLink *osinfo_os_add_device(OsinfoOs *os, OsinfoDevice *dev);
> -- 
> 1.7.7.5
> 
> _______________________________________________
> 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/20120119/68eab064/attachment.sig>


More information about the virt-tools-list mailing list