From nobody Sun May 5 22:53:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1591762629; cv=none; d=zohomail.com; s=zohoarc; b=iq3eUipwg2CyOjaCQPt5W6Bsa987WNbhTu1NAeE+s1SsAOlpjm8Bp0aQUV8E0mPC4YMrDKQqS6oEg53KcExEnvLlXwOEFvAlyY0YbLNNCdSq5myhBLjzjV0RvtjNs8q0fA4V1EhvUftPu5YVaJUCNE/vgts6TMp3mtAVIlQxq9Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591762629; h=Content-Type:Content-Transfer-Encoding:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=AP7q/y5VkDDLQL57O3soaGDVw5a3LAZmzN5pk0gNqbM=; b=P06/NZcVUdYdiBpL6BJWIjkdTchEQIQ4gsQeRIDqli5oL96SDlqN2ii4rxZaC+CV3xsI0fbUPaldWtryb8ACxvjK0Ipwjb2SdY4CMlA5TifFGuhW1ybqdtjzGhXhQKvbMRJOJ8TzrOhYgFKJWix+pAaKW7rgLOzvLyYOC4tDEno= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by mx.zohomail.com with SMTPS id 1591762629819996.8264840226922; Tue, 9 Jun 2020 21:17:09 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-428-unKDbfVUNaqvQlgo7N7bfQ-1; Wed, 10 Jun 2020 00:17:04 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 83A59464; Wed, 10 Jun 2020 04:16:59 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 630B85D9CD; Wed, 10 Jun 2020 04:16:59 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 13EB6B3495; Wed, 10 Jun 2020 04:16:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 05A4Gvv2011885 for ; Wed, 10 Jun 2020 00:16:57 -0400 Received: by smtp.corp.redhat.com (Postfix) id 69F11768AE; Wed, 10 Jun 2020 04:16:57 +0000 (UTC) Received: from vhost2.laine.org (ovpn-113-82.phx2.redhat.com [10.3.113.82]) by smtp.corp.redhat.com (Postfix) with ESMTP id B9D6E7C002 for ; Wed, 10 Jun 2020 04:16:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591762628; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=AP7q/y5VkDDLQL57O3soaGDVw5a3LAZmzN5pk0gNqbM=; b=JL8AqF3m9mlb9EHkHLTSmB0yHb9CaBridWTjXwfzfBpx81BF0My4MsAzetMwX6rGaay2Ym qJO9AcDKaG3QzvbHsCX7TggDrvQRqAfAxZu3Lh7Sz2hEVWq6iYI6lSb/PkvqbcNsYQJmFT Ly/LehcMx8z45JMwMzbeOQssSKPTD9M= X-MC-Unique: unKDbfVUNaqvQlgo7N7bfQ-1 From: Laine Stump To: libvir-list@redhat.com Subject: [PATCH] conf: convert network_conf.c to use g_auto* pointers Date: Wed, 10 Jun 2020 00:16:50 -0400 Message-Id: <20200610041650.1686787-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Erik Skultety --- 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 =3D NULL; - virNetworkDefPtr newDef =3D NULL; + g_autofree char *xml =3D NULL; =20 if (!def) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -317,11 +316,9 @@ virNetworkDefCopy(virNetworkDefPtr def, =20 /* deep copy with a format/parse cycle */ if (!(xml =3D virNetworkDefFormat(def, xmlopt, flags))) - goto cleanup; - newDef =3D virNetworkDefParseString(xml, xmlopt); - cleanup: - VIR_FREE(xml); - return newDef; + return NULL; + + return virNetworkDefParseString(xml, xmlopt); } =20 =20 @@ -465,48 +462,43 @@ virNetworkDHCPRangeDefParseXML(const char *networkNam= e, { virSocketAddrRangePtr addr =3D &range->addr; xmlNodePtr cur =3D node->children; - char *start =3D NULL, *end =3D NULL; - int ret =3D -1; + g_autofree char *start =3D NULL; + g_autofree char *end =3D NULL; =20 if (!(start =3D virXMLPropString(node, "start"))) { virReportError(VIR_ERR_XML_ERROR, _("Missing 'start' attribute in dhcp range for netw= ork '%s'"), networkName); - goto cleanup; + return -1; } if (virSocketAddrParse(&addr->start, start, AF_UNSPEC) < 0) - goto cleanup; + return -1; =20 if (!(end =3D virXMLPropString(node, "end"))) { virReportError(VIR_ERR_XML_ERROR, _("Missing 'end' attribute in dhcp range for networ= k '%s'"), networkName); - goto cleanup; + return -1; } if (virSocketAddrParse(&addr->end, end, AF_UNSPEC) < 0) - goto cleanup; + return -1; =20 /* do a sanity check of the range */ if (virSocketAddrGetRange(&addr->start, &addr->end, &ipdef->address, virNetworkIPDefPrefix(ipdef)) < 0) - goto cleanup; + return -1; =20 while (cur !=3D NULL) { if (cur->type =3D=3D XML_ELEMENT_NODE && virXMLNodeNameEqual(cur, "lease")) { =20 if (virNetworkDHCPLeaseTimeDefParseXML(&range->lease, cur) < 0) - goto cleanup; + return -1; } cur =3D cur->next; } =20 - ret =3D 0; - - cleanup: - VIR_FREE(start); - VIR_FREE(end); - return ret; + return 0; } =20 =20 @@ -517,11 +509,13 @@ virNetworkDHCPHostDefParseXML(const char *networkName, virNetworkDHCPHostDefPtr host, bool partialOkay) { - char *mac =3D NULL, *name =3D NULL, *ip =3D NULL, *id =3D NULL; + g_autofree char *mac =3D NULL; + g_autofree char *name =3D NULL; + g_autofree char *ip =3D NULL; + g_autofree char *id =3D NULL; virMacAddr addr; virSocketAddr inaddr; xmlNodePtr cur =3D node->children; - int ret =3D -1; =20 mac =3D virXMLPropString(node, "mac"); if (mac !=3D 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; } } =20 @@ -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; } } =20 @@ -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; } =20 ip =3D 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; } =20 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; } } =20 @@ -618,7 +612,7 @@ virNetworkDHCPHostDefParseXML(const char *networkName, virXMLNodeNameEqual(cur, "lease")) { =20 if (virNetworkDHCPLeaseTimeDefParseXML(&host->lease, cur) < 0) - goto cleanup; + return -1; } cur =3D cur->next; } @@ -631,14 +625,9 @@ virNetworkDHCPHostDefParseXML(const char *networkName, name =3D NULL; if (ip) host->ip =3D inaddr; - ret =3D 0; =20 - cleanup: - VIR_FREE(mac); - VIR_FREE(id); - VIR_FREE(name); - VIR_FREE(ip); - return ret; + return 0; + } =20 =20 @@ -676,8 +665,8 @@ virNetworkDHCPDefParseXML(const char *networkName, } else if (VIR_SOCKET_ADDR_IS_FAMILY(&def->address, AF_INET) && cur->type =3D=3D XML_ELEMENT_NODE && virXMLNodeNameEqual(cur, "bootp")) { - char *file; - char *server; + g_autofree char *file =3D NULL; + g_autofree char *server =3D NULL; virSocketAddr inaddr; memset(&inaddr, 0, sizeof(inaddr)); =20 @@ -689,14 +678,12 @@ virNetworkDHCPDefParseXML(const char *networkName, =20 if (server && virSocketAddrParse(&inaddr, server, AF_UNSPEC) < 0) { - VIR_FREE(file); - VIR_FREE(server); goto cleanup; } =20 def->bootfile =3D file; + file =3D NULL; def->bootserver =3D inaddr; - VIR_FREE(server); } =20 cur =3D cur->next; @@ -716,7 +703,7 @@ virNetworkDNSHostDefParseXML(const char *networkName, bool partialOkay) { xmlNodePtr cur; - char *ip; + g_autofree char *ip =3D NULL; =20 if (!(ip =3D 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 reco= rd"), networkName); - VIR_FREE(ip); goto error; } - VIR_FREE(ip); =20 cur =3D node->children; while (cur !=3D NULL) { if (cur->type =3D=3D XML_ELEMENT_NODE && virXMLNodeNameEqual(cur, "hostname")) { if (cur->children !=3D NULL) { - char *name =3D (char *) xmlNodeGetContent(cur); + g_autofree char *name =3D (char *) xmlNodeGetContent(cur= ); =20 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 =3D cur->next; @@ -950,15 +933,14 @@ virNetworkDNSDefParseXML(const char *networkName, xmlXPathContextPtr ctxt, virNetworkDNSDefPtr def) { - xmlNodePtr *hostNodes =3D NULL; - xmlNodePtr *srvNodes =3D NULL; - xmlNodePtr *txtNodes =3D NULL; - xmlNodePtr *fwdNodes =3D NULL; - char *forwardPlainNames =3D NULL; - char *enable =3D NULL; + g_autofree xmlNodePtr *hostNodes =3D NULL; + g_autofree xmlNodePtr *srvNodes =3D NULL; + g_autofree xmlNodePtr *txtNodes =3D NULL; + g_autofree xmlNodePtr *fwdNodes =3D NULL; + g_autofree char *forwardPlainNames =3D NULL; + g_autofree char *enable =3D NULL; int nhosts, nsrvs, ntxts, nfwds; size_t i; - int ret =3D -1; VIR_XPATH_NODE_AUTORESTORE(ctxt); =20 ctxt->node =3D node; @@ -971,7 +953,7 @@ virNetworkDNSDefParseXML(const char *networkName, _("Invalid dns enable setting '%s' " "in network '%s'"), enable, networkName); - goto cleanup; + return -1; } } =20 @@ -983,7 +965,7 @@ virNetworkDNSDefParseXML(const char *networkName, _("Invalid dns forwardPlainNames setting '%s' " "in network '%s'"), forwardPlainNames, networkName); - goto cleanup; + return -1; } } =20 @@ -992,14 +974,14 @@ virNetworkDNSDefParseXML(const char *networkName, virReportError(VIR_ERR_XML_ERROR, _("invalid element found in of ne= twork %s"), networkName); - goto cleanup; + return -1; } if (nfwds > 0) { if (VIR_ALLOC_N(def->forwarders, nfwds) < 0) - goto cleanup; + return -1; =20 for (i =3D 0; i < nfwds; i++) { - char *addr =3D virXMLPropString(fwdNodes[i], "addr"); + g_autofree char *addr =3D virXMLPropString(fwdNodes[i], "addr"= ); =20 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 =3D virXMLPropString(fwdNodes[i], "d= omain"); 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 element found in of network= %s"), networkName); - goto cleanup; + return -1; } if (nhosts > 0) { if (VIR_ALLOC_N(def->hosts, nhosts) < 0) - goto cleanup; + return -1; =20 for (i =3D 0; i < nhosts; i++) { if (virNetworkDNSHostDefParseXML(networkName, hostNodes[i], &def->hosts[def->nhosts], fal= se) < 0) { - goto cleanup; + return -1; } def->nhosts++; } @@ -1047,16 +1027,16 @@ virNetworkDNSDefParseXML(const char *networkName, virReportError(VIR_ERR_XML_ERROR, _("invalid element found in of network = %s"), networkName); - goto cleanup; + return -1; } if (nsrvs > 0) { if (VIR_ALLOC_N(def->srvs, nsrvs) < 0) - goto cleanup; + return -1; =20 for (i =3D 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 element found in of network = %s"), networkName); - goto cleanup; + return -1; } if (ntxts > 0) { if (VIR_ALLOC_N(def->txts, ntxts) < 0) - goto cleanup; + return -1; =20 for (i =3D 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; } =20 - ret =3D 0; - cleanup: - VIR_FREE(enable); - VIR_FREE(forwardPlainNames); - VIR_FREE(fwdNodes); - VIR_FREE(hostNodes); - VIR_FREE(srvNodes); - VIR_FREE(txtNodes); - return ret; + return 0; } =20 =20 @@ -1115,11 +1087,12 @@ virNetworkIPDefParseXML(const char *networkName, =20 VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr dhcp; - char *address =3D NULL, *netmask =3D NULL; + g_autofree char *address =3D NULL; + g_autofree char *netmask =3D NULL; + g_autofree char *localPtr =3D NULL; unsigned long prefix =3D 0; int prefixRc; - int result =3D -1; - char *localPtr =3D NULL; + int ret =3D -1; =20 ctxt->node =3D node; =20 @@ -1243,16 +1216,13 @@ virNetworkIPDefParseXML(const char *networkName, def->tftproot =3D virXPathString("string(./tftp[1]/@root)", ctxt); } =20 - result =3D 0; + ret =3D 0; =20 cleanup: - if (result < 0) + if (ret < 0) virNetworkIPDefClear(def); - VIR_FREE(address); - VIR_FREE(netmask); - VIR_FREE(localPtr); =20 - return result; + return ret; } =20 =20 @@ -1290,10 +1260,10 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def, xmlNodePtr virtPortNode; xmlNodePtr vlanNode; xmlNodePtr bandwidth_node; - char *isDefault =3D NULL; - char *trustGuestRxFilters =3D NULL; + g_autofree char *isDefault =3D NULL; + g_autofree char *trustGuestRxFilters =3D NULL; =20 - int result =3D -1; + int ret =3D -1; =20 ctxt->node =3D node; =20 @@ -1335,14 +1305,12 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def, if (vlanNode && virNetDevVlanParse(vlanNode, ctxt, &def->vlan) < 0) goto cleanup; =20 - result =3D 0; + ret =3D 0; cleanup: - if (result < 0) + if (ret < 0) virPortGroupDefClear(def); - VIR_FREE(isDefault); - VIR_FREE(trustGuestRxFilters); =20 - return result; + return ret; } =20 =20 @@ -1352,13 +1320,12 @@ virNetworkForwardNatDefParseXML(const char *network= Name, xmlXPathContextPtr ctxt, virNetworkForwardDefPtr def) { - int ret =3D -1; - xmlNodePtr *natAddrNodes =3D NULL; - xmlNodePtr *natPortNodes =3D NULL; int nNatAddrs, nNatPorts; - char *addrStart =3D NULL; - char *addrEnd =3D NULL; - char *ipv6 =3D NULL; + g_autofree xmlNodePtr *natAddrNodes =3D NULL; + g_autofree xmlNodePtr *natPortNodes =3D NULL; + g_autofree char *addrStart =3D NULL; + g_autofree char *addrEnd =3D NULL; + g_autofree char *ipv6 =3D NULL; VIR_XPATH_NODE_AUTORESTORE(ctxt); =20 ctxt->node =3D node; @@ -1367,7 +1334,7 @@ virNetworkForwardNatDefParseXML(const char *networkNa= me, virReportError(VIR_ERR_XML_ERROR, _("The element can only be used when 'mode' is 'nat' in network %s"), networkName); - goto cleanup; + return -1; } =20 ipv6 =3D virXMLPropString(node, "ipv6"); @@ -1378,10 +1345,9 @@ virNetworkForwardNatDefParseXML(const char *networkN= ame, _("Invalid ipv6 setting '%s' " "in network '%s' NAT"), ipv6, networkName); - goto cleanup; + return -1; } def->natIPv6 =3D natIPv6; - VIR_FREE(ipv6); } =20 /* addresses for SNAT */ @@ -1390,26 +1356,26 @@ virNetworkForwardNatDefParseXML(const char *network= Name, virReportError(VIR_ERR_XML_ERROR, _("invalid
element found in of " "network %s"), networkName); - goto cleanup; + return -1; } else if (nNatAddrs > 1) { virReportError(VIR_ERR_XML_ERROR, _("Only one
element is allowed in i= n " " in network %s"), networkName); - goto cleanup; + return -1; } else if (nNatAddrs =3D=3D 1) { addrStart =3D virXMLPropString(*natAddrNodes, "start"); if (addrStart =3D=3D NULL) { virReportError(VIR_ERR_XML_ERROR, _("missing 'start' attribute in
eleme= nt in in " " in network %s"), networkName); - goto cleanup; + return -1; } addrEnd =3D virXMLPropString(*natAddrNodes, "end"); if (addrEnd =3D=3D NULL) { virReportError(VIR_ERR_XML_ERROR, _("missing 'end' attribute in
element= in in " " in network %s"), networkName); - goto cleanup; + return -1; } } =20 @@ -1417,34 +1383,34 @@ virNetworkForwardNatDefParseXML(const char *network= Name, virReportError(VIR_ERR_XML_ERROR, _("Bad ipv4 start address '%s' in in in " "network '%s'"), addrStart, networkName); - goto cleanup; + return -1; } =20 if (addrEnd && virSocketAddrParse(&def->addr.end, addrEnd, AF_INET) < = 0) { virReportError(VIR_ERR_XML_ERROR, _("Bad ipv4 end address '%s' in in = in " "network '%s'"), addrEnd, networkName); - goto cleanup; + return -1; } =20 if (addrStart && addrEnd) { /* verify that start <=3D 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 i= n " " in network '%s'"), addrStart, networkName); - goto cleanup; + return -1; } if (addrEnd) { virReportError(VIR_ERR_XML_ERROR, _("Only end address '%s' specified in in " " in network '%s'"), addrEnd, networkName); - goto cleanup; + return -1; } } =20 @@ -1454,12 +1420,12 @@ virNetworkForwardNatDefParseXML(const char *network= Name, virReportError(VIR_ERR_XML_ERROR, _("invalid element found in of " "network %s"), networkName); - goto cleanup; + return -1; } else if (nNatPorts > 1) { virReportError(VIR_ERR_XML_ERROR, _("Only one element is allowed in in " " in network %s"), networkName); - goto cleanup; + return -1; } else if (nNatPorts =3D=3D 1) { if (virXPathUInt("string(./port[1]/@start)", ctxt, &def->port.star= t) < 0 || def->port.start > 65535) { @@ -1468,24 +1434,17 @@ virNetworkForwardNatDefParseXML(const char *network= Name, _("Missing or invalid 'start' attribute in " "in in 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 = in " " in in network %s"), networkN= ame); - goto cleanup; + return -1; } } - ret =3D 0; - - cleanup: - VIR_FREE(addrStart); - VIR_FREE(addrEnd); - VIR_FREE(natAddrNodes); - VIR_FREE(natPortNodes); - return ret; + return 0; } =20 =20 @@ -1496,16 +1455,15 @@ virNetworkForwardDefParseXML(const char *networkNam= e, virNetworkForwardDefPtr def) { size_t i, j; - int ret =3D -1; - xmlNodePtr *forwardIfNodes =3D NULL; - xmlNodePtr *forwardPfNodes =3D NULL; - xmlNodePtr *forwardAddrNodes =3D NULL; - xmlNodePtr *forwardNatNodes =3D NULL; int nForwardIfs, nForwardAddrs, nForwardPfs, nForwardNats; - char *forwardDev =3D NULL; - char *forwardManaged =3D NULL; - char *forwardDriverName =3D NULL; - char *type =3D NULL; + g_autofree xmlNodePtr *forwardIfNodes =3D NULL; + g_autofree xmlNodePtr *forwardPfNodes =3D NULL; + g_autofree xmlNodePtr *forwardAddrNodes =3D NULL; + g_autofree xmlNodePtr *forwardNatNodes =3D NULL; + g_autofree char *forwardDev =3D NULL; + g_autofree char *forwardManaged =3D NULL; + g_autofree char *forwardDriverName =3D NULL; + g_autofree char *type =3D NULL; VIR_XPATH_NODE_AUTORESTORE(ctxt); =20 ctxt->node =3D node; @@ -1516,9 +1474,8 @@ virNetworkForwardDefParseXML(const char *networkName, if ((def->type =3D virNetworkForwardTypeFromString(type)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown forwarding type '%s'"), type); - goto cleanup; + return -1; } - VIR_FREE(type); } =20 forwardManaged =3D virXPathString("string(./@managed)", ctxt); @@ -1537,7 +1494,7 @@ virNetworkForwardDefParseXML(const char *networkName, _("Unknown forward " "in network %s"), forwardDriverName, networkName); - goto cleanup; + return -1; } def->driverName =3D driverName; } @@ -1548,7 +1505,7 @@ virNetworkForwardDefParseXML(const char *networkName, virReportError(VIR_ERR_XML_ERROR, _("invalid element found in o= f network %s"), networkName); - goto cleanup; + return -1; } =20 nForwardAddrs =3D virXPathNodeSet("./address", ctxt, &forwardAddrNodes= ); @@ -1556,7 +1513,7 @@ virNetworkForwardDefParseXML(const char *networkName, virReportError(VIR_ERR_XML_ERROR, _("invalid
element found in of = network %s"), networkName); - goto cleanup; + return -1; } =20 nForwardPfs =3D virXPathNodeSet("./pf", ctxt, &forwardPfNodes); @@ -1564,7 +1521,7 @@ virNetworkForwardDefParseXML(const char *networkName, virReportError(VIR_ERR_XML_ERROR, _("invalid element found in of netwo= rk %s"), networkName); - goto cleanup; + return -1; } =20 nForwardNats =3D virXPathNodeSet("./nat", ctxt, &forwardNatNodes); @@ -1572,17 +1529,17 @@ virNetworkForwardDefParseXML(const char *networkNam= e, virReportError(VIR_ERR_XML_ERROR, _("invalid element found in of netw= ork %s"), networkName); - goto cleanup; + return -1; } else if (nForwardNats > 1) { virReportError(VIR_ERR_XML_ERROR, _("Only one element is allowed in o= f network %s"), networkName); - goto cleanup; + return -1; } else if (nForwardNats =3D=3D 1) { if (virNetworkForwardNatDefParseXML(networkName, *forwardNatNodes, ctxt, def) < 0) - goto cleanup; + return -1; } =20 forwardDev =3D virXPathString("string(./@dev)", ctxt); @@ -1591,12 +1548,12 @@ virNetworkForwardDefParseXML(const char *networkNam= e, _("the 'dev' attribute cannot be used whe= n " "
or sub-elements are present " "in network %s")); - goto cleanup; + return -1; } =20 if (nForwardIfs > 0 || forwardDev) { if (VIR_ALLOC_N(def->ifs, MAX(nForwardIfs, 1)) < 0) - goto cleanup; + return -1; =20 if (forwardDev) { def->ifs[0].device.dev =3D forwardDev; @@ -1607,64 +1564,66 @@ virNetworkForwardDefParseXML(const char *networkNam= e, =20 /* parse each */ for (i =3D 0; i < nForwardIfs; i++) { - forwardDev =3D virXMLPropString(forwardIfNodes[i], "dev"); - if (!forwardDev) { + g_autofree char *forwardDevi =3D virXMLPropString(forwardIfNod= es[i], "dev"); + + if (!forwardDevi) { virReportError(VIR_ERR_XML_ERROR, _("Missing required dev attribute in " " element of network= %s"), networkName); - goto cleanup; + return -1; } =20 if ((i =3D=3D 0) && (def->nifs =3D=3D 1)) { /* both and 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, _(" must match firs= t " " in network %= s"), def->ifs[0].device.dev, - forwardDev, networkName); - goto cleanup; + forwardDevi, networkName); + return -1; } - VIR_FREE(forwardDev); continue; } =20 for (j =3D 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; } } =20 - def->ifs[i].device.dev =3D forwardDev; - forwardDev =3D NULL; + def->ifs[i].device.dev =3D forwardDevi; + forwardDevi =3D NULL; def->ifs[i].type =3D VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV; def->nifs++; } =20 } else if (nForwardAddrs > 0) { if (VIR_ALLOC_N(def->ifs, nForwardAddrs) < 0) - goto cleanup; + return -1; =20 for (i =3D 0; i < nForwardAddrs; i++) { - if (!(type =3D virXMLPropString(forwardAddrNodes[i], "type")))= { + g_autofree char *addrType =3D NULL; + + if (!(addrType =3D virXMLPropString(forwardAddrNodes[i], "type= "))) { virReportError(VIR_ERR_XML_ERROR, _("missing address type in network %s"), networkName); - goto cleanup; + return -1; } =20 - if ((def->ifs[i].type =3D virNetworkForwardHostdevDeviceTypeFr= omString(type)) < 0) { + if ((def->ifs[i].type =3D virNetworkForwardHostdevDeviceTypeFr= omString(addrType)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown address type '%s' in network %s"= ), - type, networkName); - goto cleanup; + addrType, networkName); + return -1; } =20 switch (def->ifs[i].type) { @@ -1673,7 +1632,7 @@ virNetworkForwardDefParseXML(const char *networkName, virPCIDeviceAddressPtr addr =3D &def->ifs[i].device.pci; =20 if (virPCIDeviceAddressParseXML(forwardAddrNodes[i], addr)= < 0) - goto cleanup; + return -1; =20 for (j =3D 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++; } =20 @@ -1704,10 +1662,10 @@ virNetworkForwardDefParseXML(const char *networkNam= e, virReportError(VIR_ERR_XML_ERROR, _("Only one element is allowed in of= network %s"), networkName); - goto cleanup; + return -1; } else if (nForwardPfs =3D=3D 1) { if (VIR_ALLOC_N(def->pfs, nForwardPfs) < 0) - goto cleanup; + return -1; =20 forwardDev =3D virXMLPropString(*forwardPfNodes, "dev"); if (!forwardDev) { @@ -1715,7 +1673,7 @@ virNetworkForwardDefParseXML(const char *networkName, _("Missing required dev attribute " "in element of network '%s'"), networkName); - goto cleanup; + return -1; } =20 def->pfs->dev =3D forwardDev; @@ -1723,17 +1681,7 @@ virNetworkForwardDefParseXML(const char *networkName, def->npfs++; } =20 - ret =3D 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; } =20 =20 @@ -1741,18 +1689,23 @@ virNetworkDefPtr virNetworkDefParseXML(xmlXPathContextPtr ctxt, virNetworkXMLOptionPtr xmlopt) { - virNetworkDefPtr def; - char *tmp =3D NULL; - char *stp =3D NULL; - xmlNodePtr *ipNodes =3D NULL; - xmlNodePtr *routeNodes =3D NULL; - xmlNodePtr *portGroupNodes =3D NULL; + g_autoptr(virNetworkDef) def =3D NULL; + g_autofree char *uuid =3D NULL; + g_autofree char *localOnly =3D NULL; + g_autofree char *stp =3D NULL; + g_autofree char *stpDelay =3D NULL; + g_autofree char *macTableManager =3D NULL; + g_autofree char *macAddr =3D NULL; + g_autofree char *mtuSize =3D NULL; + g_autofree xmlNodePtr *ipNodes =3D NULL; + g_autofree xmlNodePtr *routeNodes =3D NULL; + g_autofree xmlNodePtr *portGroupNodes =3D NULL; int nips, nPortGroups, nRoutes; xmlNodePtr dnsNode =3D NULL; xmlNodePtr virtPortNode =3D NULL; xmlNodePtr forwardNode =3D NULL; - char *ipv6nogwStr =3D NULL; - char *trustGuestRxFilters =3D NULL; + g_autofree char *ipv6nogwStr =3D NULL; + g_autofree char *trustGuestRxFilters =3D NULL; VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr bandwidthNode =3D NULL; xmlNodePtr vlanNode; @@ -1765,27 +1718,26 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, def->name =3D virXPathString("string(./name[1])", ctxt); if (!def->name) { virReportError(VIR_ERR_NO_NAME, NULL); - goto error; + return NULL; } =20 if (virXMLCheckIllegalChars("name", def->name, "/") < 0) - goto error; + return NULL; =20 /* Extract network uuid */ - tmp =3D virXPathString("string(./uuid[1])", ctxt); - if (!tmp) { + uuid =3D 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 =3D true; } =20 @@ -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); } =20 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); } =20 /* Parse network domain information */ def->domain =3D virXPathString("string(./domain[1]/@name)", ctxt); - tmp =3D virXPathString("string(./domain[1]/@localOnly)", ctxt); - if (tmp) { - def->domainLocalOnly =3D virTristateBoolTypeFromString(tmp); + localOnly =3D virXPathString("string(./domain[1]/@localOnly)", ctxt); + if (localOnly) { + def->domainLocalOnly =3D virTristateBoolTypeFromString(localOnly); if (def->domainLocalOnly <=3D 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); } =20 if ((bandwidthNode =3D virXPathNode("./bandwidth", ctxt)) && virNetDevBandwidthParse(&def->bandwidth, NULL, bandwidthNode, fals= e) < 0) - goto error; + return NULL; =20 vlanNode =3D virXPathNode("./vlan", ctxt); if (vlanNode && virNetDevVlanParse(vlanNode, ctxt, &def->vlan) < 0) - goto error; + return NULL; =20 if (virNetworkPortOptionsParseXML(ctxt, &def->isolatedPort) < 0) - goto error; + return NULL; =20 /* Parse bridge information */ def->bridge =3D virXPathString("string(./bridge[1]/@name)", ctxt); @@ -1849,124 +1798,118 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, stp =3D virXPathString("string(./bridge[1]/@stp)", ctxt); def->stp =3D (stp && STREQ(stp, "off")) ? false : true; =20 - tmp =3D virXPathString("string(./bridge[1]/@delay)", ctxt); - if (tmp) { - if (virStrToLong_ulp(tmp, NULL, 10, &def->delay) < 0) { + stpDelay =3D 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); =20 - tmp =3D virXPathString("string(./bridge[1]/@macTableManager)", ctxt); - if (tmp) { + macTableManager =3D virXPathString("string(./bridge[1]/@macTableManage= r)", ctxt); + if (macTableManager) { if ((def->macTableManager - =3D virNetworkBridgeMACTableManagerTypeFromString(tmp)) <=3D = 0) { + =3D virNetworkBridgeMACTableManagerTypeFromString(macTableMan= ager)) <=3D 0) { virReportError(VIR_ERR_XML_ERROR, _("Invalid macTableManager setting '%s' " - "in network '%s'"), tmp, def->name); - goto error; + "in network '%s'"), macTableManager, def->nam= e); + return NULL; } - VIR_FREE(tmp); } =20 - tmp =3D virXPathString("string(./mac[1]/@address)", ctxt); - if (tmp) { - if (virMacAddrParse(tmp, &def->mac) < 0) { + macAddr =3D 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 =3D true; } =20 - tmp =3D virXPathString("string(./mtu/@size)", ctxt); - if (tmp) { - if (virStrToLong_ui(tmp, NULL, 10, &def->mtu) < 0) { + mtuSize =3D 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); =20 dnsNode =3D virXPathNode("./dns", ctxt); if (dnsNode !=3D NULL && virNetworkDNSDefParseXML(def->name, dnsNode, ctxt, &def->dns) < 0)= { - goto error; + return NULL; } =20 virtPortNode =3D virXPathNode("./virtualport", ctxt); if (virtPortNode && (!(def->virtPortProfile =3D virNetDevVPortProfileParse(virtPortNod= e, VIR_VPORT_XML= _REQUIRE_TYPE)))) { - goto error; + return NULL; } =20 nPortGroups =3D virXPathNodeSet("./portgroup", ctxt, &portGroupNodes); if (nPortGroups < 0) - goto error; + return NULL; =20 if (nPortGroups > 0) { size_t i; =20 /* allocate array to hold all the portgroups */ if (VIR_ALLOC_N(def->portGroups, nPortGroups) < 0) - goto error; + return NULL; /* parse each portgroup */ for (i =3D 0; i < nPortGroups; i++) { if (virNetworkPortGroupParseXML(&def->portGroups[i], portGroupNodes[i], ctxt) < 0) - goto error; + return NULL; def->nPortGroups++; } } - VIR_FREE(portGroupNodes); =20 nips =3D virXPathNodeSet("./ip", ctxt, &ipNodes); if (nips < 0) - goto error; + return NULL; =20 if (nips > 0) { size_t i; =20 /* allocate array to hold all the addrs */ if (VIR_ALLOC_N(def->ips, nips) < 0) - goto error; + return NULL; /* parse each addr */ for (i =3D 0; i < nips; i++) { if (virNetworkIPDefParseXML(def->name, ipNodes[i], ctxt, &def->ips[i]) < 0) - goto error; + return NULL; def->nips++; } } - VIR_FREE(ipNodes); =20 nRoutes =3D virXPathNodeSet("./route", ctxt, &routeNodes); if (nRoutes < 0) - goto error; + return NULL; =20 if (nRoutes > 0) { size_t i; =20 /* 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 =3D 0; i < nRoutes; i++) { virNetDevIPRoutePtr route =3D NULL; @@ -1974,7 +1917,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, if (!(route =3D virNetDevIPRouteParseXML(def->name, routeNodes[i], ctxt))) - goto error; + return NULL; def->routes[i] =3D route; def->nroutes++; } @@ -2011,21 +1954,19 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, } } if (!addrMatch) { - char *gw =3D virSocketAddrFormat(gateway); + g_autofree char *gw =3D virSocketAddrFormat(gateway); virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unreachable static route gateway '%s' sp= ecified for network '%s'"), gw, def->name); - VIR_FREE(gw); - goto error; + return NULL; } } } - VIR_FREE(routeNodes); =20 forwardNode =3D virXPathNode("./forward", ctxt); if (forwardNode && virNetworkForwardDefParseXML(def->name, forwardNode, ctxt, &def->f= orward) < 0) { - goto error; + return NULL; } =20 /* 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; } =20 if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN && def->forw= ard.nifs) { @@ -2067,7 +2008,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, "network '%s' with forward mode=3D'%s'"), def->name, virNetworkForwardTypeToString(def->forward.type= )); - goto error; + return NULL; } break; =20 @@ -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; =20 @@ -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; =20 case VIR_NETWORK_FORWARD_LAST: default: virReportEnumRangeError(virNetworkForwardType, def->forward.type); - goto error; + return NULL; } =20 - 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; =20 case VIR_NETWORK_FORWARD_LAST: default: virReportEnumRangeError(virNetworkForwardType, def->forward.ty= pe); - goto error; + return NULL; } } =20 @@ -2165,23 +2104,12 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, def->ns =3D 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; } =20 - 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); } =20 =20 @@ -2190,14 +2118,12 @@ virNetworkDefParse(const char *xmlStr, const char *filename, virNetworkXMLOptionPtr xmlopt) { - xmlDocPtr xml; + g_autoptr(xmlDoc) xml =3D NULL; virNetworkDefPtr def =3D NULL; int keepBlanksDefault =3D xmlKeepBlanksDefault(0); =20 - if ((xml =3D virXMLParse(filename, xmlStr, _("(network_definition)")))= ) { + if ((xml =3D virXMLParse(filename, xmlStr, _("(network_definition)")))) def =3D virNetworkDefParseNode(xml, xmlDocGetRootElement(xml), xml= opt); - xmlFreeDoc(xml); - } =20 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 =3D virSocketAddrFormat(&def->forwarders[i].addr); + g_autofree char *addr =3D virSocketAddrFormat(&def->forwarders= [i].addr); =20 - if (!addr) - return -1; + if (!addr) + return -1; =20 - virBufferAsprintf(buf, " addr=3D'%s'", addr); - VIR_FREE(addr); + virBufferAsprintf(buf, " addr=3D'%s'", addr); } virBufferAddLit(buf, "/>\n"); } @@ -2331,7 +2256,7 @@ virNetworkDNSDefFormat(virBufferPtr buf, =20 if (def->nhosts) { for (i =3D 0; i < def->nhosts; i++) { - char *ip =3D virSocketAddrFormat(&def->hosts[i].ip); + g_autofree char *ip =3D virSocketAddrFormat(&def->hosts[i].ip); =20 virBufferAsprintf(buf, "\n", ip); virBufferAdjustIndent(buf, 2); @@ -2341,7 +2266,6 @@ virNetworkDNSDefFormat(virBufferPtr buf, =20 virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); - VIR_FREE(ip); } } virBufferAdjustIndent(buf, -2); @@ -2359,18 +2283,16 @@ virNetworkIPDefFormat(virBufferPtr buf, if (def->family) virBufferAsprintf(buf, " family=3D'%s'", def->family); if (VIR_SOCKET_ADDR_VALID(&def->address)) { - char *addr =3D virSocketAddrFormat(&def->address); + g_autofree char *addr =3D virSocketAddrFormat(&def->address); if (!addr) return -1; virBufferAsprintf(buf, " address=3D'%s'", addr); - VIR_FREE(addr); } if (VIR_SOCKET_ADDR_VALID(&def->netmask)) { - char *addr =3D virSocketAddrFormat(&def->netmask); + g_autofree char *addr =3D virSocketAddrFormat(&def->netmask); if (!addr) return -1; virBufferAsprintf(buf, " netmask=3D'%s'", addr); - VIR_FREE(addr); } if (def->prefix > 0) virBufferAsprintf(buf, " prefix=3D'%u'", def->prefix); @@ -2395,15 +2317,15 @@ virNetworkIPDefFormat(virBufferPtr buf, for (i =3D 0; i < def->nranges; i++) { virSocketAddrRange addr =3D def->ranges[i].addr; virNetworkDHCPLeaseTimeDefPtr lease =3D def->ranges[i].lease; + g_autofree char *saddr =3D NULL; + g_autofree char *eaddr =3D NULL; =20 - char *saddr =3D virSocketAddrFormat(&addr.start); - if (!saddr) + if (!(saddr =3D virSocketAddrFormat(&addr.start))) return -1; - char *eaddr =3D virSocketAddrFormat(&addr.end); - if (!eaddr) { - VIR_FREE(saddr); + + if (!(eaddr =3D virSocketAddrFormat(&addr.end))) return -1; - } + virBufferAsprintf(buf, "\n"); } - VIR_FREE(saddr); - VIR_FREE(eaddr); } for (i =3D 0; i < def->nhosts; i++) { virNetworkDHCPLeaseTimeDefPtr lease =3D def->hosts[i].lease; @@ -2434,11 +2354,11 @@ virNetworkIPDefFormat(virBufferPtr buf, if (def->hosts[i].name) virBufferAsprintf(buf, " name=3D'%s'", def->hosts[i].name); if (VIR_SOCKET_ADDR_VALID(&def->hosts[i].ip)) { - char *ipaddr =3D virSocketAddrFormat(&def->hosts[i].ip); + g_autofree char *ipaddr =3D virSocketAddrFormat(&def->host= s[i].ip); if (!ipaddr) return -1; + virBufferAsprintf(buf, " ip=3D'%s'", ipaddr); - VIR_FREE(ipaddr); } if (lease) { virBufferAddLit(buf, ">\n"); @@ -2460,11 +2380,11 @@ virNetworkIPDefFormat(virBufferPtr buf, virBufferEscapeString(buf, "bootfile); if (VIR_SOCKET_ADDR_VALID(&def->bootserver)) { - char *ipaddr =3D virSocketAddrFormat(&def->bootserver); + g_autofree char *ipaddr =3D virSocketAddrFormat(&def->boot= server); if (!ipaddr) return -1; + virBufferEscapeString(buf, " server=3D'%s'", ipaddr); - VIR_FREE(ipaddr); } virBufferAddLit(buf, "/>\n"); =20 @@ -2515,20 +2435,19 @@ static int virNetworkForwardNatDefFormat(virBufferPtr buf, const virNetworkForwardDef *fwd) { - char *addrStart =3D NULL; - char *addrEnd =3D NULL; - int ret =3D -1; + g_autofree char *addrStart =3D NULL; + g_autofree char *addrEnd =3D NULL; =20 if (VIR_SOCKET_ADDR_VALID(&fwd->addr.start)) { addrStart =3D virSocketAddrFormat(&fwd->addr.start); if (!addrStart) - goto cleanup; + return -1; } =20 if (VIR_SOCKET_ADDR_VALID(&fwd->addr.end)) { addrEnd =3D virSocketAddrFormat(&fwd->addr.end); if (!addrEnd) - goto cleanup; + return -1; } =20 if (!addrEnd && !addrStart && !fwd->port.start && !fwd->port.end && !f= wd->natIPv6) @@ -2561,12 +2480,7 @@ virNetworkForwardNatDefFormat(virBufferPtr buf, =20 virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); - ret =3D 0; - - cleanup: - VIR_FREE(addrStart); - VIR_FREE(addrEnd); - return ret; + return 0; } =20 =20 @@ -2856,27 +2770,22 @@ virNetworkSaveXML(const char *configDir, const char *xml) { char uuidstr[VIR_UUID_STRING_BUFLEN]; - char *configFile =3D NULL; - int ret =3D -1; + g_autofree char *configFile =3D NULL; =20 if ((configFile =3D virNetworkConfigFile(configDir, def->name)) =3D=3D= NULL) - goto cleanup; + return -1; =20 if (virFileMakePath(configDir) < 0) { virReportSystemError(errno, _("cannot create config directory '%s'"), configDir); - goto cleanup; + return -1; } =20 virUUIDFormat(def->uuid, uuidstr); - ret =3D 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); } =20 =20 @@ -2885,19 +2794,15 @@ virNetworkSaveConfig(const char *configDir, virNetworkDefPtr def, virNetworkXMLOptionPtr xmlopt) { - int ret =3D -1; - char *xml; + g_autofree char *xml =3D NULL; =20 if (!(xml =3D virNetworkDefFormat(def, xmlopt, VIR_NETWORK_XML_INACTIV= E))) - goto cleanup; + return -1; =20 if (virNetworkSaveXML(configDir, def, xml)) - goto cleanup; + return -1; =20 - ret =3D 0; - cleanup: - VIR_FREE(xml); - return ret; + return 0; } =20 =20 @@ -3113,14 +3018,13 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, } =20 if (i =3D=3D ipdef->nhosts) { - char *ip =3D virSocketAddrFormat(&host.ip); + g_autofree char *ip =3D virSocketAddrFormat(&host.ip); virReportError(VIR_ERR_OPERATION_INVALID, _("couldn't locate an existing dhcp host entry = with " "\"mac=3D'%s'\" \"name=3D'%s'\" \"ip=3D'%s'\"= in" " network '%s'"), host.mac ? host.mac : _("unknown"), host.name, ip ? ip : _("unknown"), def->name); - VIR_FREE(ip); goto cleanup; } =20 @@ -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 =3D virSocketAddrFormat(&host.ip); + g_autofree char *ip =3D virSocketAddrFormat(&host.ip); =20 virReportError(VIR_ERR_OPERATION_INVALID, _("there is an existing dhcp host entry in " @@ -3154,7 +3058,6 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, "\"\""), 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; =20 if (i < ipdef->nranges) { - char *startip =3D virSocketAddrFormat(&range.addr.start); - char *endip =3D virSocketAddrFormat(&range.addr.end); + g_autofree char *startip =3D virSocketAddrFormat(&range.addr.s= tart); + g_autofree char *endip =3D virSocketAddrFormat(&range.addr.end= ); =20 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; } =20 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; =20 void virNetworkDefFree(virNetworkDefPtr def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNetworkDef, virNetworkDefFree); =20 enum { VIR_NETWORK_OBJ_LIST_ADD_LIVE =3D (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(virXPathContextNodeSav= e, virXPathContextNodeRes =20 G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlDoc, xmlFreeDoc); G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlXPathContext, xmlXPathFreeContext); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlBuffer, xmlBufferFree); =20 typedef int (*virXMLNamespaceParse)(xmlXPathContextPtr ctxt, void **nsdata= ); typedef void (*virXMLNamespaceFree)(void *nsdata); --=20 2.25.4