On Mon, Jan 25, 2016 at 11:24:47AM +0300, Valentin Rakush wrote: > This patch adds support for qom-type-prop-list command to list object > class properties. A later patch will use this functionality to > implement x86_64-cpu properties. > > Signed-off-by: Valentin Rakush <valentin.rak...@gmail.com> > Cc: Luiz Capitulino <lcapitul...@redhat.com> > Cc: Eric Blake <ebl...@redhat.com> > Cc: Markus Armbruster <arm...@redhat.com> > Cc: Andreas Färber <afaer...@suse.de> > Cc: Daniel P. Berrange <berra...@redhat.com> > Cc: Eduardo Habkost <ehabk...@redhat.com> > --- [...] > diff --git a/qmp.c b/qmp.c > index 53affe2..baf25c0 100644 > --- a/qmp.c > +++ b/qmp.c > @@ -460,6 +460,37 @@ ObjectTypeInfoList *qmp_qom_list_types(bool > has_implements, > return ret; > } > > +ObjectPropertyInfoList *qmp_qom_type_prop_list(const char *typename, Error > **errp) > +{ > + ObjectClass *klass; > + ObjectPropertyInfoList *props = NULL; > + ObjectProperty *prop; > + ObjectPropertyIterator iter; > + > + klass = object_class_by_name(typename); > + if (!klass) { > + error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND, > + "Object class '%s' not found", typename); > + return NULL; > + } > + > + object_class_property_iter_init(&iter, klass); > + while ((prop = object_property_iter_next(&iter))) { > + ObjectPropertyInfoList *entry = g_new0(ObjectPropertyInfoList, 1); > + > + if (entry) { > + entry->value = g_new0(ObjectPropertyInfo, 1); > + entry->next = props; > + props = entry; > + > + entry->value->name = g_strdup(prop->name); > + entry->value->type = g_strdup(prop->type); > + } > + } > + > + return props; > +} > +
We already have "-device <type>,help", and it uses a completely different mechanism for listing properties. There's no reason for having two arbitrarily different APIs for listing properties returning different results. If qmp_device_list_properties() is not enough for you, please clarify why, so we can consider improving it. > /* Return a DevicePropertyInfo for a qdev property. > * > * If a qdev property with the given name does not exist, use the given > default > diff --git a/qom/object.c b/qom/object.c > index 5ff97ab..cabd91d 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -994,6 +994,13 @@ ObjectProperty *object_property_find(Object *obj, const > char *name, > return NULL; > } > > +void object_class_property_iter_init(ObjectPropertyIterator *iter, > + ObjectClass *klass) > +{ > + g_hash_table_iter_init(&iter->iter, klass->properties); > + iter->nextclass = object_class_get_parent(klass); > +} > + > void object_property_iter_init(ObjectPropertyIterator *iter, > Object *obj) > { > -- > 1.8.3.1 > -- Eduardo