This is a bit more efficient than having to allocate and free memory for each new permission.
The default size (30) is enough for "consistent read, write, resize". Signed-off-by: Alberto Garcia <be...@igalia.com> --- block.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/block.c b/block.c index 1b6f7c86e8..2bc9e58392 100644 --- a/block.c +++ b/block.c @@ -1976,18 +1976,19 @@ char *bdrv_perm_names(uint64_t perm) { 0, NULL } }; - char *result = g_strdup(""); + GString *result = g_string_sized_new(30); struct perm_name *p; for (p = permissions; p->name; p++) { if (perm & p->perm) { - char *old = result; - result = g_strdup_printf("%s%s%s", old, *old ? ", " : "", p->name); - g_free(old); + if (result->len > 0) { + g_string_append(result, ", "); + } + g_string_append(result, p->name); } } - return result; + return g_string_free(result, FALSE); } /* -- 2.20.1