From: "Kővágó Zoltán" <dirty.ice.hu@gmail.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: Markus Armbruster <armbru@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>, QEMU <qemu-devel@nongnu.org>,
Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH 08/25] qapi: support nested structs in OptsVisitor
Date: Thu, 20 Aug 2015 23:21:01 +0200 [thread overview]
Message-ID: <55D644BD.5060608@gmail.com> (raw)
In-Reply-To: <CAJ+F1CJEXafgDDKQc9+hqxRpCcgwuJsH_SYgyo6Jqd2CSSUYTA@mail.gmail.com>
Hi,
2015-08-20 17:55 keltezéssel, Marc-André Lureau írta:
[snip]
>> +static void
>> +sum_strlen(gpointer data, gpointer user_data)
>> +{
>> + const char *str = data;
>> + size_t *sum_len = user_data;
>> +
>> + if (str) { /* skip NULLs */
>> + *sum_len += strlen(str) + 1;
>> + }
>> +}
>> +
>> +static void
>> +append_str(gpointer data, gpointer user_data)
>> +{
>> + const char *str = data;
>> + char *concat_str = user_data;
>> +
>> + if (str) {
>> + strcat(concat_str, str);
>> + strcat(concat_str, ".");
>> + }
>> +}
>> +
>> +/* lookup a name, using a fully qualified version */
>> static GQueue *
>> -lookup_distinct(const OptsVisitor *ov, const char *name, Error **errp)
>> +lookup_distinct(const OptsVisitor *ov, const char *name, char **out_key,
>> + Error **errp)
>> {
>> - GQueue *list;
>> + GQueue *list = NULL;
>> + char *key;
>> + size_t sum_len = strlen(name);
>> +
>> + g_queue_foreach(ov->nested_names, sum_strlen, &sum_len);
>> + key = g_malloc(sum_len+1);
>> + key[0] = 0;
>> + g_queue_foreach(ov->nested_names, append_str, key);
>> + strcat(key, name);
>
> Instead of using a GQueue, I think you could use a GArray, and use
> g_strjoin() here.
Unfortunately g_strjoinv won't skip NULL pointers in the array (as it
expects a NULL terminated array), but we will get structs with NULL name
(the top level struct will be such one). And one can't simply say if
(name) { g_array_append_val(...); } in opts_start_struct because we need
to know somehow in opts_end_struct if we need to pop or not.
One way is to use NULL pointers because in that case we must pop, but
g_strjoinv won't work. An alternate is to only push non-NULL elements
into the array and have another bool array where we store if we need to
pop or not. Not sure which one is cleaner.
Or maybe if it's guaranteed that only the top-level struct will have a
NULL name, we can hack around by only pushing non-NULL elements and
ignore empty array when popping.
Zoltan
next prev parent reply other threads:[~2015-08-20 21:21 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-06 18:28 [Qemu-devel] [PATCH 00/25] audio: -audiodev option, multiple options Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 01/25] qapi: support implicit structs in OptsVisitor Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 02/25] qapi: convert NumaOptions into a flat union Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 03/25] net: remove NetLegacy struct Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 04/25] net: use Netdev instead of NetClientOptions in client init Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 05/25] qapi: change Netdev into a flat union Kővágó, Zoltán
2015-08-20 15:03 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 06/25] qapi: reorder NetdevBase and Netdev Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 07/25] qapi: qapi for audio backends Kővágó, Zoltán
2015-08-20 15:30 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 08/25] qapi: support nested structs in OptsVisitor Kővágó, Zoltán
2015-08-20 15:55 ` Marc-André Lureau
2015-08-20 21:21 ` Kővágó Zoltán [this message]
2015-08-06 18:28 ` [Qemu-devel] [PATCH 09/25] audio: use qapi AudioFormat instead of audfmt_e Kővágó, Zoltán
2015-08-20 16:00 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 10/25] audio: -audiodev command line option Kővágó, Zoltán
2015-08-20 17:17 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 11/25] audio: reduce glob_audio_state usage Kővágó, Zoltán
2015-08-20 17:39 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 12/25] audio: basic support for multi backend audio Kővágó, Zoltán
2015-08-20 18:01 ` Marc-André Lureau
2015-08-21 12:23 ` Kővágó Zoltán
2015-08-21 14:24 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 13/25] audio: add audiodev properties to frontends Kővágó, Zoltán
2015-08-20 18:55 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 14/25] audio: audiodev= parameters no longer optional when -audiodev present Kővágó, Zoltán
2015-08-20 19:15 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 15/25] paaudio: do not create multiple connections to the same server Kővágó, Zoltán
2015-08-20 19:38 ` Marc-André Lureau
2015-08-21 12:41 ` Kővágó Zoltán
2015-08-21 14:36 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 16/25] paaudio: properly disconnect streams in fini_* Kővágó, Zoltán
2015-08-20 20:29 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 17/25] audio: remove gcc specific audio_MIN, audio_MAX Kővágó, Zoltán
2015-08-19 18:17 ` Gerd Hoffmann
2015-08-19 23:31 ` Peter Maydell
2015-08-20 20:36 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 18/25] audio: do not run each backend in audio_run Kővágó, Zoltán
2015-08-20 20:49 ` Marc-André Lureau
2015-08-21 12:59 ` Kővágó Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 19/25] paaudio: fix playback glitches Kővágó, Zoltán
2015-08-20 22:08 ` Marc-André Lureau
2015-08-21 13:18 ` Kővágó Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 20/25] audio: remove mixeng specific code from backends Kővágó, Zoltán
2015-08-19 19:07 ` Gerd Hoffmann
2015-08-20 22:28 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 21/25] audio: common rate control code for timer based outputs Kővágó, Zoltán
2015-08-20 22:37 ` Marc-André Lureau
2015-08-21 13:34 ` Kővágó Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 22/25] audio: add mixeng option (documentation) Kővágó, Zoltán
2015-08-20 22:49 ` Marc-André Lureau
2015-08-21 13:46 ` Kővágó Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 23/25] audio: make mixeng optional Kővágó, Zoltán
2015-08-20 22:56 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 24/25] paaudio: get/put_buffer functions Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 25/25] audio: split ctl_* functions into enable_* and volume_* Kővágó, Zoltán
2015-08-20 23:05 ` Marc-André Lureau
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=55D644BD.5060608@gmail.com \
--to=dirty.ice.hu@gmail.com \
--cc=armbru@redhat.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/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).