[PATCH] conf: convert network_conf.c to use g_auto* pointers

Laine Stump posted 1 patch 3 years, 10 months ago
Failed in applying to current master (apply log)
src/conf/network_conf.c | 613 +++++++++++++++++-----------------------
src/conf/network_conf.h |   1 +
src/util/virxml.h       |   1 +
3 files changed, 259 insertions(+), 356 deletions(-)
[PATCH] conf: convert network_conf.c to use g_auto* pointers
Posted by Laine Stump 3 years, 10 months ago
This was mostly boilerplate conversion, but in one case I needed to
define several differently named char* to take the place of a single
char *tmp that was re-used multiple times, and in another place there
was a single char* that was used at the toplevel of the function, and
then later used repeatedly inside a for loop, so I defined a new
separate char* inside the loop.

Signed-off-by: Laine Stump <laine@redhat.com>
---

This should be applied on top of Dan's IPv6 NAT patch series (it was
reviewing that series that showed me this file hadn't yet been
converted).

 src/conf/network_conf.c | 613 +++++++++++++++++-----------------------
 src/conf/network_conf.h |   1 +
 src/util/virxml.h       |   1 +
 3 files changed, 259 insertions(+), 356 deletions(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 1b89e2985d..ebe8a03262 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -306,8 +306,7 @@ virNetworkDefCopy(virNetworkDefPtr def,
                   virNetworkXMLOptionPtr xmlopt,
                   unsigned int flags)
 {
-    char *xml = NULL;
-    virNetworkDefPtr newDef = NULL;
+    g_autofree char *xml = NULL;
 
     if (!def) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -317,11 +316,9 @@ virNetworkDefCopy(virNetworkDefPtr def,
 
     /* deep copy with a format/parse cycle */
     if (!(xml = virNetworkDefFormat(def, xmlopt, flags)))
-        goto cleanup;
-    newDef = virNetworkDefParseString(xml, xmlopt);
- cleanup:
-    VIR_FREE(xml);
-    return newDef;
+       return NULL;
+
+    return virNetworkDefParseString(xml, xmlopt);
 }
 
 
@@ -465,48 +462,43 @@ virNetworkDHCPRangeDefParseXML(const char *networkName,
 {
     virSocketAddrRangePtr addr = &range->addr;
     xmlNodePtr cur = node->children;
-    char *start = NULL, *end = NULL;
-    int ret = -1;
+    g_autofree char *start = NULL;
+    g_autofree char *end = NULL;
 
     if (!(start = virXMLPropString(node, "start"))) {
         virReportError(VIR_ERR_XML_ERROR,
                        _("Missing 'start' attribute in dhcp range for network '%s'"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
     if (virSocketAddrParse(&addr->start, start, AF_UNSPEC) < 0)
-        goto cleanup;
+        return -1;
 
     if (!(end = virXMLPropString(node, "end"))) {
         virReportError(VIR_ERR_XML_ERROR,
                        _("Missing 'end' attribute in dhcp range for network '%s'"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
     if (virSocketAddrParse(&addr->end, end, AF_UNSPEC) < 0)
-        goto cleanup;
+        return -1;
 
     /* do a sanity check of the range */
     if (virSocketAddrGetRange(&addr->start, &addr->end, &ipdef->address,
                               virNetworkIPDefPrefix(ipdef)) < 0)
-        goto cleanup;
+        return -1;
 
     while (cur != NULL) {
         if (cur->type == XML_ELEMENT_NODE &&
             virXMLNodeNameEqual(cur, "lease")) {
 
             if (virNetworkDHCPLeaseTimeDefParseXML(&range->lease, cur) < 0)
-                goto cleanup;
+                return -1;
         }
         cur = cur->next;
     }
 
-    ret = 0;
-
- cleanup:
-    VIR_FREE(start);
-    VIR_FREE(end);
-    return ret;
+    return 0;
 }
 
 
@@ -517,11 +509,13 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
                               virNetworkDHCPHostDefPtr host,
                               bool partialOkay)
 {
-    char *mac = NULL, *name = NULL, *ip = NULL, *id = NULL;
+    g_autofree char *mac = NULL;
+    g_autofree char *name = NULL;
+    g_autofree char *ip = NULL;
+    g_autofree char *id = NULL;
     virMacAddr addr;
     virSocketAddr inaddr;
     xmlNodePtr cur = node->children;
-    int ret = -1;
 
     mac = virXMLPropString(node, "mac");
     if (mac != NULL) {
@@ -530,20 +524,20 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
                            _("Invalid to specify MAC address '%s' "
                              "in network '%s' IPv6 static host definition"),
                            mac, networkName);
-            goto cleanup;
+            return -1;
         }
         if (virMacAddrParse(mac, &addr) < 0) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Cannot parse MAC address '%s' in network '%s'"),
                            mac, networkName);
-            goto cleanup;
+            return -1;
         }
         if (virMacAddrIsMulticast(&addr)) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("expected unicast mac address, found "
                              "multicast '%s' in network '%s'"),
                            (const char *)mac, networkName);
-            goto cleanup;
+            return -1;
         }
     }
 
@@ -554,7 +548,7 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
             virReportError(VIR_ERR_XML_ERROR,
                            _("Invalid character '%c' in id '%s' of network '%s'"),
                            *cp, id, networkName);
-            goto cleanup;
+            return -1;
         }
     }
 
@@ -563,7 +557,7 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("Cannot use host name '%s' in network '%s'"),
                        name, networkName);
-        goto cleanup;
+        return -1;
     }
 
     ip = virXMLPropString(node, "ip");
@@ -572,7 +566,7 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
                        _("Invalid IP address in static host definition "
                          "for network '%s'"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
 
     if (partialOkay) {
@@ -583,7 +577,7 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
                              "must be specified for static host definition "
                              "in network '%s' "),
                            networkName);
