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>
This commit is contained in:
parent
cb8956144c
commit
7cdca2e233
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user