File libvirt-network_conf-Expose-virNetworkDefFormatInternal.patch of Package libvirt

From 17e7e622cb3ee9e9d92c442588600a4698fd2d62 Mon Sep 17 00:00:00 2001
Message-Id: <17e7e622cb3ee9e9d92c442588600a4698fd2d62@dist-git>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Wed, 14 May 2014 16:12:15 +0200
Subject: [PATCH] network_conf: Expose virNetworkDefFormatInternal

https://bugzilla.redhat.com/show_bug.cgi?id=1064831

In the next patch I'm going to need the network format function that
takes virBuffer as argument. However, slightly change of name is more
appropriate then: virNetworkDefFormatBuf to match the rest of functions
that format an object to buffer.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit e0a31274ec74fb2d77c40a489d26799c0965a198)

Conflicts:
	src/conf/network_conf.c:
	src/conf/network_conf.h: Both because the
    ae757743dc9d5d9f9cf6a9105f5856b395819986 is not backported yet
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
 src/conf/network_conf.c  | 97 ++++++++++++++++++++++++++++--------------------
 src/conf/network_conf.h  |  3 ++
 src/libvirt_private.syms |  1 +
 3 files changed, 61 insertions(+), 40 deletions(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index bc9690e..26d1d57 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -2065,24 +2065,26 @@ cleanup:
     return ret;
 }
 
-char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags)
+int
+virNetworkDefFormatBuf(virBufferPtr buf,
+                       const virNetworkDefPtr def,
+                       unsigned int flags)
 {
-    virBuffer buf = VIR_BUFFER_INITIALIZER;
-    unsigned char *uuid;
+    const unsigned char *uuid;
     char uuidstr[VIR_UUID_STRING_BUFLEN];
     int ii, shortforward;
 
-    virBufferAddLit(&buf, "<network");
+    virBufferAddLit(buf, "<network");
     if (!(flags & VIR_NETWORK_XML_INACTIVE) && (def->connections > 0)) {
-        virBufferAsprintf(&buf, " connections='%d'", def->connections);
+        virBufferAsprintf(buf, " connections='%d'", def->connections);
     }
-    virBufferAddLit(&buf, ">\n");
-    virBufferAdjustIndent(&buf, 2);
-    virBufferEscapeString(&buf, "<name>%s</name>\n", def->name);
+    virBufferAddLit(buf, ">\n");
+    virBufferAdjustIndent(buf, 2);
+    virBufferEscapeString(buf, "<name>%s</name>\n", def->name);
 
     uuid = def->uuid;
     virUUIDFormat(uuid, uuidstr);
-    virBufferAsprintf(&buf, "<uuid>%s</uuid>\n", uuidstr);
+    virBufferAsprintf(buf, "<uuid>%s</uuid>\n", uuidstr);
 
     if (def->forwardType != VIR_NETWORK_FORWARD_NONE) {
         const char *dev = NULL;
@@ -2096,49 +2098,49 @@ char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags)
                            def->forwardType, def->name);
             goto error;
         }
-        virBufferAddLit(&buf, "<forward");
-        virBufferEscapeString(&buf, " dev='%s'", dev);
-        virBufferAsprintf(&buf, " mode='%s'", mode);
+        virBufferAddLit(buf, "<forward");
+        virBufferEscapeString(buf, " dev='%s'", dev);
+        virBufferAsprintf(buf, " mode='%s'", mode);
         if (def->forwardType == VIR_NETWORK_FORWARD_HOSTDEV) {
             if (def->managed == 1)
-                virBufferAddLit(&buf, " managed='yes'");
+                virBufferAddLit(buf, " managed='yes'");
             else
-                virBufferAddLit(&buf, " managed='no'");
+                virBufferAddLit(buf, " managed='no'");
         }
         shortforward = !(def->nForwardIfs || def->nForwardPfs
                          || VIR_SOCKET_ADDR_VALID(&def->forwardAddrStart)
                          || VIR_SOCKET_ADDR_VALID(&def->forwardAddrEnd)
                          || def->forwardPortStart
                          || def->forwardPortEnd);
-        virBufferAsprintf(&buf, "%s>\n", shortforward ? "/" : "");
-        virBufferAdjustIndent(&buf, 2);
+        virBufferAsprintf(buf, "%s>\n", shortforward ? "/" : "");
+        virBufferAdjustIndent(buf, 2);
 
         if (def->forwardType == VIR_NETWORK_FORWARD_NAT) {
-            if (virNetworkForwardNatDefFormat(&buf, def) < 0)
+            if (virNetworkForwardNatDefFormat(buf, def) < 0)
                 goto error;
         }
 
         /* For now, hard-coded to at most 1 forward.pfs */
         if (def->nForwardPfs)