-            goto cleanup;
+            return -1;
         }
     } else {
         /* normal usage - you need at least name (IPv6) or one of MAC
@@ -595,21 +589,21 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
                            _("Static host definition in IPv6 network '%s' "
                              "must have id or name attribute"),
                            networkName);
-                goto cleanup;
+                return -1;
             }
         } else if (!(mac || name)) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Static host definition in IPv4 network '%s' "
                              "must have mac or name attribute"),
                            networkName);
-            goto cleanup;
+            return -1;
         }
         if (!ip) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Missing IP address in static host definition "
                              "for network '%s'"),
                            networkName);
-            goto cleanup;
+            return -1;
         }
     }
 
@@ -618,7 +612,7 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
             virXMLNodeNameEqual(cur, "lease")) {
 
             if (virNetworkDHCPLeaseTimeDefParseXML(&host->lease, cur) < 0)
-                goto cleanup;
+                return -1;
         }
         cur = cur->next;
     }
@@ -631,14 +625,9 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
     name = NULL;
     if (ip)
         host->ip = inaddr;
-    ret = 0;
 
- cleanup:
-    VIR_FREE(mac);
-    VIR_FREE(id);
-    VIR_FREE(name);
-    VIR_FREE(ip);
-    return ret;
+    return 0;
+
 }
 
 
@@ -676,8 +665,8 @@ virNetworkDHCPDefParseXML(const char *networkName,
         } else if (VIR_SOCKET_ADDR_IS_FAMILY(&def->address, AF_INET) &&
                    cur->type == XML_ELEMENT_NODE &&
                    virXMLNodeNameEqual(cur, "bootp")) {
-            char *file;
-            char *server;
+            g_autofree char *file = NULL;
+            g_autofree char *server = NULL;
             virSocketAddr inaddr;
             memset(&inaddr, 0, sizeof(inaddr));
 
@@ -689,14 +678,12 @@ virNetworkDHCPDefParseXML(const char *networkName,
 
             if (server &&
                 virSocketAddrParse(&inaddr, server, AF_UNSPEC) < 0) {
-                VIR_FREE(file);
-                VIR_FREE(server);
                 goto cleanup;
             }
 
             def->bootfile = file;
+            file = NULL;
             def->bootserver = inaddr;
-            VIR_FREE(server);
         }
 
         cur = cur->next;
@@ -716,7 +703,7 @@ virNetworkDNSHostDefParseXML(const char *networkName,
                              bool partialOkay)
 {
     xmlNodePtr cur;
-    char *ip;
+    g_autofree char *ip = NULL;
 
     if (!(ip = virXMLPropString(node, "ip")) && !partialOkay) {
         virReportError(VIR_ERR_XML_DETAIL,
@@ -729,17 +716,15 @@ virNetworkDNSHostDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_DETAIL,
                        _("Invalid IP address in network '%s' DNS HOST record"),
                        networkName);
-        VIR_FREE(ip);
         goto error;
     }
-    VIR_FREE(ip);
 
     cur = node->children;
     while (cur != NULL) {
         if (cur->type == XML_ELEMENT_NODE &&
             virXMLNodeNameEqual(cur, "hostname")) {
               if (cur->children != NULL) {
-                  char *name = (char *) xmlNodeGetContent(cur);
+                  g_autofree char *name = (char *) xmlNodeGetContent(cur);
 
                   if (!name) {
                       virReportError(VIR_ERR_XML_DETAIL,
@@ -747,10 +732,8 @@ virNetworkDNSHostDefParseXML(const char *networkName,
                                      networkName);
                       goto error;
                   }
-                  if (VIR_APPEND_ELEMENT(def->names, def->nnames, name) < 0) {
-                      VIR_FREE(name);
+                  if (VIR_APPEND_ELEMENT(def->names, def->nnames, name) < 0)
                       goto error;
-                  }
               }
         }
         cur = cur->next;
@@ -950,15 +933,14 @@ virNetworkDNSDefParseXML(const char *networkName,
                          xmlXPathContextPtr ctxt,
                          virNetworkDNSDefPtr def)
 {
-    xmlNodePtr *hostNodes = NULL;
-    xmlNodePtr *srvNodes = NULL;
-    xmlNodePtr *txtNodes = NULL;
-    xmlNodePtr *fwdNodes = NULL;
-    char *forwardPlainNames = NULL;
-    char *enable = NULL;
+    g_autofree xmlNodePtr *hostNodes = NULL;
+    g_autofree xmlNodePtr *srvNodes = NULL;
+    g_autofree xmlNodePtr *txtNodes = NULL;
+    g_autofree xmlNodePtr *fwdNodes = NULL;
+    g_autofree char *forwardPlainNames = NULL;
+    g_autofree char *enable = NULL;
     int nhosts, nsrvs, ntxts, nfwds;
     size_t i;
-    int ret = -1;
     VIR_XPATH_NODE_AUTORESTORE(ctxt);
 
     ctxt->node = node;
@@ -971,7 +953,7 @@ virNetworkDNSDefParseXML(const char *networkName,
                            _("Invalid dns enable setting '%s' "
                              "in network '%s'"),
                            enable, networkName);
-            goto cleanup;
+            return -1;
         }
     }
 
@@ -983,7 +965,7 @@ virNetworkDNSDefParseXML(const char *networkName,
                            _("Invalid dns forwardPlainNames setting '%s' "
                              "in network '%s'"),
                            forwardPlainNames, networkName);
-            goto cleanup;
+            return -1;
         }
     }
 
@@ -992,14 +974,14 @@ virNetworkDNSDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <forwarder> element found in <dns> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
     if (nfwds > 0) {
         if (VIR_ALLOC_N(def->forwarders, nfwds) < 0)
-            goto cleanup;
+            return -1;
 
         for (i = 0; i < nfwds; i++) {
-            char *addr = virXMLPropString(fwdNodes[i], "addr");
+            g_autofree char *addr = virXMLPropString(fwdNodes[i], "addr");
 
             if (addr && virSocketAddrParse(&def->forwarders[i].addr,
                                            addr, AF_UNSPEC) < 0) {
@@ -1007,17 +989,15 @@ virNetworkDNSDefParseXML(const char *networkName,
                                _("Invalid forwarder IP address '%s' "
                                  "in network '%s'"),
                                addr, networkName);
-                VIR_FREE(addr);
-                goto cleanup;
+                return -1;
             }
             def->forwarders[i].domain = virXMLPropString(fwdNodes[i], "domain");
             if (!(addr || def->forwarders[i].domain)) {
                 virReportError(VIR_ERR_XML_ERROR, "%s",
                                _("Invalid forwarder element, must contain "
                                  "at least one of addr or domain"));
-                goto cleanup;
+                return -1;
             }
-            VIR_FREE(addr);
             def->nfwds++;
         }
     }
@@ -1027,16 +1007,16 @@ virNetworkDNSDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <host> element found in <dns> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
     if (nhosts > 0) {
         if (VIR_ALLOC_N(def->hosts, nhosts) < 0)
-            goto cleanup;
+            return -1;
 
         for (i = 0; i < nhosts; i++) {
             if (virNetworkDNSHostDefParseXML(networkName, hostNodes[i],
                                              &def->hosts[def->nhosts], false) < 0) {
-                goto cleanup;
+                return -1;
             }
             def->nhosts++;
         }
@@ -1047,16 +1027,16 @@ virNetworkDNSDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <srv> element found in <dns> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
     if (nsrvs > 0) {
         if (VIR_ALLOC_N(def->srvs, nsrvs) < 0)
-            goto cleanup;
+            return -1;
 
         for (i = 0; i < nsrvs; i++) {
             if (virNetworkDNSSrvDefParseXML(networkName, srvNodes[i], ctxt,
                                             &def->srvs[def->nsrvs], false) < 0) {
-                goto cleanup;
+                return -1;
             }
             def->nsrvs++;
         }
@@ -1067,16 +1047,16 @@ virNetworkDNSDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <txt> element found in <dns> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
     if (ntxts > 0) {
         if (VIR_ALLOC_N(def->txts, ntxts) < 0)
-            goto cleanup;
+            return -1;
 
         for (i = 0; i < ntxts; i++) {
             if (virNetworkDNSTxtDefParseXML(networkName, txtNodes[i],
                                             &def->txts[def->ntxts], false) < 0) {
-                goto cleanup;
+                return -1;
             }
             def->ntxts++;
         }
@@ -1087,18 +1067,10 @@ virNetworkDNSDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("Extra data in disabled network '%s'"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
 
-    ret = 0;
- cleanup:
-    VIR_FREE(enable);
-    VIR_FREE(forwardPlainNames);
-    VIR_FREE(fwdNodes);
-    VIR_FREE(hostNodes);
-    VIR_FREE(srvNodes);
-    VIR_FREE(txtNodes);
-    return ret;
+    return 0;
 }
 
 
@@ -1115,11 +1087,12 @@ virNetworkIPDefParseXML(const char *networkName,
 
     VIR_XPATH_NODE_AUTORESTORE(ctxt);
     xmlNodePtr dhcp;
-    char *address = NULL, *netmask = NULL;
+    g_autofree char *address = NULL;
+    g_autofree char *netmask = NULL;
+    g_autofree char *localPtr = NULL;
     unsigned long prefix = 0;
     int prefixRc;
-    int result = -1;
-    char *localPtr = NULL;
+    int ret = -1;
 
     ctxt->node = node;
 
@@ -1243,16 +1216,13 @@ virNetworkIPDefParseXML(const char *networkName,
         def->tftproot = virXPathString("string(./tftp[1]/@root)", ctxt);
     }
 
-    result = 0;
+    ret = 0;
 
  cleanup:
-    if (result < 0)
+    if (ret < 0)
         virNetworkIPDefClear(def);
-    VIR_FREE(address);
-    VIR_FREE(netmask);
-    VIR_FREE(localPtr);
 
-    return result;
+    return ret;
 }
 
 
@@ -1290,10 +1260,10 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def,
     xmlNodePtr virtPortNode;
     xmlNodePtr vlanNode;
     xmlNodePtr bandwidth_node;
-    char *isDefault = NULL;
-    char *trustGuestRxFilters = NULL;
+    g_autofree char *isDefault = NULL;
+    g_autofree char *trustGuestRxFilters = NULL;
 
-    int result = -1;
+    int ret = -1;
 
     ctxt->node = node;
 
@@ -1335,14 +1305,12 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def,
     if (vlanNode && virNetDevVlanParse(vlanNode, ctxt, &def->vlan) < 0)
         goto cleanup;
 
-    result = 0;
+    ret = 0;
  cleanup:
-    if (result < 0)
+    if (ret < 0)
         virPortGroupDefClear(def);
-    VIR_FREE(isDefault);
-    VIR_FREE(trustGuestRxFilters);
 
-    return result;
+    return ret;
 }
 
 
@@ -1352,13 +1320,12 @@ virNetworkForwardNatDefParseXML(const char *networkName,
                                 xmlXPathContextPtr ctxt,
                                 virNetworkForwardDefPtr def)
 {
-    int ret = -1;
-    xmlNodePtr *natAddrNodes = NULL;
-    xmlNodePtr *natPortNodes = NULL;
     int nNatAddrs, nNatPorts;
-    char *addrStart = NULL;
-    char *addrEnd = NULL;
-    char *ipv6 = NULL;
+    g_autofree xmlNodePtr *natAddrNodes = NULL;
+    g_autofree xmlNodePtr *natPortNodes = NULL;
+    g_autofree char *addrStart = NULL;
+    g_autofree char *addrEnd = NULL;
+    g_autofree char *ipv6 = NULL;
     VIR_XPATH_NODE_AUTORESTORE(ctxt);
 
     ctxt->node = node;
@@ -1367,7 +1334,7 @@ virNetworkForwardNatDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("The <nat> element can only be used when <forward> 'mode' is 'nat' in network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
 
     ipv6 = virXMLPropString(node, "ipv6");
@@ -1378,10 +1345,9 @@ virNetworkForwardNatDefParseXML(const char *networkName,
                            _("Invalid ipv6 setting '%s' "
                              "in network '%s' NAT"),
                            ipv6, networkName);
-            goto cleanup;
+            return -1;
         }
         def->natIPv6 = natIPv6;
-        VIR_FREE(ipv6);
     }
 
     /* addresses for SNAT */
@@ -1390,26 +1356,26 @@ virNetworkForwardNatDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <address> element found in <forward> of "
                          "network %s"), networkName);
