Re: [PATCH 12/37] util: xml: Introduce virXMLPropUUID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On a Monday in 2022, Peter Krempa wrote:
The helper function extracts an UUID with semantics similar to other

*a UUID

helpers we have.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
src/libvirt_private.syms |  1 +
src/util/virxml.c        | 45 ++++++++++++++++++++++++++++++++++++++++
src/util/virxml.h        |  7 +++++++
3 files changed, 53 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 25794bc2f4..1e852902ab 100644
diff --git a/src/util/virxml.c b/src/util/virxml.c
index d6e2e5dd91..04a8b29ba3 100644
--- a/src/util/virxml.c
+++ b/src/util/virxml.c
@@ -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

In the public API we write this as "Bitwise-OR of"

+ * @result: array of VIR_UUID_BUFLEN bytes to store the raw UUID

*Array (or lowercase the description of the two options above)

+ *
+ * Convenience function to fetch a XML property as UUID.

s/a XML/an XML/
s/UUID/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
diff --git a/src/util/virxml.h b/src/util/virxml.h
index 539228a9ba..dfb58ff276 100644
--- a/src/util/virxml.h
+++ b/src/util/virxml.h
@@ -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,

char *name

Reviewed-by: Ján Tomko <jtomko@xxxxxxxxxx>

Jano

+               virXMLPropFlags flags,
+               unsigned char *result)




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux