From 2512f75cec41ca4e6f8b95808530dbf1578ba412 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Tue, 22 Feb 2022 20:23:47 +0100
Subject: Extend XML features.

---
 src/common/xml.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/common/xml.h |  6 +++++
 2 files changed, 86 insertions(+)

diff --git a/src/common/xml.c b/src/common/xml.c
index 90c86cd..d3c1998 100644
--- a/src/common/xml.c
+++ b/src/common/xml.c
@@ -409,6 +409,86 @@ char *get_node_text_value(xmlXPathContextPtr xpathCtx, const char *path)
 
 /******************************************************************************
 *                                                                             *
+*  Paramètres  : xpathCtx = contexte à utiliser pour les recherches.          *
+*                path     = chemin d'accès au noeud visé.                     *
+*                out      = valeur booléenne associée à un noeud. [OUT]       *
+*                                                                             *
+*  Description : Obtient une valeur booléenne placée entre <...> et </...>.   *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool get_node_boolean_value(xmlXPathContextPtr xpathCtx, const char *path, bool *out)
+{
+    bool result;                            /* Bilan à retourner           */
+    char *value;                            /* Valeur brute lue            */
+
+    result = false;
+
+    value = get_node_text_value(xpathCtx, path);
+
+    if (value != NULL)
+    {
+        if (strlen(value) > 0)
+        {
+            result = true;
+            *out = (strcasecmp(value, "true") == 0 || strcmp(value, "1") == 0);
+        }
+
+        free(value);
+
+    }
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : xpathCtx = contexte à utiliser pour les recherches.          *
+*                path     = chemin d'accès au noeud visé.                     *
+*                out      = valeur entière associée à un noeud. [OUT]         *
+*                                                                             *
+*  Description : Obtient une valeur entière placée entre <...> et </...>.     *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool get_node_long_value(xmlXPathContextPtr xpathCtx, const char *path, long *out)
+{
+    bool result;                            /* Bilan à retourner           */
+    char *value;                            /* Valeur brute lue            */
+
+    result = false;
+
+    value = get_node_text_value(xpathCtx, path);
+
+    if (value != NULL)
+    {
+        if (strlen(value) > 0)
+        {
+            result = true;
+            *out = strtol(value, NULL, 10);
+        }
+
+        free(value);
+
+    }
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
 *  Paramètres  : node = noeud dont une propriété est à lire.                  *
 *                name = nom de la propriété à lire.                           *
 *                                                                             *
diff --git a/src/common/xml.h b/src/common/xml.h
index fe99b91..91f0552 100644
--- a/src/common/xml.h
+++ b/src/common/xml.h
@@ -74,6 +74,12 @@ char *qck_get_node_text_value(xmlNodePtr);
 /* Obtient une valeur placée entre <...> et </...>. */
 char *get_node_text_value(xmlXPathContextPtr, const char *);
 
+/* Obtient une valeur booléenne placée entre <...> et </...>. */
+bool get_node_boolean_value(xmlXPathContextPtr, const char *, bool *);
+
+/* Obtient une valeur entière placée entre <...> et </...>. */
+bool get_node_long_value(xmlXPathContextPtr, const char *, long *);
+
 /* Obtient la valeur d'une propriété d'un élément. */
 char *qck_get_node_prop_value(xmlNodePtr, const char *);
 
-- 
cgit v0.11.2-87-g4458