From nobody Mon Feb 9 15:45:41 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 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=1616161385; cv=none; d=zohomail.com; s=zohoarc; b=XOoKeHi3ZEinhewAeLJHcFQH7vpHuK/Pk7J6GwhupHnAxrvKvMZ6s7Pd3phqQ2DStFX42Gv9xEjLHCLDrnXfkfaU5JW8LJ9zZLZxGCGwwv3smINEOt1etsbv1O5Z/NLLMPHbSU3gKbdIh+XsFMLBDkxqRaLNTiIgGFbfYNRReik= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616161385; 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=hkud9cQMYcSTmhXytkHGuDzOgErkeVOCEukOfGBJB/c=; b=hGqLyjpXGA71FJU98jNMHu1zvMfw+22jhXfcd2xIReUlA6AsC51rkmhCh0g97TGOcB8K8k89On9hVA3dapS/S9nQYveJp4QDxO7EVJu8Eahf9skVyG0zK39lK8DgH2V9PJMbw758wkeGh8UXOKd9NtPqLN6Av17aTryDdNx6wbw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 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-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 161616138526029.14803046031568; Fri, 19 Mar 2021 06:43:05 -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-376-KC_FLQ4MPYGePXfbDllMNw-1; Fri, 19 Mar 2021 09:43:01 -0400 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 1EB2E5B372; Fri, 19 Mar 2021 13:42:54 +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 D8F2F10016F8; Fri, 19 Mar 2021 13:42:53 +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 7A546181846D; Fri, 19 Mar 2021 13:42:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 12JDgj20020699 for ; Fri, 19 Mar 2021 09:42:45 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5BF1459448; Fri, 19 Mar 2021 13:42:45 +0000 (UTC) Received: from work.redhat.com (ovpn-112-175.ams2.redhat.com [10.36.112.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9DEC463B8C; Fri, 19 Mar 2021 13:42:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1616161384; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=hkud9cQMYcSTmhXytkHGuDzOgErkeVOCEukOfGBJB/c=; b=GLd8s1C8F7i98lMZaCE5yh8+v13/HuXGvkUrQo0CjVkO2sJ0Matau8Y/v/CxJNOmMineHg Vew/hUbFMSyrxJTRFUzRcFQLC22+cogqCWlPPY2jxZQ18WRBgL1f2x3xni7Sgvltfsg0Y7 Y5MkChN65OpusebrUX2+ytIPbVQwADY= X-MC-Unique: KC_FLQ4MPYGePXfbDllMNw-1 From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 42/51] domain_conf: Use virXMLPropTristateXXX in virDomainFeaturesDefParse Date: Fri, 19 Mar 2021 14:40:56 +0100 Message-Id: <20210319134105.442774-43-twiederh@redhat.com> In-Reply-To: <20210319134105.442774-1-twiederh@redhat.com> References: <20210319134105.442774-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Cc: Tim Wiederhake 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 X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake --- src/conf/domain_conf.c | 146 ++++++++++------------------------------- 1 file changed, 33 insertions(+), 113 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 418e86ebcb..83fc12c41b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -18237,6 +18237,7 @@ virDomainFeaturesDefParse(virDomainDefPtr def, =20 for (i =3D 0; i < n; i++) { g_autofree char *tmp =3D NULL; + virTristateSwitch triSwitch =3D VIR_TRISTATE_SWITCH_ABSENT; int val =3D virDomainFeatureTypeFromString((const char *)nodes[i]-= >name); if (val < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -18246,16 +18247,8 @@ virDomainFeaturesDefParse(virDomainDefPtr def, =20 switch ((virDomainFeature) val) { case VIR_DOMAIN_FEATURE_APIC: - if ((tmp =3D virXPathString("string(./features/apic/@eoi)", ct= xt))) { - int eoi; - if ((eoi =3D virTristateSwitchTypeFromString(tmp)) <=3D 0)= { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown value for attribute eoi: '%s= '"), - tmp); - return -1; - } - def->apic_eoi =3D eoi; - } + if (virXMLPropTristateSwitch(nodes[i], "eoi", false, &def->api= c_eoi) < 0) + return -1; G_GNUC_FALLTHROUGH; case VIR_DOMAIN_FEATURE_ACPI: case VIR_DOMAIN_FEATURE_PAE: @@ -18287,16 +18280,10 @@ virDomainFeaturesDefParse(virDomainDefPtr def, case VIR_DOMAIN_FEATURE_PVSPINLOCK: case VIR_DOMAIN_FEATURE_VMPORT: case VIR_DOMAIN_FEATURE_SMM: - if ((tmp =3D virXMLPropString(nodes[i], "state"))) { - if ((def->features[val] =3D virTristateSwitchTypeFromStrin= g(tmp)) =3D=3D -1) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown state attribute '%s' of feat= ure '%s'"), - tmp, virDomainFeatureTypeToString(val)); - return -1; - } - } else { + if (virXMLPropTristateSwitch(nodes[i], "state", false, &triSwi= tch) < 0) + return -1; + if ((def->features[val] =3D triSwitch) =3D=3D VIR_TRISTATE_SWI= TCH_ABSENT) def->features[val] =3D VIR_TRISTATE_SWITCH_ON; - } break; =20 case VIR_DOMAIN_FEATURE_GIC: @@ -18404,18 +18391,9 @@ virDomainFeaturesDefParse(virDomainDefPtr def, case VIR_DOMAIN_FEATURE_HTM: case VIR_DOMAIN_FEATURE_NESTED_HV: case VIR_DOMAIN_FEATURE_CCF_ASSIST: - if (!(tmp =3D virXMLPropString(nodes[i], "state"))) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("missing state attribute '%s' of feature = '%s'"), - tmp, virDomainFeatureTypeToString(val)); - return -1; - } - if ((def->features[val] =3D virTristateSwitchTypeFromString(tm= p)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown state attribute '%s' of feature = '%s'"), - tmp, virDomainFeatureTypeToString(val)); + if (virXMLPropTristateSwitch(nodes[i], "state", true, &triSwit= ch) < 0) return -1; - } + def->features[val] =3D triSwitch; break; =20 /* coverity[dead_error_begin] */ @@ -18427,13 +18405,12 @@ virDomainFeaturesDefParse(virDomainDefPtr def, =20 if (def->features[VIR_DOMAIN_FEATURE_HYPERV] =3D=3D VIR_TRISTATE_SWITC= H_ON) { int feature; - int value; + virTristateSwitch state =3D VIR_TRISTATE_SWITCH_ABSENT; xmlNodePtr node =3D ctxt->node; if ((n =3D virXPathNodeSet("./features/hyperv/*", ctxt, &nodes)) <= 0) return -1; =20 for (i =3D 0; i < n; i++) { - g_autofree char *tmp =3D NULL; feature =3D virDomainHypervTypeFromString((const char *)nodes[= i]->name); if (feature < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -18444,23 +18421,10 @@ virDomainFeaturesDefParse(virDomainDefPtr def, =20 ctxt->node =3D nodes[i]; =20 - if (!(tmp =3D virXMLPropString(nodes[i], "state"))) { - virReportError(VIR_ERR_XML_ERROR, - _("missing 'state' attribute for " - "HyperV Enlightenment feature '%s'"), - nodes[i]->name); + if (virXMLPropTristateSwitch(nodes[i], "state", true, &state) = < 0) return -1; - } =20 - if ((value =3D virTristateSwitchTypeFromString(tmp)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("invalid value of state argument " - "for HyperV Enlightenment feature '%s'"), - nodes[i]->name); - return -1; - } - - def->hyperv_features[feature] =3D value; + def->hyperv_features[feature] =3D state; =20 switch ((virDomainHyperv) feature) { case VIR_DOMAIN_HYPERV_RELAXED: @@ -18478,7 +18442,7 @@ virDomainFeaturesDefParse(virDomainDefPtr def, break; =20 case VIR_DOMAIN_HYPERV_SPINLOCKS: - if (value !=3D VIR_TRISTATE_SWITCH_ON) + if (state !=3D VIR_TRISTATE_SWITCH_ON) break; =20 if (virXPathUInt("string(./@retries)", ctxt, @@ -18497,7 +18461,7 @@ virDomainFeaturesDefParse(virDomainDefPtr def, break; =20 case VIR_DOMAIN_HYPERV_VENDOR_ID: - if (value !=3D VIR_TRISTATE_SWITCH_ON) + if (state !=3D VIR_TRISTATE_SWITCH_ON) break; =20 if (!(def->hyperv_vendor_id =3D virXMLPropString(nodes[i], @@ -18534,13 +18498,12 @@ virDomainFeaturesDefParse(virDomainDefPtr def, } =20 if (def->hyperv_features[VIR_DOMAIN_HYPERV_STIMER] =3D=3D VIR_TRISTATE= _SWITCH_ON) { - int value; + virTristateSwitch state =3D VIR_TRISTATE_SWITCH_ABSENT; + if ((n =3D virXPathNodeSet("./features/hyperv/stimer/*", ctxt, &no= des)) < 0) return -1; =20 for (i =3D 0; i < n; i++) { - g_autofree char *tmp =3D NULL; - if (STRNEQ((const char *)nodes[i]->name, "direct")) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported Hyper-V stimer feature: %s"), @@ -18548,33 +18511,21 @@ virDomainFeaturesDefParse(virDomainDefPtr def, return -1; } =20 - if (!(tmp =3D virXMLPropString(nodes[i], "state"))) { - virReportError(VIR_ERR_XML_ERROR, - _("missing 'state' attribute for " - "Hyper-V stimer '%s' feature"), "direct"); - return -1; - } - - if ((value =3D virTristateSwitchTypeFromString(tmp)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("invalid value of state argument " - "for Hyper-V stimer '%s' feature"), "dire= ct"); + if (virXMLPropTristateSwitch(nodes[i], "state", true, &state) = < 0) return -1; - } - - def->hyperv_stimer_direct =3D value; + def->hyperv_stimer_direct =3D state; } VIR_FREE(nodes); } =20 if (def->features[VIR_DOMAIN_FEATURE_KVM] =3D=3D VIR_TRISTATE_SWITCH_O= N) { int feature; - int value; + if ((n =3D virXPathNodeSet("./features/kvm/*", ctxt, &nodes)) < 0) return -1; =20 for (i =3D 0; i < n; i++) { - g_autofree char *tmp =3D NULL; + virTristateSwitch state =3D VIR_TRISTATE_SWITCH_ABSENT; =20 feature =3D virDomainKVMTypeFromString((const char *)nodes[i]-= >name); if (feature < 0) { @@ -18588,23 +18539,9 @@ virDomainFeaturesDefParse(virDomainDefPtr def, case VIR_DOMAIN_KVM_HIDDEN: case VIR_DOMAIN_KVM_DEDICATED: case VIR_DOMAIN_KVM_POLLCONTROL: - if (!(tmp =3D virXMLPropString(nodes[i], "state"))) { - virReportError(VIR_ERR_XML_ERROR, - _("missing 'state' attribute for " - "KVM feature '%s'"), - nodes[i]->name); + if (virXMLPropTristateSwitch(nodes[i], "state", true, = &state) < 0) return -1; - } - - if ((value =3D virTristateSwitchTypeFromString(tmp)) <= 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("invalid value of state argument " - "for KVM feature '%s'"), - nodes[i]->name); - return -1; - } - - def->kvm_features[feature] =3D value; + def->kvm_features[feature] =3D state; break; =20 /* coverity[dead_error_begin] */ @@ -18617,14 +18554,13 @@ virDomainFeaturesDefParse(virDomainDefPtr def, =20 if (def->features[VIR_DOMAIN_FEATURE_XEN] =3D=3D VIR_TRISTATE_SWITCH_O= N) { int feature; - int value; g_autofree char *ptval =3D NULL; - g_autofree char *tmp =3D NULL; =20 if ((n =3D virXPathNodeSet("./features/xen/*", ctxt, &nodes)) < 0) return -1; =20 for (i =3D 0; i < n; i++) { + virTristateSwitch state =3D VIR_TRISTATE_SWITCH_ABSENT; feature =3D virDomainXenTypeFromString((const char *)nodes[i]-= >name); if (feature < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -18633,30 +18569,17 @@ virDomainFeaturesDefParse(virDomainDefPtr def, return -1; } =20 - if (!(tmp =3D virXMLPropString(nodes[i], "state"))) { - virReportError(VIR_ERR_XML_ERROR, - _("missing 'state' attribute for " - "Xen feature '%s'"), - nodes[i]->name); - return -1; - } - - if ((value =3D virTristateSwitchTypeFromString(tmp)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("invalid value of state argument " - "for Xen feature '%s'"), - nodes[i]->name); + if (virXMLPropTristateSwitch(nodes[i], "state", true, &state) = < 0) return -1; - } =20 - def->xen_features[feature] =3D value; + def->xen_features[feature] =3D state; =20 switch ((virDomainXen) feature) { case VIR_DOMAIN_XEN_E820_HOST: break; =20 case VIR_DOMAIN_XEN_PASSTHROUGH: - if (value !=3D VIR_TRISTATE_SWITCH_ON) + if (state !=3D VIR_TRISTATE_SWITCH_ON) break; =20 if ((ptval =3D virXMLPropString(nodes[i], "mode"))) { @@ -18726,7 +18649,7 @@ virDomainFeaturesDefParse(virDomainDefPtr def, return -1; =20 for (i =3D 0; i < n; i++) { - g_autofree char *tmp =3D NULL; + virTristateSwitch state =3D VIR_TRISTATE_SWITCH_ABSENT; int val =3D virDomainProcessCapsFeatureTypeFromString((const char = *)nodes[i]->name); if (val < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -18734,16 +18657,13 @@ virDomainFeaturesDefParse(virDomainDefPtr def, return -1; } =20 - if ((tmp =3D virXMLPropString(nodes[i], "state"))) { - if ((def->caps_features[val] =3D virTristateSwitchTypeFromStri= ng(tmp)) =3D=3D -1) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown state attribute '%s' of feature = capability '%s'"), - tmp, virDomainProcessCapsFeatureTypeToStrin= g(val)); - return -1; - } - } else { - def->caps_features[val] =3D VIR_TRISTATE_SWITCH_ON; - } + if (virXMLPropTristateSwitch(nodes[i], "state", false, &state) < 0) + return -1; + + if (state =3D=3D VIR_TRISTATE_SWITCH_ABSENT) + state =3D VIR_TRISTATE_SWITCH_ON; + + def->caps_features[val] =3D state; } VIR_FREE(nodes); return 0; --=20 2.26.2