From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:49719) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RsE4s-00079r-MD for qemu-devel@nongnu.org; Tue, 31 Jan 2012 08:49:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RsE19-0000VA-Dv for qemu-devel@nongnu.org; Tue, 31 Jan 2012 08:45:09 -0500 Received: from cantor2.suse.de ([195.135.220.15]:45596 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RsE19-0000Un-2y for qemu-devel@nongnu.org; Tue, 31 Jan 2012 08:45:03 -0500 Message-ID: <4F27EFD3.3090709@suse.de> Date: Tue, 31 Jan 2012 14:42:43 +0100 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1327957741-5842-1-git-send-email-aliguori@us.ibm.com> <1327957741-5842-11-git-send-email-aliguori@us.ibm.com> In-Reply-To: <1327957741-5842-11-git-send-email-aliguori@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 11/23] qom: allow object_class_foreach to take additional parameters to refine search List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Paolo Bonzini , qemu-devel@nongnu.org, Peter Maydell $subject is a bit long. Am 30.01.2012 22:08, schrieb Anthony Liguori: > Signed-off-by: Anthony Liguori Reviewed-by: Andreas F=E4rber However... > diff --git a/hw/qdev.c b/hw/qdev.c > index 636b6b4..a7980c5 100644 > --- a/hw/qdev.c > +++ b/hw/qdev.c > @@ -255,7 +255,7 @@ int qdev_device_help(QemuOpts *opts) > driver =3D qemu_opt_get(opts, "driver"); > if (driver && !strcmp(driver, "?")) { > bool show_no_user =3D false; > - object_class_foreach(qdev_print_devinfo, &show_no_user); > + object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, &= show_no_user); > return 1; > } > =20 > @@ -1077,7 +1077,7 @@ void do_info_qtree(Monitor *mon) > =20 > void do_info_qdm(Monitor *mon) > { > - object_class_foreach(qdev_print_devinfo, NULL); > + object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, NULL)= ; > } > =20 > int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data= ) If you reordered this patch before 07/23 then you could apply it right away, unbreaking object_class_foreach(). Andreas > diff --git a/include/qemu/object.h b/include/qemu/object.h > index ba37850..adbcfb1 100644 > --- a/include/qemu/object.h > +++ b/include/qemu/object.h > @@ -431,6 +431,7 @@ const char *object_class_get_name(ObjectClass *klas= s); > ObjectClass *object_class_by_name(const char *typename); > =20 > void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque)= , > + const char *implements_type, bool include_ab= stract, > void *opaque); > =20 > #endif > diff --git a/qom/object.c b/qom/object.c > index a12895f..3dabb1a 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -467,6 +467,8 @@ ObjectClass *object_class_by_name(const char *typen= ame) > typedef struct OCFData > { > void (*fn)(ObjectClass *klass, void *opaque); > + const char *implements_type; > + bool include_abstract; > void *opaque; > } OCFData; > =20 > @@ -475,16 +477,28 @@ static void object_class_foreach_tramp(gpointer k= ey, gpointer value, > { > OCFData *data =3D opaque; > TypeImpl *type =3D value; > + ObjectClass *k; > =20 > type_class_init(type); > + k =3D type->class; > =20 > - data->fn(value, type->class); > + if (!data->include_abstract && type->abstract) { > + return; > + } > + > + if (data->implements_type &&=20 > + !object_class_dynamic_cast(k, data->implements_type)) { > + return; > + } > + > + data->fn(k, data->opaque); > } > =20 > void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque)= , > + const char *implements_type, bool include_ab= stract, > void *opaque) > { > - OCFData data =3D { fn, opaque }; > + OCFData data =3D { fn, implements_type, include_abstract, opaque }= ; > =20 > g_hash_table_foreach(type_table_get(), object_class_foreach_tramp,= &data); > } --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg