Reviewed-by: Michael Roth <mdr...@linux.vnet.ibm.com> Tested-by: Michael Roth <mdr...@linux.vnet.ibm.com>
On Wed, 28 Sep 2011 11:44:41 -0300, Luiz Capitulino <lcapitul...@redhat.com> wrote: > Signed-off-by: Luiz Capitulino <lcapitul...@redhat.com> > --- > monitor.c | 40 +++++++++++++++------------------------- > qapi-schema.json | 23 +++++++++++++++++++++++ > qmp-commands.hx | 6 ++++++ > 3 files changed, 44 insertions(+), 25 deletions(-) > > diff --git a/monitor.c b/monitor.c > index 66b3004..d546bad 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -730,39 +730,37 @@ help: > help_cmd(mon, "info"); > } > > -static QObject *get_cmd_dict(const char *name) > +static CommandInfoList *alloc_cmd_entry(const char *cmd_name) > { > - const char *p; > + CommandInfoList *info; > > - /* Remove '|' from some commands */ > - p = strchr(name, '|'); > - if (p) { > - p++; > - } else { > - p = name; > - } > + info = g_malloc0(sizeof(*info)); > + info->value = g_malloc0(sizeof(*info->value)); > + info->value->name = g_strdup(cmd_name); > > - return qobject_from_jsonf("{ 'name': %s }", p); > + return info; > } > > -static void do_info_commands(Monitor *mon, QObject **ret_data) > +CommandInfoList *qmp_query_commands(Error **errp) > { > - QList *cmd_list; > + CommandInfoList *info, *cmd_list = NULL; > const mon_cmd_t *cmd; > > - cmd_list = qlist_new(); > - > for (cmd = qmp_cmds; cmd->name != NULL; cmd++) { > - qlist_append_obj(cmd_list, get_cmd_dict(cmd->name)); > + info = alloc_cmd_entry(cmd->name); > + info->next = cmd_list; > + cmd_list = info; > } > > for (cmd = qmp_query_cmds; cmd->name != NULL; cmd++) { > char buf[128]; > snprintf(buf, sizeof(buf), "query-%s", cmd->name); > - qlist_append_obj(cmd_list, get_cmd_dict(buf)); > + info = alloc_cmd_entry(buf); > + info->next = cmd_list; > + cmd_list = info; > } > > - *ret_data = QOBJECT(cmd_list); > + return cmd_list; > } > > /* get the current CPU defined by the user */ > @@ -3051,14 +3049,6 @@ static const mon_cmd_t qmp_cmds[] = { > > static const mon_cmd_t qmp_query_cmds[] = { > { > - .name = "commands", > - .args_type = "", > - .params = "", > - .help = "list QMP available commands", > - .user_print = monitor_user_noop, > - .mhandler.info_new = do_info_commands, > - }, > - { > .name = "block", > .args_type = "", > .params = "", > diff --git a/qapi-schema.json b/qapi-schema.json > index 2ebcb1c..b26dd25 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -202,3 +202,26 @@ > # Since: 0.14.0 > ## > { 'command': 'query-chardev', 'returns': ['ChardevInfo'] } > + > +## > +# @CommandInfo: > +# > +# Information about a QMP command > +# > +# @name: The command name > +# > +# Since: 0.14.0 > +## > +{ 'type': 'CommandInfo', 'data': {'name': 'str'} } > + > +## > +# @query-commands: > +# > +# Return a list of supported QMP commands by this server > +# > +# Returns: A list of @CommandInfo for all supported commands > +# > +# Since: 0.14.0 > +## > +{ 'command': 'query-commands', 'returns': ['CommandInfo'] } > + > diff --git a/qmp-commands.hx b/qmp-commands.hx > index dfc02af..0fda5c3 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -1090,6 +1090,12 @@ Note: This example has been shortened as the real > response is too long. > > EQMP > > + { > + .name = "query-commands", > + .args_type = "", > + .mhandler.cmd_new = qmp_marshal_input_query_commands, > + }, > + > SQMP > query-chardev > ------------- > -- > 1.7.7.rc0.72.g4b5ea > -- Sincerely, Mike Roth IBM Linux Technology Center