From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Alberto Garcia <berto@igalia.com>,
qemu-devel@nongnu.org, qemu-block@nongnu.org,
Max Reitz <mreitz@redhat.com>
Subject: Re: [PATCH] qcow2: Use a GString in report_unsupported_feature()
Date: Tue, 14 Jan 2020 21:35:15 +0000 [thread overview]
Message-ID: <878sm9n2lo.fsf@linaro.org> (raw)
In-Reply-To: <b9059159-9d86-fbb6-71a1-51b1dfc3aab7@redhat.com>
Philippe Mathieu-Daudé <philmd@redhat.com> writes:
> On 1/14/20 7:08 PM, Alex Bennée wrote:
>> Alberto Garcia <berto@igalia.com> writes:
>>
>>> This is a bit more efficient than having to allocate and free memory
>>> for each item.
>>>
>>> The default size (60) is enough for all the existing incompatible
>>> features.
>>>
>>> Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>>> Signed-off-by: Alberto Garcia <berto@igalia.com>
>>> ---
>>> block/qcow2.c | 24 ++++++++++++------------
>>> 1 file changed, 12 insertions(+), 12 deletions(-)
>>>
>>> diff --git a/block/qcow2.c b/block/qcow2.c
>>> index cef9d72b3a..ecf6827420 100644
>>> --- a/block/qcow2.c
>>> +++ b/block/qcow2.c
>>> @@ -453,16 +453,15 @@ static void cleanup_unknown_header_ext(BlockDriverState *bs)
>>> static void report_unsupported_feature(Error **errp, Qcow2Feature *table,
>>> uint64_t mask)
>>> {
>>> - char *features = g_strdup("");
>>> - char *old;
>>> + GString *features = g_string_sized_new(60);
>> g_autoptr(GString) features = g_string_sized_new(60);
>> will save you the clean-up later.
>
> Does this work with g_string_free() too?
It does:
static inline void g_autoptr_cleanup_gstring_free (GString *string)
{
if (string)
g_string_free (string, TRUE);
}
If you want to keep the allocated string but drop the GString you are
still best doing that yourself.
>
>>> while (table && table->name[0] != '\0') {
>>> if (table->type == QCOW2_FEAT_TYPE_INCOMPATIBLE) {
>>> if (mask & (1ULL << table->bit)) {
>>> - old = features;
>>> - features = g_strdup_printf("%s%s%.46s", old, *old ? ", " : "",
>>> - table->name);
>>> - g_free(old);
>>> + if (features->len > 0) {
>>> + g_string_append(features, ", ");
>>> + }
>>> + g_string_append_printf(features, "%.46s",
>>> table->name);
>> We have a number of cases of this sort of idiom in the code base. I
>> wonder if it calls for a utility function:
>> qemu_append_with_sep(features, ", ", "%.46s", table->name)
>
> Good idea for https://wiki.qemu.org/Contribute/BiteSizedTasks
>
>> Anyway not mandatory for this patch so with the autoptr fix:
>> Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
>>
>>> mask &= ~(1ULL << table->bit);
>>> }
>>> }
>>> @@ -470,14 +469,15 @@ static void report_unsupported_feature(Error **errp, Qcow2Feature *table,
>>> }
>>> if (mask) {
>>> - old = features;
>>> - features = g_strdup_printf("%s%sUnknown incompatible feature: %" PRIx64,
>>> - old, *old ? ", " : "", mask);
>>> - g_free(old);
>>> + if (features->len > 0) {
>>> + g_string_append(features, ", ");
>>> + }
>>> + g_string_append_printf(features,
>>> + "Unknown incompatible feature: %" PRIx64, mask);
>>> }
>>> - error_setg(errp, "Unsupported qcow2 feature(s): %s",
>>> features);
>>> - g_free(features);
>>> + error_setg(errp, "Unsupported qcow2 feature(s): %s", features->str);
>>> + g_string_free(features, TRUE);
>>> }
>>> /*
>>
--
Alex Bennée
next prev parent reply other threads:[~2020-01-14 21:36 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-14 14:54 [PATCH] qcow2: Use a GString in report_unsupported_feature() Alberto Garcia
2020-01-14 18:08 ` Alex Bennée
2020-01-14 18:43 ` Philippe Mathieu-Daudé
2020-01-14 21:35 ` Alex Bennée [this message]
2020-01-15 14:23 ` Philippe Mathieu-Daudé
2020-01-15 13:49 ` Alberto Garcia
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=878sm9n2lo.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=berto@igalia.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-block@nongnu.org \
--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 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.