From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MvZb6-0002Ky-Vq for qemu-devel@nongnu.org; Wed, 07 Oct 2009 12:42:41 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MvZb1-0002IC-HS for qemu-devel@nongnu.org; Wed, 07 Oct 2009 12:42:40 -0400 Received: from [199.232.76.173] (port=49981 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MvZb1-0002I8-8u for qemu-devel@nongnu.org; Wed, 07 Oct 2009 12:42:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51404) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MvZb0-0005Sl-Ov for qemu-devel@nongnu.org; Wed, 07 Oct 2009 12:42:35 -0400 From: Luiz Capitulino Date: Wed, 7 Oct 2009 13:41:54 -0300 Message-Id: <1254933724-22485-9-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1254933724-22485-1-git-send-email-lcapitulino@redhat.com> References: <1254933724-22485-1-git-send-email-lcapitulino@redhat.com> Subject: [Qemu-devel] [PATCH 08/18] monitor: Handle new and old style handlers List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, avi@redhat.com 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 --- 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