On Thu, May 08, 2014 at 04:21:15PM +0200, Andreas Färber wrote: > Implement it as a wrapper for QMP qom-list, but mimic the behavior of > scripts/qmp/qom-list in making the path argument optional and listing > the root if absent, to hint users what kind of path to pass. > > Signed-off-by: Andreas Färber <afaer...@suse.de> > --- > hmp-commands.hx | 13 +++++++++++++ > hmp.c | 27 +++++++++++++++++++++++++++ > hmp.h | 1 + > 3 files changed, 41 insertions(+) > > diff --git a/hmp-commands.hx b/hmp-commands.hx > index 8971f1b..a0166af 100644 > --- a/hmp-commands.hx > +++ b/hmp-commands.hx > @@ -1678,6 +1678,19 @@ Add CPU with id @var{id} > ETEXI > > { > + .name = "qom-list", > + .args_type = "path:s?", > + .params = "path", > + .help = "list QOM properties", > + .mhandler.cmd = hmp_qom_list, > + }, > + > +STEXI > +@item qom-list [@var{path}] > +Print QOM properties of object at location @var{path} > +ETEXI > + > + { > .name = "info", > .args_type = "item:s?", > .params = "[subcommand]", > diff --git a/hmp.c b/hmp.c > index ca869ba..1c29c8a 100644 > --- a/hmp.c > +++ b/hmp.c > @@ -1666,3 +1666,30 @@ void hmp_object_del(Monitor *mon, const QDict *qdict) > qmp_object_del(id, &err); > hmp_handle_error(mon, &err); > } > + > +void hmp_qom_list(Monitor *mon, const QDict *qdict) > +{ > + const char *path = qdict_get_try_str(qdict, "path"); > + ObjectPropertyInfoList *list; > + Error *err = NULL; > + > + if (path == NULL) { > + monitor_printf(mon, "/\n"); > + return; > + } > + list = qmp_qom_list(path, &err); > + if (err == NULL) {
This: > + while (list != NULL) { > + ObjectPropertyInfoList *next = list->next; > + > + monitor_printf(mon, "%s (%s)\n", > + list->value->name, list->value->type); > + g_free(list->value->name); > + g_free(list->value->type); > + g_free(list->value); > + g_free(list); > + list = next; > + } could be simplified to: ObjectPropertyInfoList *start = list; while (list) { ObjectPropertyInfo *value = list->value; monitor_printf(mon, "%s (%s)\n", value->name, value->type); list = list->next; } qapi_free_ObjectPropertyInfoList(start); Other than that, the patch seems fine to me. > + } > + hmp_handle_error(mon, &err); > +} > diff --git a/hmp.h b/hmp.h > index 20ef454..7ab969e 100644 > --- a/hmp.h > +++ b/hmp.h > @@ -93,6 +93,7 @@ void hmp_qemu_io(Monitor *mon, const QDict *qdict); > void hmp_cpu_add(Monitor *mon, const QDict *qdict); > void hmp_object_add(Monitor *mon, const QDict *qdict); > void hmp_object_del(Monitor *mon, const QDict *qdict); > +void hmp_qom_list(Monitor *mon, const QDict *qdict); > void object_add_completion(ReadLineState *rs, int nb_args, const char *str); > void object_del_completion(ReadLineState *rs, int nb_args, const char *str); > void device_add_completion(ReadLineState *rs, int nb_args, const char *str);