qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] qcow2: Use a GString in report_unsupported_feature()


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v2] qcow2: Use a GString in report_unsupported_feature()
Date: Wed, 15 Jan 2020 15:23:31 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2

On 1/15/20 2:56 PM, Alberto Garcia wrote:
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é <address@hidden>
Signed-off-by: Alberto Garcia <address@hidden>
Reviewed-by: Alex Bennée <address@hidden>
---
  block/qcow2.c | 23 +++++++++++------------
  1 file changed, 11 insertions(+), 12 deletions(-)

v2: Use g_autoptr and update commit message

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);
  }
/*


Reviewed-by: Philippe Mathieu-Daudé <address@hidden>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]