summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/packed.c2
-rw-r--r--src/common/xml.c138
-rw-r--r--src/common/xml.h13
3 files changed, 152 insertions, 1 deletions
diff --git a/src/common/packed.c b/src/common/packed.c
index 163ed3b..a8ce3c5 100644
--- a/src/common/packed.c
+++ b/src/common/packed.c
@@ -141,7 +141,7 @@ bool has_more_data_in_packed_buffer(const packed_buffer *pbuf)
{
bool result; /* Bilan à retourner */
- result = (pbuf->pos < pbuf->used);
+ result = (pbuf->pos < (pbuf->used + sizeof(uint32_t)));
return result;
diff --git a/src/common/xml.c b/src/common/xml.c
index aaed2ea..3774359 100644
--- a/src/common/xml.c
+++ b/src/common/xml.c
@@ -25,6 +25,8 @@
#include "xml.h"
+#include <inttypes.h>
+#include <malloc.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -453,6 +455,43 @@ bool qck_get_node_prop_long_value(xmlNodePtr node, const char *name, long *out)
/******************************************************************************
* *
+* Paramètres : node = noeud dont une propriété est à lire. *
+* name = nom de la propriété à lire. *
+* out = valeur entière lue depuis le contenu textuel. [OUT] *
+* *
+* Description : Obtient la valeur entière d'une propriété d'un élément. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool qck_get_node_prop_uint64_value(xmlNodePtr node, const char *name, uint64_t *out)
+{
+ bool result; /* Bilan à retourner */
+ char *value; /* Valeur brute lue */
+
+ value = qck_get_node_prop_value(node, name);
+
+ if (value)
+ {
+ result = true;
+
+ *out = strtoull(value, NULL, 10);
+ free(value);
+
+ }
+ else
+ result = false;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : xpathCtx = contexte à utiliser pour les recherches. *
* path = chemin d'accès au noeud à traiter. *
* name = nom de la propriété à lire. *
@@ -522,6 +561,41 @@ bool get_node_prop_long_value(xmlXPathContextPtr xpathCtx, const char *path, con
/******************************************************************************
* *
+* Paramètres : xpathCtx = contexte à utiliser pour les recherches. *
+* path = chemin d'accès au noeud à traiter. *
+* name = nom de la propriété à lire. *
+* out = valeur entière obtenue via contenu textuel. [OUT] *
+* *
+* Description : Obtient la valeur entière d'une propriété d'un élément. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool get_node_prop_uint64_value(xmlXPathContextPtr xpathCtx, const char *path, const char *name, uint64_t *out)
+{
+ bool result; /* Bilan à retourner */
+ xmlXPathObjectPtr xpathObj; /* Point de départ XML */
+
+ result = NULL;
+
+ xpathObj = get_node_xpath_object(xpathCtx, path);
+ if (xpathObj == NULL) return NULL;
+
+ if (xpathObj->nodesetval->nodeNr > 0)
+ result = qck_get_node_prop_uint64_value(xpathObj->nodesetval->nodeTab[0], name, out);
+
+ xmlXPathFreeObject(xpathObj);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : node = noeud de texte avec un lien avec le document XML. *
* *
* Description : Construit un chemin d'accès complet selon le fichier XML. *
@@ -1250,3 +1324,67 @@ bool add_long_attribute_to_node(xmlDocPtr xdoc, xmlXPathContextPtr context, cons
return _add_long_attribute_to_node(node, name, value);
}
+
+
+/******************************************************************************
+* *
+* Paramètres : node = noeud dont le contenu est à mettre à jour. *
+* name = nom de la propriété à créer. *
+* value = valeur numérique à placer. *
+* *
+* Description : Ajoute une propriété à un noeud existant donné. *
+* *
+* Retour : true en cas de succès, false sinon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool _add_uint64_attribute_to_node(xmlNodePtr node, const char *name, uint64_t value)
+{
+ bool result; /* Bilan à retourner */
+ char *tmp; /* Stockage temporaire */
+ int ret; /* Bilan de l'impression */
+
+ ret = asprintf(&tmp, "%" PRIu64, value);
+
+ if (ret == -1)
+ result = false;
+
+ else
+ {
+ result = _add_string_attribute_to_node(node, name, tmp);
+ free(tmp);
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : xdoc = structure XML chargée. *
+* context = contexte à utiliser pour les recherches. *
+* path = chemin d'accès au noeud visé. *
+* name = nom de la propriété à créer. *
+* value = valeur numérique à placer. *
+* *
+* Description : Ajoute une propriété à un noeud existant donné. *
+* *
+* Retour : true en cas de succès, false sinon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool add_uint64_attribute_to_node(xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path, const char *name, uint64_t value)
+{
+ xmlNodePtr node; /* Noeud à modifier */
+
+ node = ensure_node_exist(xdoc, context, path);
+ if (node == NULL) return false;
+
+ return _add_uint64_attribute_to_node(node, name, value);
+
+}
diff --git a/src/common/xml.h b/src/common/xml.h
index ed009c6..5ae7664 100644
--- a/src/common/xml.h
+++ b/src/common/xml.h
@@ -28,6 +28,7 @@
#include <glib.h>
#include <stdbool.h>
+#include <stdint.h>
#include <libxml/tree.h>
#include <libxml/xmlwriter.h>
#include <libxml/xpath.h>
@@ -79,12 +80,18 @@ char *qck_get_node_prop_value(xmlNodePtr, const char *);
/* Obtient la valeur entière d'une propriété d'un élément. */
bool qck_get_node_prop_long_value(xmlNodePtr, const char *, long *);
+/* Obtient la valeur entière d'une propriété d'un élément. */
+bool qck_get_node_prop_uint64_value(xmlNodePtr, const char *, uint64_t *);
+
/* Obtient la valeur d'une propriété d'un élément. */
char *get_node_prop_value(xmlXPathContextPtr, const char *, const char *);
/* Obtient la valeur entière d'une propriété d'un élément. */
bool get_node_prop_long_value(xmlXPathContextPtr, const char *, const char *, long *);
+/* Obtient la valeur entière d'une propriété d'un élément. */
+bool get_node_prop_uint64_value(xmlXPathContextPtr, const char *, const char *, uint64_t *);
+
/* Construit un chemin d'accès complet selon le fichier XML. */
char *qck_build_filename_with_doc_url(xmlNodePtr);
@@ -158,6 +165,12 @@ bool _add_long_attribute_to_node(xmlNodePtr, const char *, long);
/* Ajoute une propriété à un noeud existant donné. */
bool add_long_attribute_to_node(xmlDocPtr, xmlXPathContextPtr, const char *, const char *, long);
+/* Ajoute une propriété à un noeud existant donné. */
+bool _add_uint64_attribute_to_node(xmlNodePtr, const char *, uint64_t);
+
+/* Ajoute une propriété à un noeud existant donné. */
+bool add_uint64_attribute_to_node(xmlDocPtr, xmlXPathContextPtr, const char *, const char *, uint64_t);
+
#endif /* _XML_H */