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