On Thu, Jan 19, 2012 at 11:51 AM, Christophe Fergeau <cfergeau@xxxxxxxxxx> wrote: > 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) Nope, should I be? >> + >> + 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. I guess, we can provide another function 'get_devices_by_property' as well.. -- Regards, Zeeshan Ali (Khattak) FSF member#5124