95 lines
2.9 KiB
Diff
95 lines
2.9 KiB
Diff
From 85152cf8dd0fe044d3831746e2f5d693778d8da0 Mon Sep 17 00:00:00 2001
|
|
Message-ID: <85152cf8dd0fe044d3831746e2f5d693778d8da0.1763133105.git.jdenemar@redhat.com>
|
|
From: Michal Privoznik <mprivozn@redhat.com>
|
|
Date: Thu, 2 Oct 2025 09:29:19 +0200
|
|
Subject: [PATCH] virxml: Introduce virXPathTristateBool()
|
|
|
|
Similarly to other virXPath* functions, let's have a helper that
|
|
evaluates an XPath and stores the value into virTristateBool.
|
|
|
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
(cherry picked from commit e3e4c620f1af03c35c4f0dc7c8a65ea5464df687)
|
|
Resolves: https://issues.redhat.com/browse/RHEL-122930
|
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
---
|
|
src/libvirt_private.syms | 1 +
|
|
src/util/virxml.c | 34 ++++++++++++++++++++++++++++++++++
|
|
src/util/virxml.h | 5 +++++
|
|
3 files changed, 40 insertions(+)
|
|
|
|
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
|
index 0edd526a68..bbe1e252af 100644
|
|
--- a/src/libvirt_private.syms
|
|
+++ b/src/libvirt_private.syms
|
|
@@ -3796,6 +3796,7 @@ virXPathLongLong;
|
|
virXPathNode;
|
|
virXPathNodeSet;
|
|
virXPathString;
|
|
+virXPathTristateBool;
|
|
virXPathTristateSwitch;
|
|
virXPathUInt;
|
|
virXPathUIntBase;
|
|
diff --git a/src/util/virxml.c b/src/util/virxml.c
|
|
index cb0a59ffda..6917253ac0 100644
|
|
--- a/src/util/virxml.c
|
|
+++ b/src/util/virxml.c
|
|
@@ -292,6 +292,40 @@ virXPathTristateSwitch(const char *xpath,
|
|
}
|
|
|
|
|
|
+/**
|
|
+ * virXPathTristateBool:
|
|
+ * @xpath: the XPath string to evaluate
|
|
+ * @ctxt: an XPath context
|
|
+ * @value: the returned virTristateBool value
|
|
+ *
|
|
+ * Convenience function to evaluate an XPath tristate value. The @xpath
|
|
+ * expression must ensure that the evaluated value is returned as a
|
|
+ * string (use the 'string()' conversion in the expression).
|
|
+ *
|
|
+ * Returns 0 in case of success in which case @value is set,
|
|
+ * or -1 if the XPath evaluation failed or -2 if the
|
|
+ * value isn't of a virTristateBool value.
|
|
+ */
|
|
+int
|
|
+virXPathTristateBool(const char *xpath,
|
|
+ xmlXPathContextPtr ctxt,
|
|
+ virTristateBool *value)
|
|
+{
|
|
+ g_autoptr(xmlXPathObject) obj = NULL;
|
|
+ int rc;
|
|
+
|
|
+ if (!(obj = virXPathEvalString(xpath, ctxt)))
|
|
+ return -1;
|
|
+
|
|
+ rc = virTristateBoolTypeFromString((char *)obj->stringval);
|
|
+ if (rc < 0)
|
|
+ return -2;
|
|
+
|
|
+ *value = rc;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+
|
|
/**
|
|
* virXMLCheckIllegalChars:
|
|
* @nodeName: Name of checked node
|
|
diff --git a/src/util/virxml.h b/src/util/virxml.h
|
|
index 3d2de4f976..4d7eb4d25c 100644
|
|
--- a/src/util/virxml.h
|
|
+++ b/src/util/virxml.h
|
|
@@ -78,6 +78,11 @@ virXPathTristateSwitch(const char *xpath,
|
|
xmlXPathContextPtr ctxt,
|
|
virTristateSwitch *value);
|
|
|
|
+int
|
|
+virXPathTristateBool(const char *xpath,
|
|
+ xmlXPathContextPtr ctxt,
|
|
+ virTristateBool *value);
|
|
+
|
|
xmlNodePtr
|
|
virXMLNodeGetSubelement(xmlNodePtr node,
|
|
const char *name);
|
|
--
|
|
2.51.1
|