[libvirt] [PATCH 04/23] conf: Refactor virDomainMemballoonDefFormat

Peter Krempa posted 23 patches 6 years, 11 months ago
[libvirt] [PATCH 04/23] conf: Refactor virDomainMemballoonDefFormat
Posted by Peter Krempa 6 years, 11 months ago
Use virXMLFormatElement to format the internals along with simplifying
cleanup code paths.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/conf/domain_conf.c | 47 ++++++++++--------------------------------
 1 file changed, 11 insertions(+), 36 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index cbefa7749b..fd3f19d6ce 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -25837,19 +25837,20 @@ virDomainMemballoonDefFormat(virBufferPtr buf,
                              unsigned int flags)
 {
     const char *model = virDomainMemballoonModelTypeToString(def->model);
-    virBuffer childrenBuf = VIR_BUFFER_INITIALIZER;
-    int ret = -1;
+    VIR_AUTOCLEAN(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
+    VIR_AUTOCLEAN(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER;
+    VIR_AUTOCLEAN(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;

     if (!model) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unexpected memballoon model %d"), def->model);
-        goto cleanup;
+        return -1;
     }

-    virBufferAsprintf(buf, "<memballoon model='%s'", model);
+    virBufferAsprintf(&attrBuf, " model='%s'", model);

     if (def->autodeflate != VIR_TRISTATE_SWITCH_ABSENT)
-        virBufferAsprintf(buf, " autodeflate='%s'",
+        virBufferAsprintf(&attrBuf, " autodeflate='%s'",
                           virTristateSwitchTypeToString(def->autodeflate));

     virBufferSetChildIndent(&childrenBuf, buf);
@@ -25858,40 +25859,14 @@ virDomainMemballoonDefFormat(virBufferPtr buf,
         virBufferAsprintf(&childrenBuf, "<stats period='%i'/>\n", def->period);

     if (virDomainDeviceInfoFormat(&childrenBuf, &def->info, flags) < 0)
-        goto cleanup;
-
-    if (def->virtio) {
-        virBuffer driverBuf = VIR_BUFFER_INITIALIZER;
-
-        virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
-
-        if (virBufferCheckError(&driverBuf) < 0)
-            goto cleanup;
-
-        if (virBufferUse(&driverBuf)) {
-            virBufferAddLit(&childrenBuf, "<driver");
-            virBufferAddBuffer(&childrenBuf, &driverBuf);
-            virBufferAddLit(&childrenBuf, "/>\n");
-        }
-    }
-
-    if (virBufferCheckError(&childrenBuf) < 0)
-        goto cleanup;
-
-    if (!virBufferUse(&childrenBuf)) {
-        virBufferAddLit(buf, "/>\n");
-    } else {
-        virBufferAddLit(buf, ">\n");
-        virBufferAddBuffer(buf, &childrenBuf);
-        virBufferAddLit(buf, "</memballoon>\n");
-    }
+        return -1;

-    ret = 0;
+    virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);

- cleanup:
-    virBufferFreeAndReset(&childrenBuf);
+    if (virXMLFormatElement(&childrenBuf, "driver", &driverAttrBuf, NULL) < 0)
+        return -1;

-    return ret;
+    return virXMLFormatElement(buf, "memballoon", &attrBuf, &childrenBuf);
 }

 static int
-- 
2.20.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 04/23] conf: Refactor virDomainMemballoonDefFormat
Posted by Ján Tomko 6 years, 11 months ago
On Wed, Mar 06, 2019 at 09:20:29AM +0100, Peter Krempa wrote:
>Use virXMLFormatElement to format the internals along with simplifying
>cleanup code paths.
>
>Signed-off-by: Peter Krempa <pkrempa@redhat.com>
>---
> src/conf/domain_conf.c | 47 ++++++++++--------------------------------
> 1 file changed, 11 insertions(+), 36 deletions(-)
>
>diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>index cbefa7749b..fd3f19d6ce 100644
>--- a/src/conf/domain_conf.c
>+++ b/src/conf/domain_conf.c
>@@ -25858,40 +25859,14 @@ virDomainMemballoonDefFormat(virBufferPtr buf,
>         virBufferAsprintf(&childrenBuf, "<stats period='%i'/>\n", def->period);
>
>     if (virDomainDeviceInfoFormat(&childrenBuf, &def->info, flags) < 0)
>-        goto cleanup;
>-
>-    if (def->virtio) {
>-        virBuffer driverBuf = VIR_BUFFER_INITIALIZER;
>-
>-        virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
>-
>-        if (virBufferCheckError(&driverBuf) < 0)
>-            goto cleanup;
>-
>-        if (virBufferUse(&driverBuf)) {
>-            virBufferAddLit(&childrenBuf, "<driver");
>-            virBufferAddBuffer(&childrenBuf, &driverBuf);
>-            virBufferAddLit(&childrenBuf, "/>\n");
>-        }
>-    }

Eww, who added this? ;)

>-
>-    if (virBufferCheckError(&childrenBuf) < 0)
>-        goto cleanup;
>-
>-    if (!virBufferUse(&childrenBuf)) {
>-        virBufferAddLit(buf, "/>\n");
>-    } else {
>-        virBufferAddLit(buf, ">\n");
>-        virBufferAddBuffer(buf, &childrenBuf);
>-        virBufferAddLit(buf, "</memballoon>\n");
>-    }
>+        return -1;
>
>-    ret = 0;
>+    virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
>
>- cleanup:
>-    virBufferFreeAndReset(&childrenBuf);
>+    if (virXMLFormatElement(&childrenBuf, "driver", &driverAttrBuf, NULL) < 0)
>+        return -1;
>
>-    return ret;
>+    return virXMLFormatElement(buf, "memballoon", &attrBuf, &childrenBuf);
> }
>

Reviewed-by: Ján Tomko <jtomko@redhat.com>

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list