]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: xml: Introduce virXPathU(Int|LongLong)Base
authorPeter Krempa <pkrempa@redhat.com>
Wed, 5 Oct 2022 07:17:29 +0000 (09:17 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 2 Nov 2022 08:20:57 +0000 (09:20 +0100)
In an effort to remove the 'Long' variants of XPath number fetching
functions we need a way to replace the hex number parsing capability.

The new helpers are created from the originals by adding a 'base'
argument and keeping the original function as a wrapper to pass 10.

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 c6445dedcbf4f1122ac8e8f025770170cdea9294..dab3b389c8d08a30bd19be37ac18f996d047184e 100644 (file)
@@ -3699,9 +3699,11 @@ virXPathNode;
 virXPathNodeSet;
 virXPathString;
 virXPathUInt;
+virXPathUIntBase;
 virXPathULong;
 virXPathULongHex;
 virXPathULongLong;
+virXPathULongLongBase;
 
 
 # Let emacs know we want case-insensitive sorting
index d885fc16807883adf867559a88ea02e079b6ee78..a47a5d49fc46ab4fb76ade1d9eab87478736a5e8 100644 (file)
@@ -228,9 +228,10 @@ virXPathULongBase(const char *xpath,
 
 
 /**
- * virXPathUInt:
+ * virXPathUIntBase:
  * @xpath: the XPath string to evaluate
  * @ctxt: an XPath context
+ * @base: base of the number to fetch @value as
  * @value: the returned unsigned int value
  *
  * Convenience function to evaluate an XPath number. The @xpath expression
@@ -242,22 +243,32 @@ virXPathULongBase(const char *xpath,
  *         value doesn't have an unsigned int format.
  */
 int
-virXPathUInt(const char *xpath,
-             xmlXPathContextPtr ctxt,
-             unsigned int *value)
+virXPathUIntBase(const char *xpath,
+                 xmlXPathContextPtr ctxt,
+                 unsigned int base,
+                 unsigned int *value)
 {
     g_autoptr(xmlXPathObject) obj = NULL;
 
     if (!(obj = virXPathEvalString(xpath, ctxt)))
         return -1;
 
-    if (virStrToLong_ui((char *) obj->stringval, NULL, 10, value) < 0)
+    if (virStrToLong_ui((char *) obj->stringval, NULL, base, value) < 0)
         return -2;
 
     return 0;
 }
 
 
+int
+virXPathUInt(const char *xpath,
+             xmlXPathContextPtr ctxt,
+             unsigned int *value)
+{
+    return virXPathUIntBase(xpath, ctxt, 10, value);
+}
+
+
 /**
  * virXPathULong:
  * @xpath: the XPath string to evaluate
@@ -302,9 +313,10 @@ virXPathULongHex(const char *xpath,
 
 
 /**
- * virXPathULongLong:
+ * virXPathULongLongBase:
  * @xpath: the XPath string to evaluate
  * @ctxt: an XPath context
+ * @base: base of the number to fetch @value as
  * @value: the returned unsigned long long value
  *
  * Convenience function to evaluate an XPath number. The @xpath expression
@@ -316,22 +328,32 @@ virXPathULongHex(const char *xpath,
  *         value doesn't have a unsigned long long format.
  */
 int
-virXPathULongLong(const char *xpath,
-                  xmlXPathContextPtr ctxt,
-                  unsigned long long *value)
+virXPathULongLongBase(const char *xpath,
+                      xmlXPathContextPtr ctxt,
+                      unsigned int base,
+                      unsigned long long *value)
 {
     g_autoptr(xmlXPathObject) obj = NULL;
 
     if (!(obj = virXPathEvalString(xpath, ctxt)))
         return -1;
 
-    if (virStrToLong_ullp((char *) obj->stringval, NULL, 10, value) < 0)
+    if (virStrToLong_ullp((char *) obj->stringval, NULL, base, value) < 0)
         return -2;
 
     return 0;
 }
 
 
+int
+virXPathULongLong(const char *xpath,
+                  xmlXPathContextPtr ctxt,
+                  unsigned long long *value)
+{
+    return virXPathULongLongBase(xpath, ctxt, 10, value);
+}
+
+
 /**
  * virXPathLongLong:
  * @xpath: the XPath string to evaluate
index fe07e2d22342440007d8c11d5e652ec7c7a70253..bdd2e9145d4a596852574efd469a864938324cc4 100644 (file)
@@ -51,6 +51,11 @@ virXPathInt(const char *xpath,
             xmlXPathContextPtr ctxt,
             int *value);
 int
+virXPathUIntBase(const char *xpath,
+                 xmlXPathContextPtr ctxt,
+                 unsigned int base,
+                 unsigned int *value);
+int
 virXPathUInt(const char *xpath,
              xmlXPathContextPtr ctxt,
              unsigned int *value);
@@ -63,6 +68,11 @@ virXPathULong(const char *xpath,
               xmlXPathContextPtr ctxt,
               unsigned long *value);
 int
+virXPathULongLongBase(const char *xpath,
+                      xmlXPathContextPtr ctxt,
+                      unsigned int base,
+                      unsigned long long *value);
+int
 virXPathULongLong(const char *xpath,
                   xmlXPathContextPtr ctxt,
                   unsigned long long *value);