aboutsummaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorAlberto Garcia <berto@igalia.com>2020-01-15 14:56:26 +0100
committerMax Reitz <mreitz@redhat.com>2020-02-06 13:47:45 +0100
commit7cdca2e2337e82953495b907c60df3115a268428 (patch)
treeeeb8ea7d8793e094532bbfde533e7e3f8e7865d3 /block
parentcb8956144ccaccf23d5cc4167677e2c84fa5a9f8 (diff)
qcow2: Use a GString in report_unsupported_feature()
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 or the "Unknown incompatible feature" message. Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Message-id: 20200115135626.19442-1-berto@igalia.com Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/qcow2.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/block/qcow2.c b/block/qcow2.c
index cef9d72b3a..e29fc07068 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;
+ g_autoptr(GString) features = g_string_sized_new(60);
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);
mask &= ~(1ULL << table->bit);
}
}
@@ -470,14 +469,14 @@ 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);
}
/*