-        goto cleanup;
+        return -1;
     } else if (nNatAddrs > 1) {
         virReportError(VIR_ERR_XML_ERROR,
                        _("Only one <address> element is allowed in <nat> in "
                          "<forward> in network %s"), networkName);
-        goto cleanup;
+        return -1;
     } else if (nNatAddrs == 1) {
         addrStart = virXMLPropString(*natAddrNodes, "start");
         if (addrStart == NULL) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("missing 'start' attribute in <address> element in <nat> in "
                              "<forward> in network %s"), networkName);
-            goto cleanup;
+            return -1;
         }
         addrEnd = virXMLPropString(*natAddrNodes, "end");
         if (addrEnd == NULL) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("missing 'end' attribute in <address> element in <nat> in "
                              "<forward> in network %s"), networkName);
-            goto cleanup;
+            return -1;
         }
     }
 
@@ -1417,34 +1383,34 @@ virNetworkForwardNatDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("Bad ipv4 start address '%s' in <nat> in <forward> in "
                          "network '%s'"), addrStart, networkName);
-        goto cleanup;
+        return -1;
     }
 
     if (addrEnd && virSocketAddrParse(&def->addr.end, addrEnd, AF_INET) < 0) {
         virReportError(VIR_ERR_XML_ERROR,
                        _("Bad ipv4 end address '%s' in <nat> in <forward> in "
                          "network '%s'"), addrEnd, networkName);
-        goto cleanup;
+        return -1;
     }
 
     if (addrStart && addrEnd) {
         /* verify that start <= end */
         if (virSocketAddrGetRange(&def->addr.start, &def->addr.end, NULL, 0) < 0)
-            goto cleanup;
+            return -1;
     } else {
         if (addrStart) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Only start address '%s' specified in <nat> in "
                              "<forward> in network '%s'"),
                            addrStart, networkName);
-            goto cleanup;
+            return -1;
         }
         if (addrEnd) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Only end address '%s' specified in <nat> in "
                              "<forward> in network '%s'"),
                            addrEnd, networkName);
-            goto cleanup;
+            return -1;
         }
     }
 
@@ -1454,12 +1420,12 @@ virNetworkForwardNatDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <port> element found in <forward> of "
                          "network %s"), networkName);
-        goto cleanup;
+        return -1;
     } else if (nNatPorts > 1) {
         virReportError(VIR_ERR_XML_ERROR,
                        _("Only one <port> element is allowed in <nat> in "
                          "<forward> in network %s"), networkName);
-        goto cleanup;
+        return -1;
     } else if (nNatPorts == 1) {
         if (virXPathUInt("string(./port[1]/@start)", ctxt, &def->port.start) < 0
             || def->port.start > 65535) {
@@ -1468,24 +1434,17 @@ virNetworkForwardNatDefParseXML(const char *networkName,
                            _("Missing or invalid 'start' attribute in <port> "
                              "in <nat> in <forward> in network %s"),
                              networkName);
-            goto cleanup;
+            return -1;
         }
         if (virXPathUInt("string(./port[1]/@end)", ctxt, &def->port.end) < 0
             || def->port.end > 65535 || def->port.end < def->port.start) {
             virReportError(VIR_ERR_XML_DETAIL,
                            _("Missing or invalid 'end' attribute in <port> in "
                              "<nat> in <forward> in network %s"), networkName);
-            goto cleanup;
+            return -1;
         }
     }
-    ret = 0;
-
- cleanup:
-    VIR_FREE(addrStart);
-    VIR_FREE(addrEnd);
-    VIR_FREE(natAddrNodes);
-    VIR_FREE(natPortNodes);
-    return ret;
+    return 0;
 }
 
 
@@ -1496,16 +1455,15 @@ virNetworkForwardDefParseXML(const char *networkName,
                              virNetworkForwardDefPtr def)
 {
     size_t i, j;
-    int ret = -1;
-    xmlNodePtr *forwardIfNodes = NULL;
-    xmlNodePtr *forwardPfNodes = NULL;
-    xmlNodePtr *forwardAddrNodes = NULL;
-    xmlNodePtr *forwardNatNodes = NULL;
     int nForwardIfs, nForwardAddrs, nForwardPfs, nForwardNats;
-    char *forwardDev = NULL;
-    char *forwardManaged = NULL;
-    char *forwardDriverName = NULL;
-    char *type = NULL;
+    g_autofree xmlNodePtr *forwardIfNodes = NULL;
+    g_autofree xmlNodePtr *forwardPfNodes = NULL;
+    g_autofree xmlNodePtr *forwardAddrNodes = NULL;
+    g_autofree xmlNodePtr *forwardNatNodes = NULL;
+    g_autofree char *forwardDev = NULL;
+    g_autofree char *forwardManaged = NULL;
+    g_autofree char *forwardDriverName = NULL;
+    g_autofree char *type = NULL;
     VIR_XPATH_NODE_AUTORESTORE(ctxt);
 
     ctxt->node = node;
@@ -1516,9 +1474,8 @@ virNetworkForwardDefParseXML(const char *networkName,
         if ((def->type = virNetworkForwardTypeFromString(type)) < 0) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                            _("unknown forwarding type '%s'"), type);
-            goto cleanup;
+            return -1;
         }
-        VIR_FREE(type);
     }
 
     forwardManaged = virXPathString("string(./@managed)", ctxt);
@@ -1537,7 +1494,7 @@ virNetworkForwardDefParseXML(const char *networkName,
                            _("Unknown forward <driver name='%s'/> "
                              "in network %s"),
                            forwardDriverName, networkName);
-            goto cleanup;
+            return -1;
         }
         def->driverName = driverName;
     }
@@ -1548,7 +1505,7 @@ virNetworkForwardDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <interface> element found in <forward> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
 
     nForwardAddrs = virXPathNodeSet("./address", ctxt, &forwardAddrNodes);
@@ -1556,7 +1513,7 @@ virNetworkForwardDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <address> element found in <forward> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
 
     nForwardPfs = virXPathNodeSet("./pf", ctxt, &forwardPfNodes);
@@ -1564,7 +1521,7 @@ virNetworkForwardDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <pf> element found in <forward> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     }
 
     nForwardNats = virXPathNodeSet("./nat", ctxt, &forwardNatNodes);
