[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 2/7] monitor: Handle new and old style handlers
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 2/7] monitor: Handle new and old style handlers |
Date: |
Wed, 16 Sep 2009 18:32:35 -0300 |
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.
Signed-off-by: Luiz Capitulino <address@hidden>
---
monitor.c | 32 ++++++++++++++++++++++++++------
1 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/monitor.c b/monitor.c
index fe604d8..17754fb 100644
--- a/monitor.c
+++ b/monitor.c
@@ -210,6 +210,11 @@ static int monitor_fprintf(FILE *stream, const char *fmt,
...)
return 0;
}
+static int monitor_handler_ported(const mon_cmd_t *cmd)
+{
+ return (cmd->user_print == NULL ? 0 : 1);
+}
+
static int compare_cmd(const char *name, const char *list)
{
const char *p, *pstart;
@@ -3041,17 +3046,32 @@ static void monitor_handle_command(Monitor *mon, const
char *cmdline)
qdict = qdict_new();
cmd = monitor_parse_command(mon, cmdline, qdict);
- if (cmd) {
- void (*handler)(Monitor *mon, const QDict *qdict);
+ if (!cmd)
+ goto out;
+
+ qemu_errors_to_mon(mon);
- qemu_errors_to_mon(mon);
+ if (monitor_handler_ported(cmd)) {
+ QObject *data = NULL;
+ int (*handler_new)(Monitor *mon,
+ const QDict *params, QObject **ret_data);
- handler = cmd->handler;
- handler(mon, qdict);
+ handler_new = cmd->handler;
+ handler_new(mon, qdict, &data);
- qemu_errors_to_previous();
+ cmd->user_print(mon, data);
+
+ if (data)
+ qobject_decref(data);
+ } else {
+ void (*handler_old)(Monitor *mon, const QDict *qdict);
+ handler_old = cmd->handler;
+ handler_old(mon, qdict);
}
+ qemu_errors_to_previous();
+
+out:
QDECREF(qdict);
}
--
1.6.5.rc0
[Qemu-devel] [PATCH 3/7] monitor: do_info(): handle new and old info handlers, Luiz Capitulino, 2009/09/16
[Qemu-devel] [PATCH 4/7] monitor: Convert do_quit() do QObject, Luiz Capitulino, 2009/09/16
[Qemu-devel] [PATCH 5/7] monitor: Convert do_stop() to QObject, Luiz Capitulino, 2009/09/16
[Qemu-devel] [PATCH 6/7] monitor: Convert do_system_reset() to QObject, Luiz Capitulino, 2009/09/16