[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 08/18] monitor: Handle new and old style handlers
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 08/18] monitor: Handle new and old style handlers |
Date: |
Wed, 7 Oct 2009 13:32:05 -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
and are handled as usual.
Signed-off-by: Luiz Capitulino <address@hidden>
---
monitor.c | 26 +++++++++++++++++++++++---
1 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/monitor.c b/monitor.c
index b589d98..d545124 100644
--- a/monitor.c
+++ b/monitor.c
@@ -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);
}
--
1.6.5.rc2.17.gdbc1b
- [Qemu-devel] [PATCH v3 00/18]: Initial QObject conversion, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 01/18] QObject: Accept NULL, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 02/18] Introduce QList, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 03/18] Introduce QList unit-tests, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 04/18] monitor: Convert mon_cmd_t initializations to C99 style, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 05/18] monitor: union for info handlers, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 06/18] monitor: union for command handlers, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 07/18] monitor: Add user_print() to mon_cmd_t, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 08/18] monitor: Handle new and old style handlers,
Luiz Capitulino <=
- [Qemu-devel] [PATCH 09/18] monitor: do_info(): handle new and old info handlers, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 10/18] monitor: Convert do_quit() do QObject, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 11/18] monitor: Convert do_stop() to QObject, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 12/18] monitor: Convert do_system_reset() to QObject, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 13/18] monitor: Convert do_system_powerdown() to QObject, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 14/18] monitor: Convert do_cont() to QObject, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 15/18] monitor: Convert do_balloon() to QObject, Luiz Capitulino, 2009/10/07
- [Qemu-devel] [PATCH 16/18] monitor: Convert do_info_version() to QObject, Luiz Capitulino, 2009/10/07