@@ -1572,17 +1529,17 @@ virNetworkForwardDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("invalid <nat> element found in <forward> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     } else if (nForwardNats > 1) {
         virReportError(VIR_ERR_XML_ERROR,
                        _("Only one <nat> element is allowed in <forward> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     } else if (nForwardNats == 1) {
         if (virNetworkForwardNatDefParseXML(networkName,
                                             *forwardNatNodes,
                                             ctxt, def) < 0)
-            goto cleanup;
+            return -1;
     }
 
     forwardDev = virXPathString("string(./@dev)", ctxt);
@@ -1591,12 +1548,12 @@ virNetworkForwardDefParseXML(const char *networkName,
                        _("the <forward> 'dev' attribute cannot be used when "
                          "<address> or <pf> sub-elements are present "
                          "in network %s"));
-        goto cleanup;
+        return -1;
     }
 
     if (nForwardIfs > 0 || forwardDev) {
         if (VIR_ALLOC_N(def->ifs, MAX(nForwardIfs, 1)) < 0)
-            goto cleanup;
+            return -1;
 
         if (forwardDev) {
             def->ifs[0].device.dev = forwardDev;
@@ -1607,64 +1564,66 @@ virNetworkForwardDefParseXML(const char *networkName,
 
         /* parse each <interface> */
         for (i = 0; i < nForwardIfs; i++) {
-            forwardDev = virXMLPropString(forwardIfNodes[i], "dev");
-            if (!forwardDev) {
+            g_autofree char *forwardDevi = virXMLPropString(forwardIfNodes[i], "dev");
+
+            if (!forwardDevi) {
                 virReportError(VIR_ERR_XML_ERROR,
                                _("Missing required dev attribute in "
                                  "<forward> <interface> element of network %s"),
                                networkName);
-                goto cleanup;
+                return -1;
             }
 
             if ((i == 0) && (def->nifs == 1)) {
                 /* both <forward dev='x'> and <interface dev='x'/> are
                  * present.  If they don't match, it's an error.
                  */
-                if (STRNEQ(forwardDev, def->ifs[0].device.dev)) {
+                if (STRNEQ(forwardDevi, def->ifs[0].device.dev)) {
                     virReportError(VIR_ERR_XML_ERROR,
                                    _("<forward dev='%s'> must match first "
                                      "<interface dev='%s'/> in network %s"),
                                    def->ifs[0].device.dev,
-                                   forwardDev, networkName);
-                    goto cleanup;
+                                   forwardDevi, networkName);
+                    return -1;
                 }
-                VIR_FREE(forwardDev);
                 continue;
             }
 
             for (j = 0; j < i; j++) {
-                if (STREQ_NULLABLE(def->ifs[j].device.dev, forwardDev)) {
+                if (STREQ_NULLABLE(def->ifs[j].device.dev, forwardDevi)) {
                     virReportError(VIR_ERR_XML_ERROR,
                                    _("interface '%s' can only be "
                                      "listed once in network %s"),
-                                   forwardDev, networkName);
-                    goto cleanup;
+                                   forwardDevi, networkName);
+                    return -1;
                 }
             }
 
-            def->ifs[i].device.dev = forwardDev;
-            forwardDev = NULL;
+            def->ifs[i].device.dev = forwardDevi;
+            forwardDevi = NULL;
             def->ifs[i].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV;
             def->nifs++;
         }
 
     } else if (nForwardAddrs > 0) {
         if (VIR_ALLOC_N(def->ifs, nForwardAddrs) < 0)
-            goto cleanup;
+            return -1;
 
         for (i = 0; i < nForwardAddrs; i++) {
-            if (!(type = virXMLPropString(forwardAddrNodes[i], "type"))) {
+            g_autofree char *addrType = NULL;
+
+            if (!(addrType = virXMLPropString(forwardAddrNodes[i], "type"))) {
                 virReportError(VIR_ERR_XML_ERROR,
                                _("missing address type in network %s"),
                                networkName);
-                goto cleanup;
+                return -1;
             }
 
-            if ((def->ifs[i].type = virNetworkForwardHostdevDeviceTypeFromString(type)) < 0) {
+            if ((def->ifs[i].type = virNetworkForwardHostdevDeviceTypeFromString(addrType)) < 0) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                _("unknown address type '%s' in network %s"),
-                               type, networkName);
-                goto cleanup;
+                               addrType, networkName);
+                return -1;
             }
 
             switch (def->ifs[i].type) {
@@ -1673,7 +1632,7 @@ virNetworkForwardDefParseXML(const char *networkName,
                 virPCIDeviceAddressPtr addr = &def->ifs[i].device.pci;
 
                 if (virPCIDeviceAddressParseXML(forwardAddrNodes[i], addr) < 0)
-                    goto cleanup;
+                    return -1;
 
                 for (j = 0; j < i; j++) {
                     if (virPCIDeviceAddressEqual(addr, &def->ifs[j].device.pci)) {
@@ -1683,7 +1642,7 @@ virNetworkForwardDefParseXML(const char *networkName,
                                        addr->domain, addr->bus,
                                        addr->slot, addr->function,
                                        networkName);
-                        goto cleanup;
+                        return -1;
                     }
                 }
                 break;
@@ -1693,10 +1652,9 @@ virNetworkForwardDefParseXML(const char *networkName,
             default:
                 virReportError(VIR_ERR_XML_ERROR,
                                _("unsupported address type '%s' in network %s"),
-                               type, networkName);
-                goto cleanup;
+                               addrType, networkName);
+                return -1;
             }
-            VIR_FREE(type);
             def->nifs++;
         }
 
@@ -1704,10 +1662,10 @@ virNetworkForwardDefParseXML(const char *networkName,
         virReportError(VIR_ERR_XML_ERROR,
                        _("Only one <pf> element is allowed in <forward> of network %s"),
                        networkName);
-        goto cleanup;
+        return -1;
     } else if (nForwardPfs == 1) {
         if (VIR_ALLOC_N(def->pfs, nForwardPfs) < 0)
-            goto cleanup;
+            return -1;
 
         forwardDev = virXMLPropString(*forwardPfNodes, "dev");
         if (!forwardDev) {
@@ -1715,7 +1673,7 @@ virNetworkForwardDefParseXML(const char *networkName,
                            _("Missing required dev attribute "
                              "in <pf> element of network '%s'"),
                            networkName);
-            goto cleanup;
+            return -1;
         }
 
         def->pfs->dev = forwardDev;
@@ -1723,17 +1681,7 @@ virNetworkForwardDefParseXML(const char *networkName,
         def->npfs++;
     }
 
-    ret = 0;
- cleanup:
-    VIR_FREE(type);
-    VIR_FREE(forwardDev);
-    VIR_FREE(forwardManaged);
-    VIR_FREE(forwardDriverName);
-    VIR_FREE(forwardPfNodes);
-    VIR_FREE(forwardIfNodes);
-    VIR_FREE(forwardAddrNodes);
-    VIR_FREE(forwardNatNodes);
-    return ret;
+    return 0;
 }
 
 
@@ -1741,18 +1689,23 @@ virNetworkDefPtr
 virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                       virNetworkXMLOptionPtr xmlopt)
 {
-    virNetworkDefPtr def;
-    char *tmp = NULL;
-    char *stp = NULL;
-    xmlNodePtr *ipNodes = NULL;
-    xmlNodePtr *routeNodes = NULL;
-    xmlNodePtr *portGroupNodes = NULL;
+    g_autoptr(virNetworkDef) def = NULL;
+    g_autofree char *uuid = NULL;
+    g_autofree char *localOnly = NULL;
+    g_autofree char *stp = NULL;
+    g_autofree char *stpDelay = NULL;
+    g_autofree char *macTableManager = NULL;
+    g_autofree char *macAddr = NULL;
+    g_autofree char *mtuSize = NULL;
+    g_autofree xmlNodePtr *ipNodes = NULL;
+    g_autofree xmlNodePtr *routeNodes = NULL;
+    g_autofree xmlNodePtr *portGroupNodes = NULL;
     int nips, nPortGroups, nRoutes;
     xmlNodePtr dnsNode = NULL;
     xmlNodePtr virtPortNode = NULL;
     xmlNodePtr forwardNode = NULL;
-    char *ipv6nogwStr = NULL;
-    char *trustGuestRxFilters = NULL;
+    g_autofree char *ipv6nogwStr = NULL;
+    g_autofree char *trustGuestRxFilters = NULL;
     VIR_XPATH_NODE_AUTORESTORE(ctxt);
     xmlNodePtr bandwidthNode = NULL;
     xmlNodePtr vlanNode;
@@ -1765,27 +1718,26 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
     def->name = virXPathString("string(./name[1])", ctxt);
     if (!def->name) {
         virReportError(VIR_ERR_NO_NAME, NULL);
-        goto error;
+        return NULL;
     }
 
     if (virXMLCheckIllegalChars("name", def->name, "/") < 0)
-        goto error;
+        return NULL;
 
     /* Extract network uuid */
-    tmp = virXPathString("string(./uuid[1])", ctxt);
-    if (!tmp) {
+    uuid = virXPathString("string(./uuid[1])", ctxt);
+    if (!uuid) {
         if (virUUIDGenerate(def->uuid) < 0) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            "%s", _("Failed to generate UUID"));
-            goto error;
+            return NULL;
         }
     } else {
-        if (virUUIDParse(tmp, def->uuid) < 0) {
+        if (virUUIDParse(uuid, def->uuid) < 0) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            "%s", _("malformed uuid element"));
-            goto error;
+            return NULL;
         }
-        VIR_FREE(tmp);
         def->uuid_specified = true;
     }
 
@@ -1798,9 +1750,8 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
             virReportError(VIR_ERR_XML_ERROR,
                            _("Invalid ipv6 setting '%s' in network '%s'"),
                            ipv6nogwStr, def->name);
-            goto error;
+            return NULL;
         }
-        VIR_FREE(ipv6nogwStr);
     }
 
     trustGuestRxFilters
@@ -1812,36 +1763,34 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                            _("Invalid trustGuestRxFilters setting '%s' "
                              "in network '%s'"),
                            trustGuestRxFilters, def->name);
-            goto error;
+            return NULL;
         }
-        VIR_FREE(trustGuestRxFilters);
     }
 
     /* Parse network domain information */
     def->domain = virXPathString("string(./domain[1]/@name)", ctxt);
-    tmp = virXPathString("string(./domain[1]/@localOnly)", ctxt);
-    if (tmp) {
-        def->domainLocalOnly = virTristateBoolTypeFromString(tmp);
+    localOnly = virXPathString("string(./domain[1]/@localOnly)", ctxt);
+    if (localOnly) {
+        def->domainLocalOnly = virTristateBoolTypeFromString(localOnly);
         if (def->domainLocalOnly <= 0) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Invalid domain localOnly setting '%s' "
                              "in network '%s'"),
-                           tmp, def->name);
-            goto error;
+                           localOnly, def->name);
+            return NULL;
         }
-        VIR_FREE(tmp);
     }
 
     if ((bandwidthNode = virXPathNode("./bandwidth", ctxt)) &&
         virNetDevBandwidthParse(&def->bandwidth, NULL, bandwidthNode, false) < 0)
