]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: xml: Introduce virXMLPropUUID
authorPeter Krempa <pkrempa@redhat.com>
Fri, 16 Sep 2022 06:19:31 +0000 (08:19 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 3 Oct 2022 12:43:17 +0000 (14:43 +0200)
The helper function extracts a UUID with semantics similar to other
helpers we have.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/libvirt_private.syms
src/util/virxml.c
src/util/virxml.h

index 25794bc2f4179c9f87016358848669a765cf6432..1e852902ab10fd693efcd089938212b435a52203 100644 (file)
@@ -3688,6 +3688,7 @@ virXMLPropTristateBoolAllowDefault;
 virXMLPropTristateSwitch;
 virXMLPropUInt;
 virXMLPropULongLong;
+virXMLPropUUID;
 virXMLSaveFile;
 virXMLValidateAgainstSchema;
 virXMLValidatorFree;
index d6e2e5dd91b28b490539246d3da3cd185e644b4f..f92cd32dfa6d8977b4c2980a009266c8c80bf15c 100644 (file)
@@ -33,6 +33,7 @@
 #include "virfile.h"
 #include "virstring.h"
 #include "virutil.h"
+#include "viruuid.h"
 #include "configmake.h"
 
 #define VIR_FROM_THIS VIR_FROM_XML
@@ -808,6 +809,50 @@ virXMLPropEnumDefault(xmlNodePtr node,
 }
 
 
+/**
+ * virXMLPropUUID:
+ * @node: XML dom node pointer
+ * @name: Name of the property (attribute) to get
+ * @flags: Bitwise-OR of virXMLPropFlags
+ * @result: Array of VIR_UUID_BUFLEN bytes to store the raw UUID
+ *
+ * Convenience function to fetch an XML property as a UUID.
+ *
+ * Returns 1 in case of success in which case @result is set,
+ *         or 0 if the attribute is not present,
+ *         or -1 and reports an error on failure.
+ */
+int
+virXMLPropUUID(xmlNodePtr node,
+               const char* name,
+               virXMLPropFlags flags,
+               unsigned char *result)
+{
+    g_autofree char *tmp = NULL;
+    unsigned char val[VIR_UUID_BUFLEN];
+
+    if (!(tmp = virXMLPropString(node, name))) {
+        if (!(flags & VIR_XML_PROP_REQUIRED))
+            return 0;
+
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("Missing required attribute '%s' in element '%s'"),
+                       name, node->name);
+        return -1;
+    }
+
+    if (virUUIDParse(tmp, val) < 0) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("Invalid value for attribute '%s' in element '%s': '%s'. Expected UUID"),
+                       name, node->name, tmp);
+        return -1;
+    }
+
+    memcpy(result, val, VIR_UUID_BUFLEN);
+    return 1;
+}
+
+
 /**
  * virXMLPropEnum:
  * @node: XML dom node pointer
index 539228a9ba811dd2533ba35d228174a4cd48dbee..b643f0b0c070ebebbda16bb2911f6fcd58922c69 100644 (file)
@@ -154,6 +154,13 @@ virXMLPropEnum(xmlNodePtr node,
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
     ATTRIBUTE_NONNULL(5);
 
+int
+virXMLPropUUID(xmlNodePtr node,
+               const char *name,
+               virXMLPropFlags flags,
+               unsigned char *result)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
+
 int
 virXMLPropEnumDefault(xmlNodePtr node,
                       const char* name,