From nobody Tue Feb 10 03:45:18 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; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.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=1616054713; cv=none; d=zohomail.com; s=zohoarc; b=VDVzJ6xkFjjAy0QnjxiiD2hjsa6M8xlanMbWQO3QYT9SFJ+lIpZyDi5JPRB7vqtkDmkCtcmtkcCSy54yHdJK5vww0x+Xq6RKUf/5kqWuPl1ASm4Eu7MPtEzQi5jP/ICXrTNR15Za64//zELw+rnz1VDHmwcNE8h5qNH/hIh+jlQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616054713; 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=bpdWMYs6adJqgK0x6eZs/Wi53tELkwBp63hL1bus4ww=; b=ZAWJJsFQ5l3tGbF/UryZCegTCIzM/gBYPMJAP/oepx5FoCWM9HuR7d4YR0Z0Blxb74WsiURsTVqtWp55lCN0+6z9eg7bd7JYa9TsFQxA+ocFEQVFYHbdaPBXiBZKf4KoOo+jkA83SQxmNGqBzo8cjGDVp1/pz74mc5IoCNjd4mw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.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 [216.205.24.124]) by mx.zohomail.com with SMTPS id 1616054713364556.1756343719709; Thu, 18 Mar 2021 01:05:13 -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-510-l7U3ERvxPjmV1A_7p6uz2w-1; Thu, 18 Mar 2021 04:02:40 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A1A2385EE8B; Thu, 18 Mar 2021 08:02:35 +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 5197B60C13; Thu, 18 Mar 2021 08:02:35 +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 051895003C; Thu, 18 Mar 2021 08:02:35 +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 12I82Ud3029056 for ; Thu, 18 Mar 2021 04:02:30 -0400 Received: by smtp.corp.redhat.com (Postfix) id E74366362B; Thu, 18 Mar 2021 08:02:30 +0000 (UTC) Received: from work.redhat.com (ovpn-112-180.ams2.redhat.com [10.36.112.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id 370C169320; Thu, 18 Mar 2021 08:02:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1616054712; 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=bpdWMYs6adJqgK0x6eZs/Wi53tELkwBp63hL1bus4ww=; b=BoNA5DGwniTIOEUQnEkTymH8460N6VPyzYDeH4n7KhRBO8n9YNYxlgntMiUYxfsLSXNSRV rYOx5Kzq0MiuqwaqFxoRuijvgbV4pdVDVC8G9ghgpSrnXUxuxdOP/KKLO/B07BW3PrMCbO A7DMiUcpbnqmIFgSBdRQvX1KOnloGhY= X-MC-Unique: l7U3ERvxPjmV1A_7p6uz2w-1 From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 29/38] domain_conf: Use virXMLProp(OnOff|YesNo) in virDomainFeaturesDefParse Date: Thu, 18 Mar 2021 09:01:08 +0100 Message-Id: <20210318080117.70255-30-twiederh@redhat.com> In-Reply-To: <20210318080117.70255-1-twiederh@redhat.com> References: <20210318080117.70255-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 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.79 on 10.5.11.12 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 | 138 ++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 90 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 39f171ba74..4f020714bc 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -18292,6 +18292,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, @@ -18301,16 +18302,9 @@ 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 (virXMLPropOnOff(nodes[i], "eoi", &triSwitch) < 0) + return -1; + def->apic_eoi =3D triSwitch; G_GNUC_FALLTHROUGH; case VIR_DOMAIN_FEATURE_ACPI: case VIR_DOMAIN_FEATURE_PAE: @@ -18342,16 +18336,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 (virXMLPropOnOff(nodes[i], "state", &triSwitch) < 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: @@ -18459,15 +18447,11 @@ 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)); + if (virXMLPropOnOff(nodes[i], "state", &triSwitch) < 0) return -1; - } - if ((def->features[val] =3D virTristateSwitchTypeFromString(tm= p)) < 0) { + if ((def->features[val] =3D triSwitch) =3D=3D VIR_TRISTATE_SWI= TCH_ABSENT) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown state attribute '%s' of feature = '%s'"), + _("missing state attribute '%s' of feature = '%s'"), tmp, virDomainFeatureTypeToString(val)); return -1; } @@ -18482,13 +18466,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, @@ -18499,7 +18482,10 @@ virDomainFeaturesDefParse(virDomainDefPtr def, =20 ctxt->node =3D nodes[i]; =20 - if (!(tmp =3D virXMLPropString(nodes[i], "state"))) { + if (virXMLPropOnOff(nodes[i], "state", &state) < 0) + return -1; + + if (state =3D=3D VIR_TRISTATE_SWITCH_ABSENT) { virReportError(VIR_ERR_XML_ERROR, _("missing 'state' attribute for " "HyperV Enlightenment feature '%s'"), @@ -18507,15 +18493,7 @@ virDomainFeaturesDefParse(virDomainDefPtr def, 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: @@ -18533,7 +18511,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, @@ -18552,7 +18530,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], @@ -18589,13 +18567,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"), @@ -18603,33 +18580,28 @@ virDomainFeaturesDefParse(virDomainDefPtr def, return -1; } =20 - if (!(tmp =3D virXMLPropString(nodes[i], "state"))) { + if (virXMLPropOnOff(nodes[i], "state", &state) < 0) + return -1; + def->hyperv_stimer_direct =3D state; + + if (state =3D=3D VIR_TRISTATE_SWITCH_ABSENT) { 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"); - return -1; - } - - def->hyperv_stimer_direct =3D value; } 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) { @@ -18643,7 +18615,11 @@ 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"))) { + if (virXMLPropOnOff(nodes[i], "state", &state) < 0) + return -1; + def->kvm_features[feature] =3D state; + + if (state =3D=3D VIR_TRISTATE_SWITCH_ABSENT) { virReportError(VIR_ERR_XML_ERROR, _("missing 'state' attribute for " "KVM feature '%s'"), @@ -18651,15 +18627,6 @@ virDomainFeaturesDefParse(virDomainDefPtr def, return -1; } =20 - 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; break; =20 /* coverity[dead_error_begin] */ @@ -18672,14 +18639,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, @@ -18688,7 +18654,12 @@ virDomainFeaturesDefParse(virDomainDefPtr def, return -1; } =20 - if (!(tmp =3D virXMLPropString(nodes[i], "state"))) { + if (virXMLPropOnOff(nodes[i], "state", &state) < 0) + return -1; + + def->xen_features[feature] =3D state; + + if (state =3D=3D VIR_TRISTATE_SWITCH_ABSENT) { virReportError(VIR_ERR_XML_ERROR, _("missing 'state' attribute for " "Xen feature '%s'"), @@ -18696,22 +18667,12 @@ virDomainFeaturesDefParse(virDomainDefPtr def, return -1; } =20 - if ((value =3D virTristateSwitchTypeFromString(tmp)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("invalid value of state argument " - "for Xen feature '%s'"), - nodes[i]->name); - return -1; - } - - def->xen_features[feature] =3D value; - 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"))) { @@ -18781,7 +18742,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, @@ -18789,16 +18750,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 (virXMLPropOnOff(nodes[i], "state", &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