-        goto error;
+        return NULL;
 
     vlanNode = virXPathNode("./vlan", ctxt);
     if (vlanNode && virNetDevVlanParse(vlanNode, ctxt, &def->vlan) < 0)
-        goto error;
+        return NULL;
 
     if (virNetworkPortOptionsParseXML(ctxt, &def->isolatedPort) < 0)
-        goto error;
+        return NULL;
 
     /* Parse bridge information */
     def->bridge = virXPathString("string(./bridge[1]/@name)", ctxt);
@@ -1849,124 +1798,118 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
     stp = virXPathString("string(./bridge[1]/@stp)", ctxt);
     def->stp = (stp && STREQ(stp, "off")) ? false : true;
 
-    tmp = virXPathString("string(./bridge[1]/@delay)", ctxt);
-    if (tmp) {
-        if (virStrToLong_ulp(tmp, NULL, 10, &def->delay) < 0) {
+    stpDelay = virXPathString("string(./bridge[1]/@delay)", ctxt);
+    if (stpDelay) {
+        if (virStrToLong_ulp(stpDelay, NULL, 10, &def->delay) < 0) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Invalid delay value in network '%s'"),
                            def->name);
-            goto error;
+            return NULL;
         }
     }
-    VIR_FREE(tmp);
 
-    tmp = virXPathString("string(./bridge[1]/@macTableManager)", ctxt);
-    if (tmp) {
+    macTableManager = virXPathString("string(./bridge[1]/@macTableManager)", ctxt);
+    if (macTableManager) {
         if ((def->macTableManager
-             = virNetworkBridgeMACTableManagerTypeFromString(tmp)) <= 0) {
+             = virNetworkBridgeMACTableManagerTypeFromString(macTableManager)) <= 0) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Invalid macTableManager setting '%s' "
-                             "in network '%s'"), tmp, def->name);
-            goto error;
+                             "in network '%s'"), macTableManager, def->name);
+            return NULL;
         }
-        VIR_FREE(tmp);
     }
 
-    tmp = virXPathString("string(./mac[1]/@address)", ctxt);
-    if (tmp) {
-        if (virMacAddrParse(tmp, &def->mac) < 0) {
+    macAddr = virXPathString("string(./mac[1]/@address)", ctxt);
+    if (macAddr) {
+        if (virMacAddrParse(macAddr, &def->mac) < 0) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Invalid bridge mac address '%s' in network '%s'"),
-                           tmp, def->name);
-            goto error;
+                           macAddr, def->name);
+            return NULL;
         }
         if (virMacAddrIsMulticast(&def->mac)) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Invalid multicast bridge mac address '%s' in network '%s'"),
-                           tmp, def->name);
-            goto error;
+                           macAddr, def->name);
+            return NULL;
         }
-        VIR_FREE(tmp);
         def->mac_specified = true;
     }
 
-    tmp = virXPathString("string(./mtu/@size)", ctxt);
-    if (tmp) {
-        if (virStrToLong_ui(tmp, NULL, 10, &def->mtu) < 0) {
+    mtuSize = virXPathString("string(./mtu/@size)", ctxt);
+    if (mtuSize) {
+        if (virStrToLong_ui(mtuSize, NULL, 10, &def->mtu) < 0) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("Invalid mtu size '%s' in network '%s'"),
-                           tmp, def->name);
-            goto error;
+                           mtuSize, def->name);
+            return NULL;
         }
     }
-    VIR_FREE(tmp);
 
     dnsNode = virXPathNode("./dns", ctxt);
     if (dnsNode != NULL &&
         virNetworkDNSDefParseXML(def->name, dnsNode, ctxt, &def->dns) < 0) {
-        goto error;
+        return NULL;
     }
 
     virtPortNode = virXPathNode("./virtualport", ctxt);
     if (virtPortNode &&
         (!(def->virtPortProfile = virNetDevVPortProfileParse(virtPortNode,
                                                              VIR_VPORT_XML_REQUIRE_TYPE)))) {
-        goto error;
+        return NULL;
     }
 
     nPortGroups = virXPathNodeSet("./portgroup", ctxt, &portGroupNodes);
     if (nPortGroups < 0)
-        goto error;
+        return NULL;
 
     if (nPortGroups > 0) {
         size_t i;
 
         /* allocate array to hold all the portgroups */
         if (VIR_ALLOC_N(def->portGroups, nPortGroups) < 0)
-            goto error;
+            return NULL;
         /* parse each portgroup */
         for (i = 0; i < nPortGroups; i++) {
             if (virNetworkPortGroupParseXML(&def->portGroups[i],
                                             portGroupNodes[i],
                                             ctxt) < 0)
-                goto error;
+                return NULL;
             def->nPortGroups++;
         }
     }
-    VIR_FREE(portGroupNodes);
 
     nips = virXPathNodeSet("./ip", ctxt, &ipNodes);
     if (nips < 0)
-        goto error;
+        return NULL;
 
     if (nips > 0) {
         size_t i;
 
         /* allocate array to hold all the addrs */
         if (VIR_ALLOC_N(def->ips, nips) < 0)
-            goto error;
+            return NULL;
         /* parse each addr */
         for (i = 0; i < nips; i++) {
             if (virNetworkIPDefParseXML(def->name,
                                         ipNodes[i],
                                         ctxt,
                                         &def->ips[i]) < 0)
-                goto error;
+                return NULL;
             def->nips++;
         }
     }
-    VIR_FREE(ipNodes);
 
     nRoutes = virXPathNodeSet("./route", ctxt, &routeNodes);
     if (nRoutes < 0)
-        goto error;
+        return NULL;
 
     if (nRoutes > 0) {
         size_t i;
 
         /* allocate array to hold all the route definitions */
         if (VIR_ALLOC_N(def->routes, nRoutes) < 0)
-            goto error;
+            return NULL;
         /* parse each definition */
         for (i = 0; i < nRoutes; i++) {
             virNetDevIPRoutePtr route = NULL;
@@ -1974,7 +1917,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
             if (!(route = virNetDevIPRouteParseXML(def->name,
                                                    routeNodes[i],
                                                    ctxt)))
-                goto error;
+                return NULL;
             def->routes[i] = route;
             def->nroutes++;
         }
@@ -2011,21 +1954,19 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                 }
             }
             if (!addrMatch) {
-                char *gw = virSocketAddrFormat(gateway);
+                g_autofree char *gw = virSocketAddrFormat(gateway);
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                _("unreachable static route gateway '%s' specified for network '%s'"),
                                gw, def->name);
-                VIR_FREE(gw);
-                goto error;
+                return NULL;
             }
         }
     }
