All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: "Perez Blanco,
	Ricardo (Nokia - BE/Antwerp)" <ricardo.perez_blanco@nokia.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Cc: "dgilbert@redhat.com" <dgilbert@redhat.com>,
	"armbru@redhat.com" <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] Show values and description when using "qom-list"
Date: Tue, 17 Apr 2018 14:19:25 -0500	[thread overview]
Message-ID: <2c22286f-9fae-06fb-0bc3-e307385f39f8@redhat.com> (raw)
In-Reply-To: <AM3PR07MB273186AEFA49A506BFC2D28B3B30@AM3PR07MB273.eurprd07.prod.outlook.com>

[-- Attachment #1: Type: text/plain, Size: 4703 bytes --]

On 04/13/2018 03:05 AM, Perez Blanco, Ricardo (Nokia - BE/Antwerp) wrote:
> Dear all,
> 
> Here you can find my first contribution to qemu. Please, do not hesitate to do any kind of remark.

Welcome to the community.  Looking forward to your v2 patch submission
(see my reply to your followup, for more things to fix before you send v2).


> 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_blanco@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);
> +            }

Technically, you should be checking 'if (value->has_value)'.  It happens
that our current code sets value->value to NULL if value->has_value is
false, but that's less reliable.  Someday, we may improve our QAPI code
generator to quit generating has_FOO members when FOO is an optional
pointer and NULL is an obvious indication that FOO was not provided (at
which point, your code as written is correct), but we're not there yet.


> +++ b/qapi/misc.json
> @@ -1328,10 +1328,12 @@
>  #
>  # @description: if specified, the description of the property.
>  #
> +# @value: if specified, the value of the property.

Missing a mention that this field is '(since 2.13)'.

> +#
>  # 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)) {

This will accept a type named "strange"; is that intentional?

> +            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) {

Likewise, this will accept a type named "internal".  I'm not sure if
your manual checking for types by names is the best approach; and the
fact that we are stringizing the result instead of using the natural
JSON type (a string for "str", a number for "int") is a bit worrisome.

> +            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");
> +        }

Since the ->value field is optional, you have to set
entry->value->has_value = true anywhere that you are setting
entry->value->value to a string.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

  parent reply	other threads:[~2018-04-17 19:19 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-13  8:05 [Qemu-devel] [PATCH] Show values and description when using "qom-list" Perez Blanco, Ricardo (Nokia - BE/Antwerp)
2018-04-13 12:53 ` no-reply
2018-04-16 12:00   ` Perez Blanco, Ricardo (Nokia - BE/Antwerp)
2018-04-17 19:11     ` Eric Blake
2018-04-17 19:19 ` Eric Blake [this message]
2018-04-19  3:51 ` QingFeng Hao
2018-04-24 11:49   ` Dr. David Alan Gilbert
2018-04-24 12:17     ` Perez Blanco, Ricardo (Nokia - BE/Antwerp)
2018-04-25  0:38     ` QingFeng Hao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2c22286f-9fae-06fb-0bc3-e307385f39f8@redhat.com \
    --to=eblake@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=ricardo.perez_blanco@nokia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.