Blame SOURCES/libvirt-util-qemu-Don-t-generate-any-extra-commas-in-virQEMUBuildCommandLineJSON.patch

6ae9ed
From b268c983e92680e9083c9e8d75e64e6215dff7b9 Mon Sep 17 00:00:00 2001
6ae9ed
Message-Id: <b268c983e92680e9083c9e8d75e64e6215dff7b9@dist-git>
6ae9ed
From: Peter Krempa <pkrempa@redhat.com>
6ae9ed
Date: Tue, 2 Aug 2016 13:41:46 +0200
6ae9ed
Subject: [PATCH] util: qemu: Don't generate any extra commas in
6ae9ed
 virQEMUBuildCommandLineJSON
6ae9ed
6ae9ed
The function would generate a leading comma. Let the callers properly
6ae9ed
add commas by formatting the commas at the end and trimming the trailing
6ae9ed
one.
6ae9ed
6ae9ed
(cherry picked from commit ca620e35ea75dc07f9415c384e240cc2adea4cb4)
6ae9ed
https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing]
6ae9ed
https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host]
6ae9ed
---
6ae9ed
 src/util/virqemu.c          | 22 ++++++++++++++--------
6ae9ed
 tests/qemucommandutiltest.c | 10 ++--------
6ae9ed
 2 files changed, 16 insertions(+), 16 deletions(-)
6ae9ed
6ae9ed
diff --git a/src/util/virqemu.c b/src/util/virqemu.c
6ae9ed
index 3cc59e7..8babe36 100644
6ae9ed
--- a/src/util/virqemu.c
6ae9ed
+++ b/src/util/virqemu.c
6ae9ed
@@ -66,10 +66,10 @@ virQEMUBuildCommandLineJSONArrayBitmap(const char *key,
6ae9ed
             end = virBitmapLastSetBit(bitmap) + 1;
6ae9ed
 
6ae9ed
         if (end - 1 > pos) {
6ae9ed
-            virBufferAsprintf(buf, ",%s=%zd-%zd", key, pos, end - 1);
6ae9ed
+            virBufferAsprintf(buf, "%s=%zd-%zd,", key, pos, end - 1);
6ae9ed
             pos = end;
6ae9ed
         } else {
6ae9ed
-            virBufferAsprintf(buf, ",%s=%zd", key, pos);
6ae9ed
+            virBufferAsprintf(buf, "%s=%zd,", key, pos);
6ae9ed
         }
6ae9ed
     }
6ae9ed
 
6ae9ed
@@ -125,19 +125,20 @@ virQEMUBuildCommandLineJSONRecurse(const char *key,
6ae9ed
 
6ae9ed
     switch ((virJSONType) value->type) {
6ae9ed
     case VIR_JSON_TYPE_STRING:
6ae9ed
-        virBufferAsprintf(buf, ",%s=", key);
6ae9ed
+        virBufferAsprintf(buf, "%s=", key);
6ae9ed
         virQEMUBuildBufferEscapeComma(buf, value->data.string);
6ae9ed
+        virBufferAddLit(buf, ",");
6ae9ed
         break;
6ae9ed
 
6ae9ed
     case VIR_JSON_TYPE_NUMBER:
6ae9ed
-        virBufferAsprintf(buf, ",%s=%s", key, value->data.number);
6ae9ed
+        virBufferAsprintf(buf, "%s=%s,", key, value->data.number);
6ae9ed
         break;
6ae9ed
 
6ae9ed
     case VIR_JSON_TYPE_BOOLEAN:
6ae9ed
         if (value->data.boolean)
6ae9ed
-            virBufferAsprintf(buf, ",%s=yes", key);
6ae9ed
+            virBufferAsprintf(buf, "%s=yes,", key);
6ae9ed
         else
6ae9ed
-            virBufferAsprintf(buf, ",%s=no", key);
6ae9ed
+            virBufferAsprintf(buf, "%s=no,", key);
6ae9ed
 
6ae9ed
         break;
6ae9ed
 
6ae9ed
@@ -196,7 +197,12 @@ virQEMUBuildCommandLineJSON(const virJSONValue *value,
6ae9ed
                             virBufferPtr buf,
6ae9ed
                             virQEMUBuildCommandLineJSONArrayFormatFunc array)
6ae9ed
 {
6ae9ed
-    return virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, array, false);
6ae9ed
+    if (virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, array, false) < 0)
6ae9ed
+        return -1;
6ae9ed
+
6ae9ed
+    virBufferTrim(buf, ",", -1);
6ae9ed
+
6ae9ed
+    return 0;
6ae9ed
 }
