[libvirt] [PATCH 05/10] conf: disk: Separate virStorageSource formatting

Peter Krempa pkrempa at redhat.com
Tue Mar 13 14:37:31 UTC 2018


Move out formatting of 'startuPolicy' which is a property of the disk
out of the <source> element. Extracting the code formating the content
and attributes will also allow reuse in other parts of the code.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/conf/domain_conf.c   | 90 ++++++++++++++++++++++++++++--------------------
 src/conf/domain_conf.h   |  7 ++++
 src/libvirt_private.syms |  1 +
 3 files changed, 60 insertions(+), 38 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b77cc8ed9f..1c79d2b49b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -22798,45 +22798,39 @@ virDomainDiskSourceFormatPrivateData(virBufferPtr buf,
 }


-static int
-virDomainDiskSourceFormatInternal(virBufferPtr buf,
-                                  virStorageSourcePtr src,
-                                  int policy,
-                                  unsigned int flags,
-                                  bool skipSeclabels,
-                                  virDomainXMLOptionPtr xmlopt)
+int
+virDomainStorageSourceFormat(virBufferPtr attrBuf,
+                             virBufferPtr childBuf,
+                             virStorageSourcePtr src,
+                             unsigned int flags,
+                             bool skipSeclabels)
 {
-    virBuffer attrBuf = VIR_BUFFER_INITIALIZER;
-    virBuffer childBuf = VIR_BUFFER_INITIALIZER;
-
-    virBufferSetChildIndent(&childBuf, buf);
-
     switch ((virStorageType)src->type) {
     case VIR_STORAGE_TYPE_FILE:
-        virBufferEscapeString(&attrBuf, " file='%s'", src->path);
+        virBufferEscapeString(attrBuf, " file='%s'", src->path);
         break;

     case VIR_STORAGE_TYPE_BLOCK:
-        virBufferEscapeString(&attrBuf, " dev='%s'", src->path);
+        virBufferEscapeString(attrBuf, " dev='%s'", src->path);
         break;

     case VIR_STORAGE_TYPE_DIR:
-        virBufferEscapeString(&attrBuf, " dir='%s'", src->path);
+        virBufferEscapeString(attrBuf, " dir='%s'", src->path);
         break;

     case VIR_STORAGE_TYPE_NETWORK:
-        if (virDomainDiskSourceFormatNetwork(&attrBuf, &childBuf,
+        if (virDomainDiskSourceFormatNetwork(attrBuf, childBuf,
                                              src, flags) < 0)
-            goto error;
+            return -1;
         break;

     case VIR_STORAGE_TYPE_VOLUME:
         if (src->srcpool) {
-            virBufferEscapeString(&attrBuf, " pool='%s'", src->srcpool->pool);
-            virBufferEscapeString(&attrBuf, " volume='%s'",
+            virBufferEscapeString(attrBuf, " pool='%s'", src->srcpool->pool);
+            virBufferEscapeString(attrBuf, " volume='%s'",
                                   src->srcpool->volume);
             if (src->srcpool->mode)
-                virBufferAsprintf(&attrBuf, " mode='%s'",
+                virBufferAsprintf(attrBuf, " mode='%s'",
                                   virStorageSourcePoolModeTypeToString(src->srcpool->mode));
         }

@@ -22846,18 +22840,12 @@ virDomainDiskSourceFormatInternal(virBufferPtr buf,
     case VIR_STORAGE_TYPE_LAST:
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unexpected disk type %d"), src->type);
-        goto error;
+        return -1;
     }

-    if (src->type != VIR_STORAGE_TYPE_NETWORK) {
-        if (policy)
-            virBufferEscapeString(&attrBuf, " startupPolicy='%s'",
-                                  virDomainStartupPolicyTypeToString(policy));
-
-        if (!skipSeclabels)
-            virDomainSourceDefFormatSeclabel(&childBuf, src->nseclabels,
-                                             src->seclabels, flags);
-    }
+    if (!skipSeclabels && src->type != VIR_STORAGE_TYPE_NETWORK)
+        virDomainSourceDefFormatSeclabel(childBuf, src->nseclabels,
+                                         src->seclabels, flags);

     /* Storage Source formatting will not carry through the blunder
      * that disk source formatting had at one time to format the
@@ -22866,26 +22854,52 @@ virDomainDiskSourceFormatInternal(virBufferPtr buf,
      * So avoid formatting it for volumes. */
     if (src->auth && src->authInherited &&
         src->type != VIR_STORAGE_TYPE_VOLUME)
-        virStorageAuthDefFormat(&childBuf, src->auth);
+        virStorageAuthDefFormat(childBuf, src->auth);

     /* If we found encryption as a child of <source>, then format it
      * as we found it. */
     if (src->encryption && src->encryptionInherited &&
-        virStorageEncryptionFormat(&childBuf, src->encryption) < 0)
-        goto error;
+        virStorageEncryptionFormat(childBuf, src->encryption) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+static int
+virDomainDiskSourceFormatInternal(virBufferPtr buf,
+                                  virStorageSourcePtr src,
+                                  int policy,
+                                  unsigned int flags,
+                                  bool skipSeclabels,
+                                  virDomainXMLOptionPtr xmlopt)
+{
+    virBuffer attrBuf = VIR_BUFFER_INITIALIZER;
+    virBuffer childBuf = VIR_BUFFER_INITIALIZER;
+    int ret = -1;
+
+    virBufferSetChildIndent(&childBuf, buf);
+
+    if (virDomainStorageSourceFormat(&attrBuf, &childBuf, src, flags,
+                                     skipSeclabels) < 0)
+        goto cleanup;
+
+    if (policy && src->type != VIR_STORAGE_TYPE_NETWORK)
+        virBufferEscapeString(&attrBuf, " startupPolicy='%s'",
+                              virDomainStartupPolicyTypeToString(policy));

     if (virDomainDiskSourceFormatPrivateData(&childBuf, src, flags, xmlopt) < 0)
-        goto error;
+        goto cleanup;

     if (virXMLFormatElement(buf, "source", &attrBuf, &childBuf) < 0)
-        goto error;
+        goto cleanup;

-    return 0;
+    ret = 0;

- error:
+ cleanup:
     virBufferFreeAndReset(&attrBuf);
     virBufferFreeAndReset(&childBuf);
-    return -1;
+    return ret;
 }


diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 337ce79425..61379e50fe 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3427,6 +3427,13 @@ int virDomainDiskDefCheckDuplicateInfo(const virDomainDiskDef *a,
                                        const virDomainDiskDef *b)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

+int virDomainStorageSourceFormat(virBufferPtr attrBuf,
+                                 virBufferPtr childBuf,
+                                 virStorageSourcePtr src,
+                                 unsigned int flags,
+                                 bool skipSeclabels)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
+
 int virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def,
                                      int maplen,
                                      int ncpumaps,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 3766e20d3b..c67bce7389 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -542,6 +542,7 @@ virDomainStateReasonFromString;
 virDomainStateReasonToString;
 virDomainStateTypeFromString;
 virDomainStateTypeToString;
+virDomainStorageSourceFormat;
 virDomainTaintTypeFromString;
 virDomainTaintTypeToString;
 virDomainTimerModeTypeFromString;
-- 
2.16.2




More information about the libvir-list mailing list