On Thu, Jan 19, 2012 at 05:22:20PM +0200, Zeeshan Ali (Khattak) wrote: > 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? It probably depends on your CFLAGS, but I'm quite sure I got warnings in some occasions without the casts. > > >> + > >> + 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.. What kind of properties do we get? Does it really make sense to only return the first one and ignore the other results? I don't know what kind of results this function returns, so hardcoding in the library this kind of "arbitrarily pick one result, drop the rest" makes me uncomfortable. Christophe
Attachment:
pgp0twkB7110r.pgp
Description: PGP signature