From nobody Mon Feb 9 04:45:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1568636260; cv=none; d=zoho.com; s=zohoarc; b=PTZZDLjXx5zsdX+jhnZJAC0yLcub/5qnfqBbAQcL9UKqDDLI0j0QjbZfcGCssh9/zQ6t+pToTFwqMdubFPflRsw8n1j5sAQxCYGD/r/znbCj0/XnDSQW3O0UvIpg+oKKI6hQtDKRskfc2bLwjEIkfpxPjI3GL1LHrrHVdgB9Uhg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1568636260; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Yy+VF7MLN7R9SLmfC0J24qo3Wmtwr9KgvskLsJyczDQ=; b=d5IOZZ5nconV0if2QMyNliauQcuHtqA0Te+SucKZndLz9L0mMK6wBR+ri0Q/5c1GNnzLYiCbn4iBJ2HxsBU7SjccJXgHVXWjfJ0sAs8s9ceH5YeoXQnLPu8HbJVShlHA3UCy3tHn/xt+QdZucElMDAJfkal3zOO/lg3x11Un8UU= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 156863626064726.142531356029394; Mon, 16 Sep 2019 05:17:40 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BCC9C2A09A2; Mon, 16 Sep 2019 12:17:38 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 97EEC19D7A; Mon, 16 Sep 2019 12:17:38 +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 549CF1808876; Mon, 16 Sep 2019 12:17:38 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x8GCHMsf024507 for ; Mon, 16 Sep 2019 08:17:22 -0400 Received: by smtp.corp.redhat.com (Postfix) id 23E6F9D51; Mon, 16 Sep 2019 12:17:22 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id A14D0196AE for ; Mon, 16 Sep 2019 12:17:21 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Mon, 16 Sep 2019 14:17:06 +0200 Message-Id: <7cdbf65fe162dd23810dac48b89d40e761e0d9db.1568636165.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/9] conf: Refactor resource cleanup in virDomainDeviceDefParse 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: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Mon, 16 Sep 2019 12:17:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Use VIR_AUTO* helpers to get rid of the convoluted cleanup path. Signed-off-by: Peter Krempa Reviewed-by: Jiri Denemark --- src/conf/domain_conf.c | 73 +++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 40 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e5e3f31f76..2fe591c328 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16330,19 +16330,19 @@ virDomainDeviceDefParse(const char *xmlStr, void *parseOpaque, unsigned int flags) { - xmlDocPtr xml; + VIR_AUTOPTR(xmlDoc) xml =3D NULL; xmlNodePtr node; - xmlXPathContextPtr ctxt =3D NULL; - virDomainDeviceDefPtr dev =3D NULL; + VIR_AUTOPTR(xmlXPathContext) ctxt =3D NULL; + VIR_AUTOFREE(virDomainDeviceDefPtr) dev =3D NULL; char *netprefix; if (!(xml =3D virXMLParseStringCtxt(xmlStr, _("(device_definition)"), = &ctxt))) - goto error; + return NULL; node =3D ctxt->node; if (VIR_ALLOC(dev) < 0) - goto error; + return NULL; if ((dev->type =3D virDomainDeviceTypeFromString((const char *) node->= name)) < 0) { /* Some crazy mapping of serial, parallel, console and channel to @@ -16356,7 +16356,7 @@ virDomainDeviceDefParse(const char *xmlStr, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown device type '%s'"), node->name); - goto error; + return NULL; } } @@ -16366,71 +16366,71 @@ virDomainDeviceDefParse(const char *xmlStr, def->seclabels, def->nseclabels, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_LEASE: if (!(dev->data.lease =3D virDomainLeaseDefParseXML(node))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_FS: if (!(dev->data.fs =3D virDomainFSDefParseXML(xmlopt, node, ctxt, = flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_NET: netprefix =3D caps->host.netprefix; if (!(dev->data.net =3D virDomainNetDefParseXML(xmlopt, node, ctxt, netprefix, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_INPUT: if (!(dev->data.input =3D virDomainInputDefParseXML(xmlopt, def, n= ode, ctxt, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_SOUND: if (!(dev->data.sound =3D virDomainSoundDefParseXML(xmlopt, node, ctxt, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_WATCHDOG: if (!(dev->data.watchdog =3D virDomainWatchdogDefParseXML(xmlopt, node, flag= s))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_VIDEO: if (!(dev->data.video =3D virDomainVideoDefParseXML(xmlopt, node, ctxt, def, flags= ))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_HOSTDEV: if (!(dev->data.hostdev =3D virDomainHostdevDefParseXML(xmlopt, no= de, ctxt, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_CONTROLLER: if (!(dev->data.controller =3D virDomainControllerDefParseXML(xmlo= pt, node, ctxt, = flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_GRAPHICS: if (!(dev->data.graphics =3D virDomainGraphicsDefParseXML(xmlopt, = node, ctxt, flag= s))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_HUB: if (!(dev->data.hub =3D virDomainHubDefParseXML(xmlopt, node, flag= s))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_REDIRDEV: if (!(dev->data.redirdev =3D virDomainRedirdevDefParseXML(xmlopt, = node, ctxt, flag= s))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_RNG: if (!(dev->data.rng =3D virDomainRNGDefParseXML(xmlopt, node, ctxt, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_CHR: if (!(dev->data.chr =3D virDomainChrDefParseXML(xmlopt, @@ -16439,50 +16439,50 @@ virDomainDeviceDefParse(const char *xmlStr, def->seclabels, def->nseclabels, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_SMARTCARD: if (!(dev->data.smartcard =3D virDomainSmartcardDefParseXML(xmlopt= , node, ctxt, fl= ags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_MEMBALLOON: if (!(dev->data.memballoon =3D virDomainMemballoonDefParseXML(xmlo= pt, node, ctxt, flags)= )) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_NVRAM: if (!(dev->data.nvram =3D virDomainNVRAMDefParseXML(xmlopt, node, = flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_SHMEM: if (!(dev->data.shmem =3D virDomainShmemDefParseXML(xmlopt, node, ctxt, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_TPM: if (!(dev->data.tpm =3D virDomainTPMDefParseXML(xmlopt, node, ctxt= , flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_PANIC: if (!(dev->data.panic =3D virDomainPanicDefParseXML(xmlopt, node, = flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_MEMORY: if (!(dev->data.memory =3D virDomainMemoryDefParseXML(xmlopt, node, ctxt, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_IOMMU: if (!(dev->data.iommu =3D virDomainIOMMUDefParseXML(node, ctxt))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_VSOCK: if (!(dev->data.vsock =3D virDomainVsockDefParseXML(xmlopt, node, = ctxt, flags))) - goto error; + return NULL; break; case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: @@ -16492,20 +16492,13 @@ virDomainDeviceDefParse(const char *xmlStr, /* callback to fill driver specific device aspects */ if (virDomainDeviceDefPostParseOne(dev, def, caps, flags, xmlopt, parseOpaque) < 0) - goto error; + return NULL; /* validate the configuration */ if (virDomainDeviceDefValidate(dev, def, flags, xmlopt) < 0) - goto error; - - cleanup: - xmlFreeDoc(xml); - xmlXPathFreeContext(ctxt); - return dev; + return NULL; - error: - VIR_FREE(dev); - goto cleanup; + VIR_RETURN_PTR(dev); } --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list