qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 2/5] monitor: Handle new and old style handlers


From: Luiz Capitulino
Subject: [Qemu-devel] [PATCH 2/5] monitor: Handle new and old style handlers
Date: Thu, 3 Sep 2009 11:24:16 -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).

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 <address@hidden>
---
 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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]