qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 12/21] qom: add plug_list_props QMP command


From: Anthony Liguori
Subject: [Qemu-devel] [PATCH 12/21] qom: add plug_list_props QMP command
Date: Sun, 24 Jul 2011 20:44:44 -0500

Signed-off-by: Anthony Liguori <address@hidden>
---
 monitor.c       |   35 +++++++++++++++++++++++++++++++++++
 qmp-commands.hx |    9 +++++++++
 2 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/monitor.c b/monitor.c
index 47011dd..e53808a 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1162,6 +1162,41 @@ static int do_plug_set(Monitor *mon, const QDict *qdict, 
QObject **ret_data)
     return 0;
 }
 
+static void plug_list_props_tramp(Plug *plug, const char *name, const char 
*typename, int flags, void *opaque)
+{
+    QList *qlist = opaque;
+    QDict *item = qdict_new();
+
+    qdict_put(item, "name", qstring_from_str(name));
+    qdict_put(item, "type", qstring_from_str(typename));
+    qdict_put(item, "readable", qbool_from_int(!!(flags & PROP_F_READ)));
+    qdict_put(item, "writeable", qbool_from_int(!!(flags & PROP_F_WRITE)));
+    qdict_put(item, "locked", qbool_from_int(!!(flags & PROP_F_LOCKED)));
+
+    qlist_append(qlist, item);
+}
+
+static int do_plug_list_props(Monitor *mon, const QDict *qdict, QObject 
**ret_data)
+{
+    const char *id = qdict_get_str(qdict, "id");
+    QList *qlist = qlist_new();
+    TypeInstance *inst;
+    Plug *plug;
+
+    inst = type_find_by_id(id);
+    if (inst == NULL) {
+        return -1;
+    }
+
+    plug = PLUG(inst);
+
+    plug_foreach_property(plug, plug_list_props_tramp, qlist);
+
+    *ret_data = QOBJECT(qlist);
+
+    return 0;
+}
+
 #ifdef CONFIG_VNC
 static int change_vnc_password(const char *password)
 {
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 1d7e87b..6f1091b 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -139,6 +139,15 @@ EQMP
     },
 
     {
+        .name       = "plug_list_props",
+        .args_type  = "id:s",
+        .params     = "",
+        .help       = "list plug properties",
+        .user_print = monitor_user_noop,
+        .mhandler.cmd_new = do_plug_list_props,
+    },
+
+    {
         .name       = "eject",
         .args_type  = "force:-f,device:B",
         .params     = "[-f] device",
-- 
1.7.4.1




reply via email to

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