-            virBufferEscapeString(&buf, "<pf dev='%s'/>\n",
+            virBufferEscapeString(buf, "<pf dev='%s'/>\n",
                                   def->forwardPfs[0].dev);
 
         if (def->nForwardIfs &&
             (!def->nForwardPfs || !(flags & VIR_NETWORK_XML_INACTIVE))) {
             for (ii = 0; ii < def->nForwardIfs; ii++) {
                 if (def->forwardType != VIR_NETWORK_FORWARD_HOSTDEV) {
-                    virBufferEscapeString(&buf, "<interface dev='%s'",
+                    virBufferEscapeString(buf, "<interface dev='%s'",
                                           def->forwardIfs[ii].device.dev);
                     if (!(flags & VIR_NETWORK_XML_INACTIVE) &&
                         (def->forwardIfs[ii].connections > 0)) {
-                        virBufferAsprintf(&buf, " connections='%d'",
+                        virBufferAsprintf(buf, " connections='%d'",
                                           def->forwardIfs[ii].connections);
                     }
-                    virBufferAddLit(&buf, "/>\n");
+                    virBufferAddLit(buf, "/>\n");
                 }
                 else {
                     if (def->forwardIfs[ii].type ==  VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI) {
-                        if (virDevicePCIAddressFormat(&buf,
+                        if (virDevicePCIAddressFormat(buf,
                                                       def->forwardIfs[ii].device.pci,
                                                       true) < 0)
                             goto error;
@@ -2146,67 +2148,82 @@ char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags)
                 }
             }
         }
-        virBufferAdjustIndent(&buf, -2);
+        virBufferAdjustIndent(buf, -2);
         if (!shortforward)
-            virBufferAddLit(&buf, "</forward>\n");
+            virBufferAddLit(buf, "</forward>\n");
     }
 
     if (def->forwardType == VIR_NETWORK_FORWARD_NONE ||
          def->forwardType == VIR_NETWORK_FORWARD_NAT ||
          def->forwardType == VIR_NETWORK_FORWARD_ROUTE) {
 
-        virBufferAddLit(&buf, "<bridge");
+        virBufferAddLit(buf, "<bridge");
         if (def->bridge)
-            virBufferEscapeString(&buf, " name='%s'", def->bridge);
-        virBufferAsprintf(&buf, " stp='%s' delay='%ld' />\n",
+            virBufferEscapeString(buf, " name='%s'", def->bridge);
+        virBufferAsprintf(buf, " stp='%s' delay='%ld' />\n",
                           def->stp ? "on" : "off",
                           def->delay);
     } else if (def->forwardType == VIR_NETWORK_FORWARD_BRIDGE &&
                def->bridge) {
-       virBufferEscapeString(&buf, "<bridge name='%s' />\n", def->bridge);
+       virBufferEscapeString(buf, "<bridge name='%s' />\n", def->bridge);
     }
 
 
     if (def->mac_specified) {
         char macaddr[VIR_MAC_STRING_BUFLEN];
         virMacAddrFormat(&def->mac, macaddr);
-        virBufferAsprintf(&buf, "<mac address='%s'/>\n", macaddr);
+        virBufferAsprintf(buf, "<mac address='%s'/>\n", macaddr);
     }
 
     if (def->domain)
-        virBufferAsprintf(&buf, "<domain name='%s'/>\n", def->domain);
+        virBufferAsprintf(buf, "<domain name='%s'/>\n", def->domain);
 
-    if (virNetworkDNSDefFormat(&buf, def->dns) < 0)
+    if (virNetworkDNSDefFormat(buf, def->dns) < 0)
         goto error;
 
-    if (virNetDevVlanFormat(&def->vlan, &buf) < 0)
+    if (virNetDevVlanFormat(&def->vlan, buf) < 0)
         goto error;
-    if (virNetDevBandwidthFormat(def->bandwidth, &buf) < 0)
+    if (virNetDevBandwidthFormat(def->bandwidth, buf) < 0)
         goto error;
 
     for (ii = 0; ii < def->nips; ii++) {
-        if (virNetworkIpDefFormat(&buf, &def->ips[ii]) < 0)
+        if (virNetworkIpDefFormat(buf, &def->ips[ii]) < 0)
             goto error;
     }
 
-    if (virNetDevVPortProfileFormat(def->virtPortProfile, &buf) < 0)
+    if (virNetDevVPortProfileFormat(def->virtPortProfile, buf) < 0)
         goto error;
 
     for (ii = 0; ii < def->nPortGroups; ii++)
-        if (virPortGroupDefFormat(&buf, &def->portGroups[ii]) < 0)
+        if (virPortGroupDefFormat(buf, &def->portGroups[ii]) < 0)
             goto error;
 
-    virBufferAdjustIndent(&buf, -2);
-    virBufferAddLit(&buf, "</network>\n");
+    virBufferAdjustIndent(buf, -2);
+    virBufferAddLit(buf, "</network>\n");
+
+    return 0;
+
+error:
+    return -1;
+}
+
+char *
+virNetworkDefFormat(const virNetworkDefPtr def,
+                    unsigned int flags)
+{
+    virBuffer buf = VIR_BUFFER_INITIALIZER;
+
+    if (virNetworkDefFormatBuf(&buf, def, flags) < 0)
+        goto error;
 
     if (virBufferError(&buf))
         goto no_memory;
 
     return virBufferContentAndReset(&buf);
 
- no_memory:
+no_memory:
     virReportOOMError();
-  error:
+error:
     virBufferFreeAndReset(&buf);
     return NULL;
 }
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index e645adb..2c7de7f 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -287,6 +287,9 @@ virNetworkDefPtr virNetworkDefParseNode(xmlDocPtr xml,
                                         xmlNodePtr root);
 
 char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags);
+int virNetworkDefFormatBuf(virBufferPtr buf,
+                           const virNetworkDefPtr def,
+                           unsigned int flags);
 
 static inline const char *
 virNetworkDefForwardIf(const virNetworkDefPtr def, size_t n)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 7f5d3d7..f477d32 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -869,6 +869,7 @@ virNetworkConfigFile;
 virNetworkConfigChangeSetup;
 virNetworkDefCopy;
 virNetworkDefFormat;
+virNetworkDefFormatBuf;
 virNetworkDefFree;
 virNetworkDefGetIpByIndex;
 virNetworkDefParseFile;
-- 
1.9.3

openSUSE Build Service is sponsored by