[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 12/26] qapi: Improve qobject input visitor er
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v2 12/26] qapi: Improve qobject input visitor error reporting |
Date: |
Tue, 28 Feb 2017 09:42:54 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
Eric Blake <address@hidden> writes:
> On 02/26/2017 03:43 PM, Markus Armbruster wrote:
>> Error messages refer to nodes of the QObject being visited by name.
>> Trouble is the names are sometimes less than helpful:
>>
>
>> Improve error messages by referring to nodes by path instead, as
>> follows:
>>
>> * The path of the root QObject is whatever @name argument got passed
>> to the visitor, except NULL gets mapped to "<anonymous>".
>>
>> * The path of a root QDict's member is the member key.
>>
>> * The path of a root QList's member is "[%zu]", where %zu is the list
>> index, starting at zero.
>>
>> * The path of a non-root QDict's member is the path of the QDict
>> concatenated with "." and the member key.
>>
>> * The path of a non-root QList's member is the path of the QList
>> concatenated with "[%zu]", where %zu is the list index.
>
> %zu here, but...
>
>
>>
>> Signed-off-by: Markus Armbruster <address@hidden>
>> ---
>> include/qapi/visitor.h | 6 ---
>> qapi/qobject-input-visitor.c | 121
>> +++++++++++++++++++++++++++++++------------
>> 2 files changed, 87 insertions(+), 40 deletions(-)
>>
>
>>
>> -typedef struct StackObject
>> -{
>> - QObject *obj; /* Object being visited */
>> +typedef struct StackObject {
>> + const char *name; /* Name of @obj in its parent, if any */
>> + QObject *obj; /* QDict or QList being visited */
>> void *qapi; /* sanity check that caller uses same pointer */
>>
>> - GHashTable *h; /* If obj is dict: unvisited keys */
>> - const QListEntry *entry; /* If obj is list: unvisited tail */
>> + GHashTable *h; /* If @obj is QDict: unvisited keys */
>> + const QListEntry *entry; /* If @obj is QList: unvisited tail */
>> + unsigned index; /* If @obj is QList: list index of @entry */
>
>> + QSLIST_FOREACH(so , &qiv->stack, node) {
>> + if (qobject_type(so->obj) == QTYPE_QDICT) {
>> + g_string_prepend(qiv->errname, name);
>> + g_string_prepend_c(qiv->errname, '.');
>> + } else {
>> + snprintf(buf, sizeof(buf), "[%u]", so->index);
>
> ...%u here. Minor inconsistency in the commit message, but I'm okay
> mere 'unsigned' in the code, as we'd probably have other problems long
> before hitting a list with 2 billion entries, even on platforms where
> size_t is 64-bit.
Good catch. I'll touch up the commit message.
> Reviewed-by: Eric Blake <address@hidden>
Thanks!
- [Qemu-devel] [PATCH v2 22/26] test-qobject-input-visitor: Cover missing nested struct member, (continued)
- [Qemu-devel] [PATCH v2 22/26] test-qobject-input-visitor: Cover missing nested struct member, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 10/26] qapi: Clean up after commit 3d344c2, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 04/26] qmp: Dumb down how we run QMP command registration, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 19/26] test-string-input-visitor: Tear down existing test automatically, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 12/26] qapi: Improve qobject input visitor error reporting, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 23/26] qapi: Make input visitors detect unvisited list tails, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 18/26] tests-qobject-input-strict: Merge into test-qobject-input-visitor, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 25/26] qapi: Fix object input visit beyond end of list, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 06/26] qmp: Drop duplicated QMP command object checks, Markus Armbruster, 2017/02/26