From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MjDEs-00057Z-5Q for qemu-devel@nongnu.org; Thu, 03 Sep 2009 10:24:38 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MjDEn-00054a-8n for qemu-devel@nongnu.org; Thu, 03 Sep 2009 10:24:37 -0400 Received: from [199.232.76.173] (port=32996 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MjDEn-00054U-2A for qemu-devel@nongnu.org; Thu, 03 Sep 2009 10:24:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:29708) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MjDEm-0003WS-Fj for qemu-devel@nongnu.org; Thu, 03 Sep 2009 10:24:32 -0400 From: Luiz Capitulino Date: Thu, 3 Sep 2009 11:24:16 -0300 Message-Id: <1251987859-20254-3-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1251987859-20254-1-git-send-email-lcapitulino@redhat.com> References: <1251987859-20254-1-git-send-email-lcapitulino@redhat.com> Subject: [Qemu-devel] [PATCH 2/5] 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). Ported 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 ported yet, nothing changes for them. Signed-off-by: Luiz Capitulino --- monitor.c | 27 +++++++++++++++++++++------ 1 files changed, 21 insertions(+), 6 deletions(-) diff --git a/monitor.c b/monitor.c index b43a287..9886bb0 100644 --- a/monitor.c +++ b/monitor.c @@ -2827,17 +2827,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); - handler = cmd->handler; - handler(mon, qdict); + if (cmd->user_print) { + QObject *data = NULL; + int (*handler_new)(Monitor *mon, const QDict *params, + QObject **ret_data); - qemu_errors_to_previous(); + handler_new = cmd->handler; + handler_new(mon, qdict, &data); + + 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.4.2.253.g0b1fac