-    VIR_FREE(routeNodes);
 
     forwardNode = virXPathNode("./forward", ctxt);
     if (forwardNode &&
         virNetworkForwardDefParseXML(def->name, forwardNode, ctxt, &def->forward) < 0) {
-        goto error;
+        return NULL;
     }
 
     /* Validate some items in the main NetworkDef that need to align
@@ -2047,14 +1988,14 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                              "but no IP address provided for network '%s'"),
                            virNetworkForwardTypeToString(def->forward.type),
                            def->name);
-            goto error;
+            return NULL;
         }
         if (def->forward.nifs > 1) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("multiple forwarding interfaces specified "
                              "for network '%s', only one is supported"),
                            def->name);
-            goto error;
+            return NULL;
         }
 
         if (def->forward.type == VIR_NETWORK_FORWARD_OPEN && def->forward.nifs) {
@@ -2067,7 +2008,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                              "network '%s' with forward mode='%s'"),
                            def->name,
                            virNetworkForwardTypeToString(def->forward.type));
-            goto error;
+            return NULL;
         }
         break;
 
@@ -2080,14 +2021,14 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                            _("bridge name not allowed in %s mode (network '%s')"),
                            virNetworkForwardTypeToString(def->forward.type),
                            def->name);
-            goto error;
+            return NULL;
         }
         if (def->bridgeZone) {
             virReportError(VIR_ERR_XML_ERROR,
                            _("bridge zone not allowed in %s mode (network '%s')"),
                            virNetworkForwardTypeToString(def->forward.type),
                            def->name);
-            goto error;
+            return NULL;
         }
         if (def->macTableManager) {
             virReportError(VIR_ERR_XML_ERROR,
@@ -2095,7 +2036,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                              "in %s mode (network '%s')"),
                            virNetworkForwardTypeToString(def->forward.type),
                            def->name);
-            goto error;
+            return NULL;
         }
         G_GNUC_FALLTHROUGH;
 
@@ -2107,7 +2048,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                              "(network '%s')"),
                            virNetworkForwardTypeToString(def->forward.type),
                            def->name);
-            goto error;
+            return NULL;
         }
         if (def->bridge && (def->forward.nifs || def->forward.npfs)) {
             virReportError(VIR_ERR_XML_ERROR,
@@ -2116,18 +2057,16 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                              "both (network '%s')"),
                            virNetworkForwardTypeToString(def->forward.type),
                            def->name);
-            goto error;
+            return NULL;
         }
         break;
 
     case VIR_NETWORK_FORWARD_LAST:
     default:
         virReportEnumRangeError(virNetworkForwardType, def->forward.type);
-        goto error;
+        return NULL;
     }
 
-    VIR_FREE(stp);
-
     if (def->mtu) {
         switch ((virNetworkForwardType) def->forward.type) {
         case VIR_NETWORK_FORWARD_NONE:
@@ -2146,12 +2085,12 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
                              "and isolated mode, not in %s (network '%s')"),
                            virNetworkForwardTypeToString(def->forward.type),
                            def->name);
-            goto error;
+            return NULL;
 
         case VIR_NETWORK_FORWARD_LAST:
         default:
             virReportEnumRangeError(virNetworkForwardType, def->forward.type);
-            goto error;
+            return NULL;
         }
     }
 
@@ -2165,23 +2104,12 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
         def->ns = xmlopt->ns;
     if (def->ns.parse) {
         if (virXMLNamespaceRegister(ctxt, &def->ns) < 0)
-            goto error;
+            return NULL;
         if ((def->ns.parse)(ctxt, &def->namespaceData) < 0)
-            goto error;
+            return NULL;
     }
 
-    return def;
-
- error:
-    VIR_FREE(tmp);
-    VIR_FREE(routeNodes);
-    VIR_FREE(stp);
-    virNetworkDefFree(def);
-    VIR_FREE(ipNodes);
-    VIR_FREE(portGroupNodes);
-    VIR_FREE(ipv6nogwStr);
-    VIR_FREE(trustGuestRxFilters);
-    return NULL;
+    return g_steal_pointer(&def);
 }
 
 
@@ -2190,14 +2118,12 @@ virNetworkDefParse(const char *xmlStr,
                    const char *filename,
                    virNetworkXMLOptionPtr xmlopt)
 {
-    xmlDocPtr xml;
+    g_autoptr(xmlDoc) xml = NULL;
     virNetworkDefPtr def = NULL;
     int keepBlanksDefault = xmlKeepBlanksDefault(0);
 
-    if ((xml = virXMLParse(filename, xmlStr, _("(network_definition)")))) {
+    if ((xml = virXMLParse(filename, xmlStr, _("(network_definition)"))))
         def = virNetworkDefParseNode(xml, xmlDocGetRootElement(xml), xmlopt);
-        xmlFreeDoc(xml);
-    }
 
     xmlKeepBlanksDefault(keepBlanksDefault);
     return def;
@@ -2292,13 +2218,12 @@ virNetworkDNSDefFormat(virBufferPtr buf,
                                   def->forwarders[i].domain);
         }
         if (VIR_SOCKET_ADDR_VALID(&def->forwarders[i].addr)) {
-        char *addr = virSocketAddrFormat(&def->forwarders[i].addr);
+            g_autofree char *addr = virSocketAddrFormat(&def->forwarders[i].addr);
 
-        if (!addr)
-            return -1;
+            if (!addr)
+                return -1;
 
-        virBufferAsprintf(buf, " addr='%s'", addr);
-        VIR_FREE(addr);
+            virBufferAsprintf(buf, " addr='%s'", addr);
         }
         virBufferAddLit(buf, "/>\n");
     }
@@ -2331,7 +2256,7 @@ virNetworkDNSDefFormat(virBufferPtr buf,
 
     if (def->nhosts) {
         for (i = 0; i < def->nhosts; i++) {
-            char *ip = virSocketAddrFormat(&def->hosts[i].ip);
+            g_autofree char *ip = virSocketAddrFormat(&def->hosts[i].ip);
 
             virBufferAsprintf(buf, "<host ip='%s'>\n", ip);
             virBufferAdjustIndent(buf, 2);
@@ -2341,7 +2266,6 @@ virNetworkDNSDefFormat(virBufferPtr buf,
 
             virBufferAdjustIndent(buf, -2);
             virBufferAddLit(buf, "</host>\n");
-            VIR_FREE(ip);
         }
     }
     virBufferAdjustIndent(buf, -2);
@@ -2359,18 +2283,16 @@ virNetworkIPDefFormat(virBufferPtr buf,
     if (def->family)
         virBufferAsprintf(buf, " family='%s'", def->family);
     if (VIR_SOCKET_ADDR_VALID(&def->address)) {
-        char *addr = virSocketAddrFormat(&def->address);
+        g_autofree char *addr = virSocketAddrFormat(&def->address);
         if (!addr)
             return -1;
         virBufferAsprintf(buf, " address='%s'", addr);
-        VIR_FREE(addr);
     }
     if (VIR_SOCKET_ADDR_VALID(&def->netmask)) {
-        char *addr = virSocketAddrFormat(&def->netmask);
+        g_autofree char *addr = virSocketAddrFormat(&def->netmask);
         if (!addr)
             return -1;
         virBufferAsprintf(buf, " netmask='%s'", addr);
-        VIR_FREE(addr);
     }
     if (def->prefix > 0)
         virBufferAsprintf(buf, " prefix='%u'", def->prefix);
@@ -2395,15 +2317,15 @@ virNetworkIPDefFormat(virBufferPtr buf,
         for (i = 0; i < def->nranges; i++) {
             virSocketAddrRange addr = def->ranges[i].addr;
             virNetworkDHCPLeaseTimeDefPtr lease = def->ranges[i].lease;
+            g_autofree char *saddr = NULL;
+            g_autofree char *eaddr = NULL;
 
-            char *saddr = virSocketAddrFormat(&addr.start);
-            if (!saddr)
+            if (!(saddr = virSocketAddrFormat(&addr.start)))
                 return -1;
-            char *eaddr = virSocketAddrFormat(&addr.end);
-            if (!eaddr) {
-                VIR_FREE(saddr);
+
+            if (!(eaddr = virSocketAddrFormat(&addr.end)))
                 return -1;
-            }
+
             virBufferAsprintf(buf, "<range start='%s' end='%s'",
                               saddr, eaddr);
             if (lease) {
@@ -2421,8 +2343,6 @@ virNetworkIPDefFormat(virBufferPtr buf,
             } else {
                 virBufferAddLit(buf, "/>\n");
             }
-            VIR_FREE(saddr);
-            VIR_FREE(eaddr);
         }
         for (i = 0; i < def->nhosts; i++) {
             virNetworkDHCPLeaseTimeDefPtr lease = def->hosts[i].lease;
@@ -2434,11 +2354,11 @@ virNetworkIPDefFormat(virBufferPtr buf,
             if (def->hosts[i].name)
                 virBufferAsprintf(buf, " name='%s'", def->hosts[i].name);
             if (VIR_SOCKET_ADDR_VALID(&def->hosts[i].ip)) {
-                char *ipaddr = virSocketAddrFormat(&def->hosts[i].ip);
+                g_autofree char *ipaddr = virSocketAddrFormat(&def->hosts[i].ip);
                 if (!ipaddr)
                     return -1;
+
                 virBufferAsprintf(buf, " ip='%s'", ipaddr);
-                VIR_FREE(ipaddr);
             }
             if (lease) {
                 virBufferAddLit(buf, ">\n");
@@ -2460,11 +2380,11 @@ virNetworkIPDefFormat(virBufferPtr buf,
             virBufferEscapeString(buf, "<bootp file='%s'",
                                   def->bootfile);
             if (VIR_SOCKET_ADDR_VALID(&def->bootserver)) {
-                char *ipaddr = virSocketAddrFormat(&def->bootserver);
+                g_autofree char *ipaddr = virSocketAddrFormat(&def->bootserver);
                 if (!ipaddr)
                     return -1;
+
                 virBufferEscapeString(buf, " server='%s'", ipaddr);
-                VIR_FREE(ipaddr);
             }
             virBufferAddLit(buf, "/>\n");
 
@@ -2515,20 +2435,19 @@ static int
 virNetworkForwardNatDefFormat(virBufferPtr buf,
                               const virNetworkForwardDef *fwd)
 {
-    char *addrStart = NULL;
-    char *addrEnd = NULL;
-    int ret = -1;
+    g_autofree char *addrStart = NULL;
+    g_autofree char *addrEnd = NULL;
 
     if (VIR_SOCKET_ADDR_VALID(&fwd->addr.start)) {
         addrStart = virSocketAddrFormat(&fwd->addr.start);
         if (!addrStart)
-            goto cleanup;
+            return -1;
     }
 
     if (VIR_SOCKET_ADDR_VALID(&fwd->addr.end)) {
         addrEnd = virSocketAddrFormat(&fwd->addr.end);
         if (!addrEnd)
-            goto cleanup;
+            return -1;
     }
 
     if (!addrEnd && !addrStart && !fwd->port.start && !fwd->port.end && !fwd->natIPv6)
@@ -2561,12 +2480,7 @@ virNetworkForwardNatDefFormat(virBufferPtr buf,
 
     virBufferAdjustIndent(buf, -2);
     virBufferAddLit(buf, "</nat>\n");
-    ret = 0;
-
- cleanup:
-    VIR_FREE(addrStart);
-    VIR_FREE(addrEnd);
-    return ret;
+    return 0;
 }
 
 
@@ -2856,27 +2770,22 @@ virNetworkSaveXML(const char *configDir,
                   const char *xml)
 {
     char uuidstr[VIR_UUID_STRING_BUFLEN];
-    char *configFile = NULL;
-    int ret = -1;
+    g_autofree char *configFile = NULL;
 
     if ((configFile = virNetworkConfigFile(configDir, def->name)) == NULL)
-        goto cleanup;
+        return -1;
 
     if (virFileMakePath(configDir) < 0) {
         virReportSystemError(errno,
                              _("cannot create config directory '%s'"),
                              configDir);
-        goto cleanup;
+        return -1;
     }
 
     virUUIDFormat(def->uuid, uuidstr);
-    ret = virXMLSaveFile(configFile,
-                         virXMLPickShellSafeComment(def->name, uuidstr),
-                         "net-edit", xml);
-
- cleanup:
-    VIR_FREE(configFile);
-    return ret;
+    return virXMLSaveFile(configFile,
+                          virXMLPickShellSafeComment(def->name, uuidstr),
+                          "net-edit", xml);
 }
 
 
@@ -2885,19 +2794,15 @@ virNetworkSaveConfig(const char *configDir,
                      virNetworkDefPtr def,
                      virNetworkXMLOptionPtr xmlopt)
 {
-    int ret = -1;
-    char *xml;
+    g_autofree char *xml = NULL;
 
     if (!(xml = virNetworkDefFormat(def, xmlopt, VIR_NETWORK_XML_INACTIVE)))
-        goto cleanup;
+        return -1;
 
     if (virNetworkSaveXML(configDir, def, xml))
-        goto cleanup;
+        return -1;
 
-    ret = 0;
- cleanup:
-    VIR_FREE(xml);
-    return ret;
+    return 0;
 }
 
 
@@ -3113,14 +3018,13 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
         }
 
         if (i == ipdef->nhosts) {
-            char *ip = virSocketAddrFormat(&host.ip);
+            g_autofree char *ip = virSocketAddrFormat(&host.ip);
             virReportError(VIR_ERR_OPERATION_INVALID,
                            _("couldn't locate an existing dhcp host entry with "
                              "\"mac='%s'\" \"name='%s'\" \"ip='%s'\" in"
                              " network '%s'"),
                            host.mac ? host.mac : _("unknown"), host.name,
                            ip ? ip : _("unknown"), def->name);
-            VIR_FREE(ip);
             goto cleanup;
         }
 
@@ -3146,7 +3050,7 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
                  STREQ_NULLABLE(host.name, ipdef->hosts[i].name)) ||
                 (VIR_SOCKET_ADDR_VALID(&host.ip) &&
                  virSocketAddrEqual(&host.ip, &ipdef->hosts[i].ip))) {
-                char *ip = virSocketAddrFormat(&host.ip);
+                g_autofree char *ip = virSocketAddrFormat(&host.ip);
 
                 virReportError(VIR_ERR_OPERATION_INVALID,
                                _("there is an existing dhcp host entry in "
@@ -3154,7 +3058,6 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
                                  "\"<host mac='%s' name='%s' ip='%s'/>\""),
                                def->name, host.mac ? host.mac : _("unknown"),
                                host.name, ip ? ip : _("unknown"));
-                VIR_FREE(ip);
                 goto cleanup;
             }
         }
@@ -3258,8 +3161,8 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def,
             return -1;
 
         if (i < ipdef->nranges) {
-            char *startip = virSocketAddrFormat(&range.addr.start);
-            char *endip = virSocketAddrFormat(&range.addr.end);
+            g_autofree char *startip = virSocketAddrFormat(&range.addr.start);
+            g_autofree char *endip = virSocketAddrFormat(&range.addr.end);
 
             virReportError(VIR_ERR_OPERATION_INVALID,
                            _("there is an existing dhcp range entry in "
@@ -3268,8 +3171,6 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def,
                            def->name,
                            startip ? startip : "unknown",
                            endip ? endip : "unknown");
-            VIR_FREE(startip);
-            VIR_FREE(endip);
             return -1;
         }
 
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index e3a61c62ea..34b9aa9505 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -321,6 +321,7 @@ typedef enum {
 } virNetworkTaintFlags;
 
 void virNetworkDefFree(virNetworkDefPtr def);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNetworkDef, virNetworkDefFree);
 
 enum {
     VIR_NETWORK_OBJ_LIST_ADD_LIVE = (1 << 0),
diff --git a/src/util/virxml.h b/src/util/virxml.h
index 26ab9f9c2d..ed178105f6 100644
--- a/src/util/virxml.h
+++ b/src/util/virxml.h
@@ -247,6 +247,7 @@ G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(virXPathContextNodeSave, virXPathContextNodeRes
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlDoc, xmlFreeDoc);
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlXPathContext, xmlXPathFreeContext);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlBuffer, xmlBufferFree);
 
 typedef int (*virXMLNamespaceParse)(xmlXPathContextPtr ctxt, void **nsdata);
 typedef void (*virXMLNamespaceFree)(void *nsdata);
-- 
2.25.4

Re: [PATCH] conf: convert network_conf.c to use g_auto* pointers
Posted by Erik Skultety 3 years, 10 months ago
On Wed, Jun 10, 2020 at 12:16:50AM -0400, Laine Stump wrote:
> This was mostly boilerplate conversion, but in one case I needed to
> define several differently named char* to take the place of a single
> char *tmp that was re-used multiple times, and in another place there
> was a single char* that was used at the toplevel of the function, and
> then later used repeatedly inside a for loop, so I defined a new
> separate char* inside the loop.
> 
> Signed-off-by: Laine Stump <laine@redhat.com>
> ---
> 
> This should be applied on top of Dan's IPv6 NAT patch series (it was
> reviewing that series that showed me this file hadn't yet been
> converted).

...

> @@ -689,14 +678,12 @@ virNetworkDHCPDefParseXML(const char *networkName,
>  
>              if (server &&
>                  virSocketAddrParse(&inaddr, server, AF_UNSPEC) < 0) {
> -                VIR_FREE(file);
> -                VIR_FREE(server);
>                  goto cleanup;
>              }
>  
>              def->bootfile = file;
> +            file = NULL;

g_steal_pointer would do as well

Reviewed-by: Erik Skultety <eskultet@redhat.com>

Re: [PATCH] conf: convert network_conf.c to use g_auto* pointers
Posted by Laine Stump 3 years, 10 months ago
On 6/10/20 3:51 AM, Erik Skultety wrote:
> On Wed, Jun 10, 2020 at 12:16:50AM -0400, Laine Stump wrote:
>> This was mostly boilerplate conversion, but in one case I needed to
>> define several differently named char* to take the place of a single
>> char *tmp that was re-used multiple times, and in another place there
>> was a single char* that was used at the toplevel of the function, and
>> then later used repeatedly inside a for loop, so I defined a new
>> separate char* inside the loop.
>>
>> Signed-off-by: Laine Stump <laine@redhat.com>
>> ---
>>
>> This should be applied on top of Dan's IPv6 NAT patch series (it was
>> reviewing that series that showed me this file hadn't yet been
>> converted).
> ...
>
>> @@ -689,14 +678,12 @@ virNetworkDHCPDefParseXML(const char *networkName,
>>   
>>               if (server &&
>>                   virSocketAddrParse(&inaddr, server, AF_UNSPEC) < 0) {
>> -                VIR_FREE(file);
>> -                VIR_FREE(server);
>>                   goto cleanup;
>>               }
>>   
>>               def->bootfile = file;
>> +            file = NULL;
> g_steal_pointer would do as well
>
> Reviewed-by: Erik Skultety <eskultet@redhat.com>
>

Well, Duh! Where was my brain while I was doing that mindless conversion??


This made me realized there's actually several places with the x = y; y 
= NULL; pattern associated with no-autofree'd pointers. If it's okay 
with you, I'll squash the following into the patch before I push it (or, 
if you'd prefer I can push it separately):

(Thanks for the review, BTW)

Re: [PATCH] conf: convert network_conf.c to use g_auto* pointers
Posted by Erik Skultety 3 years, 10 months ago
On Thu, Jun 11, 2020 at 12:09:34AM -0400, Laine Stump wrote:
> On 6/10/20 3:51 AM, Erik Skultety wrote:
> > On Wed, Jun 10, 2020 at 12:16:50AM -0400, Laine Stump wrote:
> > > This was mostly boilerplate conversion, but in one case I needed to
> > > define several differently named char* to take the place of a single
> > > char *tmp that was re-used multiple times, and in another place there
> > > was a single char* that was used at the toplevel of the function, and
> > > then later used repeatedly inside a for loop, so I defined a new
> > > separate char* inside the loop.
> > >
> > > Signed-off-by: Laine Stump <laine@redhat.com>
> > > ---
> > >
> > > This should be applied on top of Dan's IPv6 NAT patch series (it was
> > > reviewing that series that showed me this file hadn't yet been
> > > converted).
> > ...
> >
> > > @@ -689,14 +678,12 @@ virNetworkDHCPDefParseXML(const char *networkName,
> > >               if (server &&
> > >                   virSocketAddrParse(&inaddr, server, AF_UNSPEC) < 0) {
> > > -                VIR_FREE(file);
> > > -                VIR_FREE(server);
> > >                   goto cleanup;
> > >               }
> > >               def->bootfile = file;
> > > +            file = NULL;
> > g_steal_pointer would do as well
> >
> > Reviewed-by: Erik Skultety <eskultet@redhat.com>
> >
>
> Well, Duh! Where was my brain while I was doing that mindless conversion??
>
>
> This made me realized there's actually several places with the x = y; y =
> NULL; pattern associated with no-autofree'd pointers. If it's okay with you,
> I'll squash the following into the patch before I push it (or, if you'd
> prefer I can push it separately):

Yeah, looking at the diff, it would be better to push it in a separate patch.

> From ba0a291015766d74eacb81104abf63a85c0690a0 Mon Sep 17 00:00:00 2001
> From: Laine Stump <laine@redhat.com>
> Date: Thu, 11 Jun 2020 00:04:39 -0400
> Subject: [PATCH] conf: use g_steal_pointer in network_conf.c
>
> Signed-off-by: Laine Stump <laine@redhat.com>
> ---
>  src/conf/network_conf.c | 21 +++++++--------------
>  1 file changed, 7 insertions(+), 14 deletions(-)
>
> diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
> index 290111be59..538f038279 100644
> --- a/src/conf/network_conf.c
> +++ b/src/conf/network_conf.c
> @@ -617,12 +617,9 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
>          cur = cur->next;
>      }
>
> -    host->mac = mac;
> -    mac = NULL;
> -    host->id = id;
> -    id = NULL;
> -    host->name = name;
> -    name = NULL;
> +    host->mac = g_steak_pointer(&mac);

s/steak/steal

Reviewed-by: Erik Skultety <eskultet@redhat.com>


> +    host->id = g_steal_pointer(&id);
> +    host->name = g_steal_pointer(&name);
>      if (ip)
>          host->ip = inaddr;
>
> @@ -681,8 +678,7 @@ virNetworkDHCPDefParseXML(const char *networkName,
>                  goto cleanup;
>              }
>
> -            def->bootfile = file;
> -            file = NULL;
> +            def->bootfile = g_steal_pointer(&file);
>              def->bootserver = inaddr;
>          }
>
> @@ -1542,9 +1538,8 @@ virNetworkForwardDefParseXML(const char *networkName,
>              return -1;
>
>          if (forwardDev) {
> -            def->ifs[0].device.dev = forwardDev;
> +            def->ifs[0].device.dev = g_steal_pointer(&forwardDev);
>              def->ifs[0].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV;
> -            forwardDev = NULL;
>              def->nifs++;
>          }
>
> @@ -1585,8 +1580,7 @@ virNetworkForwardDefParseXML(const char *networkName,
>                  }
>              }
>
> -            def->ifs[i].device.dev = forwardDevi;
> -            forwardDevi = NULL;
> +            def->ifs[i].device.dev = g_steal_pointer(&forwardDevi);
>              def->ifs[i].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV;
>              def->nifs++;
>          }
> @@ -1662,8 +1656,7 @@ virNetworkForwardDefParseXML(const char *networkName,
>              return -1;
>          }
>
> -        def->pfs->dev = forwardDev;
> -        forwardDev = NULL;
> +        def->pfs->dev = g_steal_pointer(&forwardDev);
>          def->npfs++;
>      }
>
> --
> 2.25.4
>

Re: [PATCH] conf: convert network_conf.c to use g_auto* pointers
Posted by Laine Stump 3 years, 10 months ago
On 6/11/20 2:59 AM, Erik Skultety wrote:
> On Thu, Jun 11, 2020 at 12:09:34AM -0400, Laine Stump wrote:
>> On 6/10/20 3:51 AM, Erik Skultety wrote:
>>> On Wed, Jun 10, 2020 at 12:16:50AM -0400, Laine Stump wrote:
>>>> This was mostly boilerplate conversion, but in one case I needed to
>>>> define several differently named char* to take the place of a single
>>>> char *tmp that was re-used multiple times, and in another place there
>>>> was a single char* that was used at the toplevel of the function, and
>>>> then later used repeatedly inside a for loop, so I defined a new
>>>> separate char* inside the loop.
>>>>
>>>> Signed-off-by: Laine Stump <laine@redhat.com>
>>>> ---
>>>>
>>>> This should be applied on top of Dan's IPv6 NAT patch series (it was
>>>> reviewing that series that showed me this file hadn't yet been
>>>> converted).
>>> ...
>>>
>>>> @@ -689,14 +678,12 @@ virNetworkDHCPDefParseXML(const char *networkName,
>>>>                if (server &&
>>>>                    virSocketAddrParse(&inaddr, server, AF_UNSPEC) < 0) {
>>>> -                VIR_FREE(file);
>>>> -                VIR_FREE(server);
>>>>                    goto cleanup;
>>>>                }
>>>>                def->bootfile = file;
>>>> +            file = NULL;
>>> g_steal_pointer would do as well
>>>
>>> Reviewed-by: Erik Skultety <eskultet@redhat.com>
>>>
>> Well, Duh! Where was my brain while I was doing that mindless conversion??
>>
>>
>> This made me realized there's actually several places with the x = y; y =
>> NULL; pattern associated with no-autofree'd pointers. If it's okay with you,
>> I'll squash the following into the patch before I push it (or, if you'd
>> prefer I can push it separately):
> Yeah, looking at the diff, it would be better to push it in a separate patch.
>
>>  From ba0a291015766d74eacb81104abf63a85c0690a0 Mon Sep 17 00:00:00 2001
>> From: Laine Stump <laine@redhat.com>
>> Date: Thu, 11 Jun 2020 00:04:39 -0400
>> Subject: [PATCH] conf: use g_steal_pointer in network_conf.c
>>
>> Signed-off-by: Laine Stump <laine@redhat.com>
>> ---
>>   src/conf/network_conf.c | 21 +++++++--------------
>>   1 file changed, 7 insertions(+), 14 deletions(-)
>>
>> diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
>> index 290111be59..538f038279 100644
>> --- a/src/conf/network_conf.c
>> +++ b/src/conf/network_conf.c
>> @@ -617,12 +617,9 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
>>           cur = cur->next;
>>       }
>>
>> -    host->mac = mac;
>> -    mac = NULL;
>> -    host->id = id;
>> -    id = NULL;
>> -    host->name = name;
>> -    name = NULL;
>> +    host->mac = g_steak_pointer(&mac);
> s/steak/steal
>
> Reviewed-by: Erik Skultety <eskultet@redhat.com>


Heh. Hadn't even done my final smoke test yet. (That's what happens when 
it's midnight and you want to get to bed, but also want to have 
something in the other person's inbox for when they wake up :-)


Thanks, and don't worry, I'll be sure to run "all the tests" before I 
push :-)

>
>
>> +    host->id = g_steal_pointer(&id);
>> +    host->name = g_steal_pointer(&name);
>>       if (ip)
>>           host->ip = inaddr;
>>
>> @@ -681,8 +678,7 @@ virNetworkDHCPDefParseXML(const char *networkName,
>>                   goto cleanup;
>>               }
>>
>> -            def->bootfile = file;
>> -            file = NULL;
>> +            def->bootfile = g_steal_pointer(&file);
>>               def->bootserver = inaddr;
>>           }
>>
>> @@ -1542,9 +1538,8 @@ virNetworkForwardDefParseXML(const char *networkName,
>>               return -1;
>>
>>           if (forwardDev) {
>> -            def->ifs[0].device.dev = forwardDev;
>> +            def->ifs[0].device.dev = g_steal_pointer(&forwardDev);
>>               def->ifs[0].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV;
>> -            forwardDev = NULL;
>>               def->nifs++;
>>           }
>>
>> @@ -1585,8 +1580,7 @@ virNetworkForwardDefParseXML(const char *networkName,
>>                   }
>>               }
>>
>> -            def->ifs[i].device.dev = forwardDevi;
>> -            forwardDevi = NULL;
>> +            def->ifs[i].device.dev = g_steal_pointer(&forwardDevi);
>>               def->ifs[i].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV;
>>               def->nifs++;
>>           }
>> @@ -1662,8 +1656,7 @@ virNetworkForwardDefParseXML(const char *networkName,
>>               return -1;
>>           }
>>
>> -        def->pfs->dev = forwardDev;
>> -        forwardDev = NULL;
>> +        def->pfs->dev = g_steal_pointer(&forwardDev);
>>           def->npfs++;
>>       }
>>
>> --
>> 2.25.4
>>