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);
>> + }
next prev parent 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 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.