[PATCH 14/37] util: xml: Introduce virXMLPropStringRequired

Peter Krempa pkrempa at redhat.com
Mon Sep 19 08:54:59 UTC 2022


Similarly to virXMLPropString it extracts a string but reports an errori
similar to the newer virXMLProp helpers if the attribute is not present.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/libvirt_private.syms |  1 +
 src/util/virxml.c        | 27 +++++++++++++++++++++++++++
 src/util/virxml.h        |  4 ++++
 3 files changed, 32 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 1e852902ab..01bb349e05 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -3683,6 +3683,7 @@ virXMLPropEnum;
 virXMLPropEnumDefault;
 virXMLPropInt;
 virXMLPropString;
+virXMLPropStringRequired;
 virXMLPropTristateBool;
 virXMLPropTristateBoolAllowDefault;
 virXMLPropTristateSwitch;
diff --git a/src/util/virxml.c b/src/util/virxml.c
index eac2d0a73f..b94af9c7a3 100644
--- a/src/util/virxml.c
+++ b/src/util/virxml.c
@@ -455,6 +455,33 @@ virXMLPropString(xmlNodePtr node,
 }


+/**
+ * virXMLPropStringRequired:
+ * @node: XML dom node pointer
+ * @name: Name of the property (attribute) to get
+ *
+ * Convenience function to return copy of an mandatoryu attribute value of a
+ * XML node.
+ *
+ * Returns the property (attribute) value as string or NULL and if the attribute
+ * is not present (libvirt error reported).
+ * The caller is responsible for freeing the returned buffer.
+ */
+char *
+virXMLPropStringRequired(xmlNodePtr node,
+                         const char *name)
+{
+    char *ret = virXMLPropString(node, name);
+
+     if (!(*ret))
+         virReportError(VIR_ERR_XML_ERROR,
+                        _("Missing required attribute '%s' in element '%s'"),
+                        name, node->name);
+
+     return ret;
+}
+
+
 /**
  * virXMLNodeContentString:
  * @node: XML dom node pointer
diff --git a/src/util/virxml.h b/src/util/virxml.h
index dfb58ff276..42d3740c58 100644
--- a/src/util/virxml.h
+++ b/src/util/virxml.h
@@ -97,6 +97,10 @@ char *
 virXMLPropString(xmlNodePtr node,
                  const char *name);
 char *
+virXMLPropStringRequired(xmlNodePtr node,
+                         const char *name);
+
+char *
 virXMLNodeContentString(xmlNodePtr node);

 int
-- 
2.37.1



More information about the libvir-list mailing list