On Thu, Jan 19, 2012 at 02:37:07AM +0200, Zeeshan Ali (Khattak) wrote: > From: "Zeeshan Ali (Khattak)" <zeeshanak@xxxxxxxxx> > > --- > 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@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list
Attachment:
pgpcruk2fyaCW.pgp
Description: PGP signature