From nobody Sun Feb 8 07:52:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1606245692; cv=none; d=zohomail.com; s=zohoarc; b=Brrd53KVQ8lHtV5bGz3Ou19YDJhnBRyhuaS5qu4J9urOYuVr2lPo4Co5Pf2f6Q1zqctxr7Mf8KlcPFjJ0K8EHIndv2ocUC/m56MBdn+aWmxc63qTSkZjgZ8Mh56W3PSXKd66ER0Ou5PEi3EKcTgI8/X6bLoic0UdnBbr3JAwg24= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606245692; h=Content-Type:Content-Transfer-Encoding:Cc: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; bh=hH3bLr0h6duY0xC/xi8p+HuPRMfhoaRAPv+aJKT9RXo=; b=aDaF87ukBAPP7evj9Y7w/oUBorka4iMf7Kz1Gm3ZWELQ1NBYAoqN+fbZZvOo7+wAfAZC3dU001InAPq+yAKCFKOuQAMYwpoOaMTPtvmAUDwgSW0mBAGkjrLdiPyZlc9pwdDo8VrOG4dshyhWtUtg7k72j9e4S1xGoW3MVfhuNbg= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1606245692746415.32103814315826; Tue, 24 Nov 2020 11:21:32 -0800 (PST) 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-205-k4YYBOB7OBasFl6JyfNtvg-1; Tue, 24 Nov 2020 14:21:29 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 579D7100A242; Tue, 24 Nov 2020 19:21:21 +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 305DA1001281; Tue, 24 Nov 2020 19:21:21 +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 EBB181809CB2; Tue, 24 Nov 2020 19:21:20 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0AOJLDu8004149 for ; Tue, 24 Nov 2020 14:21:13 -0500 Received: by smtp.corp.redhat.com (Postfix) id 4C2CB2166B2A; Tue, 24 Nov 2020 19:21:13 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 46F5F2166B27 for ; Tue, 24 Nov 2020 19:21:13 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2E7F785828A for ; Tue, 24 Nov 2020 19:21:13 +0000 (UTC) Received: from mail-qv1-f47.google.com (mail-qv1-f47.google.com [209.85.219.47]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-482-uUzZBEX9MpqqKFtXu562Iw-1; Tue, 24 Nov 2020 14:21:10 -0500 Received: by mail-qv1-f47.google.com with SMTP id 9so6977635qvk.9 for ; Tue, 24 Nov 2020 11:21:10 -0800 (PST) Received: from rekt.redhat.com ([2804:431:c7c7:d88a:482:7c39:5cca:96f6]) by smtp.gmail.com with ESMTPSA id l79sm88837qke.1.2020.11.24.11.21.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Nov 2020 11:21:09 -0800 (PST) X-MC-Unique: k4YYBOB7OBasFl6JyfNtvg-1 X-MC-Unique: uUzZBEX9MpqqKFtXu562Iw-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hH3bLr0h6duY0xC/xi8p+HuPRMfhoaRAPv+aJKT9RXo=; b=PwEKRSKIy5I01WLkec8XokYgzKGu3ggJvKTN9OxBYzPfXH7CeMxs+vWrOJoVAmWeXn UIE1HOXzkp0bYZRWpMyC7CYh2EHRwmomHZTMKC2lINvRi9Pxv3oxO+Co2nOcomR9+WYr QH7FeoNvSS1hAocbFuwuWNqqqomILO6OdC/Zb0hvlhx1HMN+j2LN3ZX+xGz4JBn+u6tH PCncBmpmkxv/gGbqsPrC/P6t+9WObQI1Z4oy8jYkorEeZgAAX084OtqglUMC2USFgKUK jgjWeHofVqYdco/UrntWRxI6q5zCmFsXeohXWk4uH3r+QzU+8qrOF7k2EjVSYkCXt1/B am9A== X-Gm-Message-State: AOAM533jjC2VYrj+AUAiqoP5zLRarNwX7qtycjvt4eaH3+BPaPPNKsz8 bRWaUMmrMcPNfikm5lilkYy5IvaQDY0= X-Google-Smtp-Source: ABdhPJwlGyObNQOw/XZmtRMj2OXLD4tgwXvbkY6hJmWtCcsjmbQn05HM8OHpUWfa0J4KeF3xH4yjMQ== X-Received: by 2002:ad4:4743:: with SMTP id c3mr6604649qvx.31.1606245669982; Tue, 24 Nov 2020 11:21:09 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 10/21] domain_conf: modernize virDomainDiskDefParseXML() Date: Tue, 24 Nov 2020 16:20:24 -0300 Message-Id: <20201124192035.2343063-11-danielhb413@gmail.com> In-Reply-To: <20201124192035.2343063-1-danielhb413@gmail.com> References: <20201124192035.2343063-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Register an AUTOPTR_CLEANUP_FUNC for virDomainDiskDefPtr, then use g_autoptr() in virDomainDiskDef and virStorageEncryption pointers to get rid of the 'cleanup' and 'error' labels. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 95 +++++++++++++++++++----------------------- src/conf/domain_conf.h | 1 + 2 files changed, 45 insertions(+), 51 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index a8d82f4733..e21f353595 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -10522,11 +10522,11 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xm= lopt, xmlXPathContextPtr ctxt, unsigned int flags) { - virDomainDiskDefPtr def; + g_autoptr(virDomainDiskDef) def =3D NULL; xmlNodePtr cur; VIR_XPATH_NODE_AUTORESTORE(ctxt) bool source =3D false; - virStorageEncryptionPtr encryption =3D NULL; + g_autoptr(virStorageEncryption) encryption =3D NULL; g_autoptr(virStorageAuthDef) authdef =3D NULL; g_autofree char *tmp =3D NULL; g_autofree char *snapshot =3D NULL; @@ -10558,7 +10558,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, (def->src->type =3D virStorageTypeFromString(tmp)) <=3D 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown disk type '%s'"), tmp); - goto error; + return NULL; } VIR_FREE(tmp); =20 @@ -10566,7 +10566,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, (def->device =3D virDomainDiskDeviceTypeFromString(tmp)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown disk device '%s'"), tmp); - goto error; + return NULL; } VIR_FREE(tmp); =20 @@ -10574,7 +10574,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, (def->model =3D virDomainDiskModelTypeFromString(tmp)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown disk model '%s'"), tmp); - goto error; + return NULL; } VIR_FREE(tmp); =20 @@ -10589,7 +10589,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, =20 if (!source && virXMLNodeNameEqual(cur, "source")) { if (virDomainStorageSourceParse(cur, ctxt, def->src, flags, xm= lopt) < 0) - goto error; + return NULL; =20 source =3D true; =20 @@ -10599,7 +10599,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, (tmp =3D virXMLPropString(cur, "index")) && virStrToLong_uip(tmp, NULL, 10, &def->src->id) < 0) { virReportError(VIR_ERR_XML_ERROR, _("invalid disk index '%= s'"), tmp); - goto error; + return NULL; } VIR_FREE(tmp); } else if (!target && @@ -10619,7 +10619,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, domain_name =3D virXMLPropString(cur, "name"); } else if (virXMLNodeNameEqual(cur, "geometry")) { if (virDomainDiskDefGeometryParse(def, cur) < 0) - goto error; + return NULL; } else if (virXMLNodeNameEqual(cur, "blockio")) { logical_block_size =3D virXMLPropString(cur, "logical_block_size"); @@ -10629,7 +10629,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, virReportError(VIR_ERR_INTERNAL_ERROR, _("invalid logical block size '%s'"), logical_block_size); - goto error; + return NULL; } physical_block_size =3D virXMLPropString(cur, "physical_block_size"); @@ -10639,28 +10639,28 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xm= lopt, virReportError(VIR_ERR_INTERNAL_ERROR, _("invalid physical block size '%s'"), physical_block_size); - goto error; + return NULL; } } else if (!virDomainDiskGetDriver(def) && virXMLNodeNameEqual(cur, "driver")) { if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0) - goto error; + return NULL; =20 if (virDomainDiskDefDriverParseXML(def, cur) < 0) - goto error; + return NULL; } else if (!def->mirror && virXMLNodeNameEqual(cur, "mirror") && !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)) { if (virDomainDiskDefMirrorParse(def, cur, ctxt, flags, xmlopt)= < 0) - goto error; + return NULL; } else if (!authdef && virXMLNodeNameEqual(cur, "auth")) { if (!(authdef =3D virStorageAuthDefParse(cur, ctxt))) - goto error; + return NULL; def->diskElementAuth =3D true; } else if (virXMLNodeNameEqual(cur, "iotune")) { if (virDomainDiskDefIotuneParse(def, ctxt) < 0) - goto error; + return NULL; } else if (virXMLNodeNameEqual(cur, "readonly")) { def->src->readonly =3D true; } else if (virXMLNodeNameEqual(cur, "shareable")) { @@ -10670,52 +10670,52 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xm= lopt, } else if (!encryption && virXMLNodeNameEqual(cur, "encryption")) { if (!(encryption =3D virStorageEncryptionParseNode(cur, ctxt))) - goto error; + return NULL; =20 def->diskElementEnc =3D true; =20 } else if (!serial && virXMLNodeNameEqual(cur, "serial")) { if (!(serial =3D virXMLNodeContentString(cur))) - goto error; + return NULL; } else if (!wwn && virXMLNodeNameEqual(cur, "wwn")) { if (!(wwn =3D virXMLNodeContentString(cur))) - goto error; + return NULL; =20 if (!virValidateWWN(wwn)) - goto error; + return NULL; } else if (!vendor && virXMLNodeNameEqual(cur, "vendor")) { if (!(vendor =3D virXMLNodeContentString(cur))) - goto error; + return NULL; =20 if (strlen(vendor) > VENDOR_LEN) { virReportError(VIR_ERR_XML_ERROR, "%s", _("disk vendor is more than 8 characters")); - goto error; + return NULL; } =20 if (!virStringIsPrintable(vendor)) { virReportError(VIR_ERR_XML_ERROR, "%s", _("disk vendor is not printable string")); - goto error; + return NULL; } } else if (!product && virXMLNodeNameEqual(cur, "product")) { if (!(product =3D virXMLNodeContentString(cur))) - goto error; + return NULL; =20 if (strlen(product) > PRODUCT_LEN) { virReportError(VIR_ERR_XML_ERROR, "%s", _("disk product is more than 16 characters"= )); - goto error; + return NULL; } =20 if (!virStringIsPrintable(product)) { virReportError(VIR_ERR_XML_ERROR, "%s", _("disk product is not printable string")); - goto error; + return NULL; } } else if (virXMLNodeNameEqual(cur, "boot")) { /* boot is parsed as part of virDomainDeviceInfoParseXML */ @@ -10741,7 +10741,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, (flags & VIR_DOMAIN_DEF_PARSE_DISK_SOURCE))) { virReportError(VIR_ERR_NO_SOURCE, target ? "%s" : NULL, target); - goto error; + return NULL; } =20 if (!target && !(flags & VIR_DOMAIN_DEF_PARSE_DISK_SOURCE)) { @@ -10754,7 +10754,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, } else { virReportError(VIR_ERR_NO_TARGET, def->src->path ? "%s" : NULL= , def->src->path); } - goto error; + return NULL; } =20 if (!(flags & VIR_DOMAIN_DEF_PARSE_DISK_SOURCE)) { @@ -10762,7 +10762,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, !STRPREFIX(target, "fd")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid floppy device name: %s"), target); - goto error; + return NULL; } =20 /* Force CDROM to be listed as read only */ @@ -10778,7 +10778,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, !STRPREFIX((const char *)target, "ubd")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid harddisk device name: %s"), target); - goto error; + return NULL; } } =20 @@ -10788,7 +10788,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown disk snapshot setting '%s'"), snapshot); - goto error; + return NULL; } } else if (def->src->readonly) { def->snapshot =3D VIR_DOMAIN_SNAPSHOT_LOCATION_NONE; @@ -10799,7 +10799,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, virReportError(VIR_ERR_XML_ERROR, _("unknown disk rawio setting '%s'"), rawio); - goto error; + return NULL; } } =20 @@ -10807,7 +10807,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, if ((def->sgio =3D virDomainDeviceSGIOTypeFromString(sgio)) <=3D 0= ) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown disk sgio mode '%s'"), sgio); - goto error; + return NULL; } } =20 @@ -10815,7 +10815,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, if ((def->bus =3D virDomainDiskBusTypeFromString(bus)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown disk bus type '%s'"), bus); - goto error; + return NULL; } } else { if (def->device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY) { @@ -10840,14 +10840,14 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xm= lopt, if ((def->tray_status =3D virDomainDiskTrayTypeFromString(tray)) <= 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown disk tray status '%s'"), tray); - goto error; + return NULL; } =20 if (def->device !=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY && def->device !=3D VIR_DOMAIN_DISK_DEVICE_CDROM) { virReportError(VIR_ERR_XML_ERROR, "%s", _("tray is only valid for cdrom and floppy")); - goto error; + return NULL; } } =20 @@ -10855,13 +10855,13 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xm= lopt, if ((def->removable =3D virTristateSwitchTypeFromString(removable)= ) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown disk removable status '%s'"), remova= ble); - goto error; + return NULL; } } =20 if (virDomainDeviceInfoParseXML(xmlopt, node, &def->info, flags | VIR_DOMAIN_DEF_PARSE_ALLOW_BOO= T) < 0) { - goto error; + return NULL; } =20 if (startupPolicy) { @@ -10871,7 +10871,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown startupPolicy value '%s'"), startupPolicy); - goto error; + return NULL; } def->startupPolicy =3D val; } @@ -10884,7 +10884,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("an definition already found for " "disk source")); - goto error; + return NULL; } =20 def->src->auth =3D g_steal_pointer(&authdef); @@ -10897,7 +10897,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlo= pt, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("an definition already found= for " "disk source")); - goto error; + return NULL; } =20 def->src->encryption =3D g_steal_pointer(&encryption); @@ -10909,23 +10909,16 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xm= lopt, def->product =3D g_steal_pointer(&product); =20 if (virDomainDiskBackingStoreParse(ctxt, def->src, flags, xmlopt) < 0) - goto error; + return NULL; =20 if (flags & VIR_DOMAIN_DEF_PARSE_STATUS && virDomainDiskDefParsePrivateData(ctxt, def, xmlopt) < 0) - goto error; + return NULL; =20 if (virDomainDiskDefParseValidate(def) < 0) - goto error; - - cleanup: - virStorageEncryptionFree(encryption); - return def; + return NULL; =20 - error: - virDomainDiskDefFree(def); - def =3D NULL; - goto cleanup; + return g_steal_pointer(&def); } =20 =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ff82da7f7e..cef17efe73 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3040,6 +3040,7 @@ const char *virDomainInputDefGetPath(virDomainInputDe= fPtr input); void virDomainInputDefFree(virDomainInputDefPtr def); virDomainDiskDefPtr virDomainDiskDefNew(virDomainXMLOptionPtr xmlopt); void virDomainDiskDefFree(virDomainDiskDefPtr def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainDiskDef, virDomainDiskDefFree); void virDomainLeaseDefFree(virDomainLeaseDefPtr def); int virDomainDiskGetType(virDomainDiskDefPtr def); void virDomainDiskSetType(virDomainDiskDefPtr def, int type); --=20 2.26.2