From e2a7423a119660f33abcbbf4b7827a81ef23872f Mon Sep 17 00:00:00 2001 From: Alberto Garcia Date: Fri, 10 Jan 2020 18:15:18 +0100 Subject: [PATCH] block: Use a GString in bdrv_perm_names() 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 Message-id: 20200110171518.22168-1-berto@igalia.com Reviewed-by: Eric Blake Signed-off-by: Max Reitz --- block.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/block.c b/block.c index 6c2b2bd2e2..fe5050c53f 100644 --- a/block.c +++ b/block.c @@ -1998,18 +1998,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.11.4.GIT