From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43638) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WjU4i-0001aj-Ap for qemu-devel@nongnu.org; Sun, 11 May 2014 09:46:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WjU4c-0007gf-KP for qemu-devel@nongnu.org; Sun, 11 May 2014 09:45:56 -0400 Received: from mail-wi0-x233.google.com ([2a00:1450:400c:c05::233]:46232) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WjU4c-0007gW-Co for qemu-devel@nongnu.org; Sun, 11 May 2014 09:45:50 -0400 Received: by mail-wi0-f179.google.com with SMTP id bs8so3306092wib.0 for ; Sun, 11 May 2014 06:45:49 -0700 (PDT) Date: Sun, 11 May 2014 14:45:45 +0100 From: Hani Benhabiles Message-ID: <20140511134545.GE4487@Inspiron-3521> References: <1399558877-4915-1-git-send-email-afaerber@suse.de> <1399558877-4915-3-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1399558877-4915-3-git-send-email-afaerber@suse.de> Subject: Re: [Qemu-devel] [PATCH qom-next 2/4] qom: Implement qom-list HMP command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Andreas =?iso-8859-1?Q?F=E4rber?= Cc: qemu-devel@nongnu.org, Luiz Capitulino 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 > --- > 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);