提交 13917bee 编写于 作者: L Luiz Capitulino 提交者: Anthony Liguori

monitor: Handle new and old style handlers

This commit changes monitor_handle_command() to support old style
_and_ new style handlers.

New style handlers are protocol independent, they return their
data to the Monitor, which in turn decides how to print them
(ie. user protocol vs. machine protocol).

Converted handlers will use the 'user_print' member of 'mon_cmd_t'
to define its user protocol function, which will be called to print
data in the user protocol format.

Handlers which don't have 'user_print' defined are not converted
and are handled as usual.

Patchworks-ID: 35340
Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 a2876f59
......@@ -77,6 +77,7 @@ typedef struct mon_cmd_t {
union {
void (*info)(Monitor *mon);
void (*cmd)(Monitor *mon, const QDict *qdict);
void (*cmd_new)(Monitor *mon, const QDict *params, QObject **ret_data);
} mhandler;
} mon_cmd_t;
......@@ -214,6 +215,11 @@ static int monitor_fprintf(FILE *stream, const char *fmt, ...)
return 0;
}
static inline int monitor_handler_ported(const mon_cmd_t *cmd)
{
return cmd->user_print != NULL;
}
static int compare_cmd(const char *name, const char *list)
{
const char *p, *pstart;
......@@ -3014,12 +3020,26 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
qdict = qdict_new();
cmd = monitor_parse_command(mon, cmdline, qdict);
if (cmd) {
qemu_errors_to_mon(mon);
if (!cmd)
goto out;
qemu_errors_to_mon(mon);
if (monitor_handler_ported(cmd)) {
QObject *data = NULL;
cmd->mhandler.cmd_new(mon, qdict, &data);
if (data)
cmd->user_print(mon, data);
qobject_decref(data);
} else {
cmd->mhandler.cmd(mon, qdict);
qemu_errors_to_previous();
}
qemu_errors_to_previous();
out:
QDECREF(qdict);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册