qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <famz@redhat.com>,
	qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v6 04/22] qapi: extend qdict_flatten() for QLists
Date: Fri, 20 Dec 2013 18:19:27 +0100	[thread overview]
Message-ID: <52B47C1F.3080006@redhat.com> (raw)
In-Reply-To: <20131220094613.GB27021@stefanha-thinkpad.redhat.com>

On 20.12.2013 10:46, Stefan Hajnoczi wrote:
> On Thu, Dec 19, 2013 at 08:47:05PM +0100, Max Reitz wrote:
>> Reversing qdict_array_split(), qdict_flatten() should flatten QLists as
>> well by interpreting them as QDicts where every entry's key is its
>> index.
>>
>> This allows bringing QDicts with QLists from QMP commands to the same
>> form as they would be given as command-line options, thereby allowing
>> them to be parsed the same way.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>   qobject/qdict.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++------
>>   1 file changed, 51 insertions(+), 6 deletions(-)
> Please add a tests/check-qdict.c test case.
>
>> diff --git a/qobject/qdict.c b/qobject/qdict.c
>> index fca1902..7b6b08a 100644
>> --- a/qobject/qdict.c
>> +++ b/qobject/qdict.c
>> @@ -477,7 +477,46 @@ static void qdict_destroy_obj(QObject *obj)
>>       g_free(qdict);
>>   }
>>   
>> -static void qdict_do_flatten(QDict *qdict, QDict *target, const char *prefix)
>> +static void qdict_flatten_qdict(QDict *qdict, QDict *target,
>> +                                const char *prefix);
>> +
>> +static void qdict_flatten_qlist(QList *qlist, QDict *target, const char *prefix)
>> +{
>> +    QObject *value;
>> +    const QListEntry *entry;
>> +    char *new_key;
>> +    int i;
>> +
>> +    /* This function is never called with prefix == NULL, i.e., it is always
>> +     * called from within qdict_flatten_q(list|dict)(). Therefore, it does not
>> +     * need to remove list entries during the iteration (the whole list will be
>> +     * deleted eventually anyway from qdict_flatten_qdict()). */
>> +    assert(prefix);
>> +
>> +    entry = qlist_first(qlist);
>> +
>> +    for (i = 0; entry; entry = qlist_next(entry), i++) {
>> +        value = qlist_entry_obj(entry);
>> +
>> +        qobject_incref(value);
>> +        new_key = g_strdup_printf("%s.%i", prefix, i);
>> +        qdict_put_obj(target, new_key, value);
> It seems this operation is clobbered by what follows and should be
> deleted.  Is the incref also superfluous or...
>
>> +
>> +        if (qobject_type(value) == QTYPE_QDICT) {
>> +            qdict_flatten_qdict(qobject_to_qdict(value), target, new_key);
>> +        } else if (qobject_type(value) == QTYPE_QLIST) {
>> +            qdict_flatten_qlist(qobject_to_qlist(value), target, new_key);
>> +        } else {
>> +            /* All other types are moved to the target unchanged. */
>> +            qobject_incref(value);
> ...should this one be deleted?

Oh great, I've been fixing working code, then. *g*

I added the else branch in v5, I guess, it was correct not to have it 
(however, the condition in the else if was missing in v4). I'll drop it 
again, thanks.

>> +            qdict_put_obj(target, new_key, value);
>> +        }
>> +
>> +        g_free(new_key);
>> +    }

  reply	other threads:[~2013-12-20 17:18 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-19 19:47 [Qemu-devel] [PATCH v6 00/22] blkdebug/blkverify: Allow QMP configuration Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 01/22] blkdebug: Use errp for read_config() Max Reitz
2013-12-19 20:21   ` Eric Blake
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 02/22] blkdebug: Don't require sophisticated filename Max Reitz
2013-12-19 20:56   ` Eric Blake
2013-12-19 20:58     ` Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 03/22] qdict: Add qdict_array_split() Max Reitz
2013-12-19 21:20   ` Eric Blake
2013-12-20  9:38   ` Stefan Hajnoczi
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 04/22] qapi: extend qdict_flatten() for QLists Max Reitz
2013-12-19 21:49   ` Eric Blake
2013-12-20  9:46   ` Stefan Hajnoczi
2013-12-20 17:19     ` Max Reitz [this message]
2013-12-20 17:23       ` Max Reitz
2014-01-02  4:01         ` Stefan Hajnoczi
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 05/22] qemu-option: Add qemu_config_parse_qdict() Max Reitz
2013-12-19 22:15   ` Eric Blake
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 06/22] blkdebug: Always call read_config() Max Reitz
2013-12-19 23:06   ` Eric Blake
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 07/22] blkdebug: Use command-line in read_config() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 08/22] block: Allow reference for bdrv_file_open() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 09/22] block: Pass reference to bdrv_file_open() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 10/22] block: Allow block devices without files Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 11/22] block: Add bdrv_open_image() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 12/22] block: Use bdrv_open_image() in bdrv_open() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 13/22] block: Allow recursive "file"s Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 14/22] blockdev: Move "file" to legacy_opts Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 15/22] blkdebug: Allow command-line file configuration Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 16/22] blkverify: Allow command-line configuration Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 17/22] blkverify: Don't require protocol filename Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 18/22] qapi: Add "errno" to the list of polluted words Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 19/22] qapi: QMP interface for blkdebug and blkverify Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 20/22] qemu-io: Make filename optional Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 21/22] iotests: Test new blkdebug/blkverify interface Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 22/22] iotests: Test file format nesting Max Reitz

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=52B47C1F.3080006@redhat.com \
    --to=mreitz@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    --cc=stefanha@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).