Macros become less and less appealing the more work you perform
inside them: DO_TEST_QEMU() has arguably already crossed that
threshold, and we're going to add even more code later on.

While factoring the code out of the macro, convert it to use the
GLib string manipulation functions and take advantage of autofree.

Signed-off-by: Andrea Bolognani <[email protected]>
---
 tests/domaincapstest.c | 50 ++++++++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 19 deletions(-)

diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c
index f38f5fb047..e35eddc659 100644
--- a/tests/domaincapstest.c
+++ b/tests/domaincapstest.c
@@ -266,6 +266,36 @@ test_virDomainCapsFormat(const void *opaque)
     return ret;
 }
 
+static int
+doTestQemu(const char *partialName,
+           const char *capsName,
+           const char *emulator,
+           const char *machine,
+           const char *arch,
+           virDomainVirtType type,
+           void *opaque)
+{
+    g_autofree char *name = NULL;
+
+    name = g_strdup_printf("qemu_%s.%s", partialName, arch);
+
+    struct testData data = {
+        .name = name,
+        .emulator = emulator,
+        .machine = machine,
+        .arch = arch,
+        .type = type,
+        .capsType = CAPS_QEMU,
+        .capsName = capsName,
+        .capsOpaque = opaque,
+    };
+
+    if (virTestRun(name, test_virDomainCapsFormat, &data) < 0)
+        return -1;
+
+    return 0;
+}
+
 static int
 mymain(void)
 {
@@ -298,26 +328,8 @@ mymain(void)
 
 #define DO_TEST_QEMU(Name, CapsName, Emulator, Machine, Arch, Type) \
     do { \
-        char *name = NULL; \
-        if (virAsprintf(&name, "qemu_%s.%s", \
-                        Name, \
-                        Arch) < 0) { \
+        if (doTestQemu(Name, CapsName, Emulator, Machine, Arch, Type, cfg) < 
0) \
             ret = -1; \
-            break; \
-        } \
-        struct testData data = { \
-            .name = name, \
-            .emulator = Emulator, \
-            .machine = Machine, \
-            .arch = Arch, \
-            .type = Type, \
-            .capsType = CAPS_QEMU, \
-            .capsName = CapsName, \
-            .capsOpaque = cfg, \
-        }; \
-        if (virTestRun(name, test_virDomainCapsFormat, &data) < 0) \
-            ret = -1; \
-        VIR_FREE(name); \
     } while (0)
 
 #define DO_TEST_LIBXL(Name, Emulator, Machine, Arch, Type) \
-- 
2.21.0

--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to