From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MjDEv-00059m-Gu for qemu-devel@nongnu.org; Thu, 03 Sep 2009 10:24:41 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MjDEq-00056G-0f for qemu-devel@nongnu.org; Thu, 03 Sep 2009 10:24:40 -0400 Received: from [199.232.76.173] (port=33000 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MjDEp-000562-Pw for qemu-devel@nongnu.org; Thu, 03 Sep 2009 10:24:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:32884) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MjDEp-0003XI-0p for qemu-devel@nongnu.org; Thu, 03 Sep 2009 10:24:35 -0400 From: Luiz Capitulino Date: Thu, 3 Sep 2009 11:24:17 -0300 Message-Id: <1251987859-20254-4-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 3/5] monitor: Port do_info() to QObject 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 do_info() is special, its job is to call 'info handlers'. This is similar to what monitor_handle_command() does, therefore do_info() also has to distinguish among new and old style info handlers. This commit ports do_info() to call info handlers according to the new QObject style. It's important to note that: 1. the return value of do_info() will be the same of the called handler 2. monitor_print_nothing() will be used by handlers to... print nothing :) Signed-off-by: Luiz Capitulino --- monitor.c | 45 +++++++++++++++++++++++++++++++++------------ qemu-monitor.hx | 2 +- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/monitor.c b/monitor.c index 9886bb0..f9f3cbd 100644 --- a/monitor.c +++ b/monitor.c @@ -208,6 +208,11 @@ static int monitor_fprintf(FILE *stream, const char *fmt, ...) return 0; } +static void monitor_print_nothing(Monitor *mon, const QObject *data) +{ + return; +} + static int compare_cmd(const char *name, const char *list) { const char *p, *pstart; @@ -277,24 +282,40 @@ static void do_commit(Monitor *mon, const QDict *qdict) } } -static void do_info(Monitor *mon, const QDict *qdict) +static int do_info(Monitor *mon, const QDict *qdict, QObject **ret_data) { + int ret; const mon_cmd_t *cmd; const char *item = qdict_get_try_str(qdict, "item"); - void (*handler)(Monitor *); - if (!item) - goto help; - for(cmd = info_cmds; cmd->name != NULL; cmd++) { + if (!item) { + help_cmd(mon, "info"); + return 0; + } + + for (cmd = info_cmds; cmd->name != NULL; cmd++) { if (compare_cmd(item, cmd->name)) - goto found; + break; } - help: - help_cmd(mon, "info"); - return; - found: - handler = cmd->handler; - handler(mon); + + if (cmd->name == NULL) + return -1; + + ret = 0; + if (cmd->user_print) { + int (*handler_new)(Monitor *mon, QObject **ret_data); + + handler_new = cmd->handler; + ret = handler_new(mon, ret_data); + + cmd->user_print(mon, *ret_data); + } else { + void (*handler_old)(Monitor *); + handler_old = cmd->handler; + handler_old(mon); + } + + return ret; } static void do_info_version(Monitor *mon) diff --git a/qemu-monitor.hx b/qemu-monitor.hx index a6d0f2e..44402c5 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -22,7 +22,7 @@ STEXI Commit changes to the disk images (if -snapshot is used) or backing files. ETEXI - { "info", "item:s?", do_info, NULL, + { "info", "item:s?", do_info, monitor_print_nothing, "[subcommand]", "show various information about the system state" }, STEXI @item info @var{subcommand} -- 1.6.4.2.253.g0b1fac