Dear all,

Here you can find my first contribution to qemu. Please, do not hesitate to do 
any kind of remark.

Based on ac4ba87ae0738d7a77708f8ce31ae2378ab99654

Kind regards,

Ricardo Perez Blanco

>From 65df20cef2846d764a8a821574f5f3643391aac5 Mon Sep 17 00:00:00 2001
From: Ricardo Perez Blanco <ricardo.perez_bla...@nokia.com>
Date: Wed, 11 Apr 2018 12:09:11 +0200
Subject: [PATCH] Show values and description when using "qom-list"

For debugging purposes it is very useful to:
 - See the description of the field. This information is already filled
   in but not shown in "qom-list" command.
 - Display value of the field. So far, only well known types are
   implemented (string, str, int, uint, bool).

Signed-off-by: Ricardo Perez Blanco <ricardo.perez_bla...@nokia.com>
---
 hmp.c          | 13 +++++++++++--
 qapi/misc.json |  4 +++-
 qmp.c          | 26 ++++++++++++++++++++++++++
 3 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/hmp.c b/hmp.c
index a25c7bd..967e0b2 100644
--- a/hmp.c
+++ b/hmp.c
@@ -2490,8 +2490,17 @@ void hmp_qom_list(Monitor *mon, const QDict *qdict)
         while (list != NULL) {
             ObjectPropertyInfo *value = list->value;

-            monitor_printf(mon, "%s (%s)\n",
-                           value->name, value->type);
+            monitor_printf(mon, "%s", value->name);
+            if (value->value) {
+                monitor_printf(mon, "=%s", value->value);
+            }
+            monitor_printf(mon, " (%s)", value->type);
+            if (value->description) {
+                monitor_printf(mon, "\r\t\t\t\t\t\t\t\t\t[Description: %s]",
+                               value->description);
+            }
+            monitor_printf(mon, "\n");
+
             list = list->next;
         }
         qapi_free_ObjectPropertyInfoList(start);
diff --git a/qapi/misc.json b/qapi/misc.json
index 5636f4a..6b3b4de 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -1328,10 +1328,12 @@
 #
 # @description: if specified, the description of the property.
 #
+# @value: if specified, the value of the property.
+#
 # Since: 1.2
 ##
 { 'struct': 'ObjectPropertyInfo',
-  'data': { 'name': 'str', 'type': 'str', '*description': 'str' } }
+  'data': { 'name': 'str', 'type': 'str', '*description':'str', '*value':'str' 
} }

 ##
 # @qom-list:
diff --git a/qmp.c b/qmp.c
index f722616..750b5d0 100644
--- a/qmp.c
+++ b/qmp.c
@@ -237,6 +237,32 @@ ObjectPropertyInfoList *qmp_qom_list(const char *path, 
Error **errp)

         entry->value->name = g_strdup(prop->name);
         entry->value->type = g_strdup(prop->type);
+        if (prop->description) {
+            entry->value->description = g_strdup(prop->description);
+        }
+        if ((g_ascii_strncasecmp(entry->value->type, "string", 6) == 0) ||
+            (g_ascii_strncasecmp(entry->value->type, "str", 3) == 0)) {
+            Error **errp = NULL;
+            entry->value->value = g_strdup_printf("\"%s\"",
+                object_property_get_str(obj, entry->value->name, errp));
+        }
+        if (g_ascii_strncasecmp(entry->value->type, "int", 3) == 0) {
+            Error **errp = NULL;
+            entry->value->value = g_strdup_printf("%ld",
+                object_property_get_int(obj, entry->value->name, errp));
+        }
+        if (g_ascii_strncasecmp(entry->value->type, "uint", 4) == 0) {
+            Error **errp = NULL;
+            entry->value->value = g_strdup_printf("%lu",
+                object_property_get_uint(obj, entry->value->name, errp));
+        }
+        if (g_ascii_strncasecmp(entry->value->type, "bool", 4) == 0) {
+            Error **errp = NULL;
+            entry->value->value = g_strdup_printf("%s",
+               (object_property_get_bool(obj, entry->value->name, errp) == 
true)
+                ? "true" : "false");
+        }
+
     }

     return props;
--
1.8.3.1

Reply via email to