6ae9ed
 
6ae9ed
 
6ae9ed
@@ -208,7 +214,7 @@ virQEMUBuildObjectCommandlineFromJSON(const char *type,
6ae9ed
     virBuffer buf = VIR_BUFFER_INITIALIZER;
6ae9ed
     char *ret = NULL;
6ae9ed
 
6ae9ed
-    virBufferAsprintf(&buf, "%s,id=%s", type, alias);
6ae9ed
+    virBufferAsprintf(&buf, "%s,id=%s,", type, alias);
6ae9ed
 
6ae9ed
     if (virQEMUBuildCommandLineJSON(props, &buf,
6ae9ed
                                     virQEMUBuildCommandLineJSONArrayBitmap) < 0)
6ae9ed
diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c
6ae9ed
index a5e3153..0bf0351 100644
6ae9ed
--- a/tests/qemucommandutiltest.c
6ae9ed
+++ b/tests/qemucommandutiltest.c
6ae9ed
@@ -37,7 +37,6 @@ testQemuCommandBuildFromJSON(const void *opaque)
6ae9ed
 {
6ae9ed
     const testQemuCommandBuildObjectFromJSONData *data = opaque;
6ae9ed
     virJSONValuePtr val = NULL;
6ae9ed
-    char *expect = NULL;
6ae9ed
     virBuffer buf = VIR_BUFFER_INITIALIZER;
6ae9ed
     char *result = NULL;
6ae9ed
     int ret = -1;
6ae9ed
@@ -47,10 +46,6 @@ testQemuCommandBuildFromJSON(const void *opaque)
6ae9ed
         return -1;
6ae9ed
     }
6ae9ed
 
6ae9ed
-    if (data->expectprops &&
6ae9ed
-        virAsprintf(&expect, ",%s", data->expectprops) < 0)
6ae9ed
-        return -1;
6ae9ed
-
6ae9ed
     if (virQEMUBuildCommandLineJSON(val, &buf,
6ae9ed
                                     virQEMUBuildCommandLineJSONArrayBitmap) < 0) {
6ae9ed
         fprintf(stderr,
6ae9ed
@@ -61,10 +56,10 @@ testQemuCommandBuildFromJSON(const void *opaque)
6ae9ed
 
6ae9ed
     result = virBufferContentAndReset(&buf;;
6ae9ed
 
6ae9ed
-    if (STRNEQ_NULLABLE(expect, result)) {
6ae9ed
+    if (STRNEQ_NULLABLE(data->expectprops, result)) {
6ae9ed
         fprintf(stderr, "\nFailed to create object string. "
6ae9ed
                 "\nExpected:\n'%s'\nGot:\n'%s'",
6ae9ed
-                NULLSTR(expect), NULLSTR(result));
6ae9ed
+                NULLSTR(data->expectprops), NULLSTR(result));
6ae9ed
         goto cleanup;
6ae9ed
     }
6ae9ed
 
6ae9ed
@@ -72,7 +67,6 @@ testQemuCommandBuildFromJSON(const void *opaque)
6ae9ed
  cleanup:
6ae9ed
     virJSONValueFree(val);
6ae9ed
     VIR_FREE(result);
6ae9ed
-    VIR_FREE(expect);
6ae9ed
     return ret;
6ae9ed
 }
6ae9ed
 
6ae9ed
-- 
6ae9ed
2.9.2
6ae9ed