summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/dllist.c24
-rw-r--r--src/common/dllist.h29
-rw-r--r--src/common/xml.c107
-rw-r--r--src/common/xml.h12
4 files changed, 129 insertions, 43 deletions
diff --git a/src/common/dllist.c b/src/common/dllist.c
index 5de3cd9..2a75768 100644
--- a/src/common/dllist.c
+++ b/src/common/dllist.c
@@ -79,27 +79,3 @@ void __dl_list_del(dl_list_item *item, dl_list_head *head)
}
}
-
-
-/******************************************************************************
-* *
-* Paramètres : item = point d'insertion. *
-* head = seconde liste à intégrer. *
-* *
-* Description : Insère une liste au sein d'une autre. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void __dl_list_splice(dl_list_item *pos, dl_list_head head)
-{
- pos->next->prev = head;
- head->prev->next = pos->next;
-
- pos->next = head;
- head->prev = pos;
-
-}
diff --git a/src/common/dllist.h b/src/common/dllist.h
index 3feef5c..499151e 100644
--- a/src/common/dllist.h
+++ b/src/common/dllist.h
@@ -58,9 +58,6 @@ void __dl_list_add(dl_list_item *, dl_list_head *, dl_list_item *, dl_list_item
/* Supprime un élément d'une liste doublement chaînée. */
void __dl_list_del(dl_list_item *, dl_list_head *);
-/* Insère une liste au sein d'une autre. */
-void __dl_list_splice(dl_list_item *, dl_list_head);
-
#define dl_list_empty(head) \
((head) == NULL)
@@ -79,6 +76,17 @@ void __dl_list_splice(dl_list_item *, dl_list_head);
} \
while (0)
+#define dl_list_add_before(new, head, pos, member) \
+ do \
+ { \
+ pos->member.prev->next = &new->member; \
+ new->member.prev = pos->member.prev; \
+ pos->member.prev = &new->member; \
+ new->member.next = &pos->member; \
+ if (pos == *head) *head = new; \
+ } \
+ while (0)
+
#define dl_list_add_tail(new, head, type, member) \
do \
{ \
@@ -109,21 +117,6 @@ void __dl_list_splice(dl_list_item *, dl_list_head);
_result; \
})
-#define dl_list_splice_before(pos, head1, head2, type, member) \
- do \
- { \
- if (pos == *head1) \
- { \
- __dl_list_splice(head2->member.prev, &(*head1)->member); \
- *head1 = head2; \
- } \
- else __dl_list_splice(pos->member.prev, &head2->member); \
- } \
- while(0)
-
-#define dl_list_splice_after(pos, head2, type, member) \
- __dl_list_splice(&pos->member, &head2->member);
-
#define dl_list_next_iter(iter, head, type, member) \
(iter->member.next == &head->member ? \
NULL : container_of(iter->member.next, type, member))
diff --git a/src/common/xml.c b/src/common/xml.c
index b89b4f9..eb450e0 100644
--- a/src/common/xml.c
+++ b/src/common/xml.c
@@ -26,6 +26,7 @@
#include <stdarg.h>
+#include <stdio.h>
#include <string.h>
@@ -694,6 +695,60 @@ xmlNodePtr get_node_from_xpath(xmlXPathContextPtr context, const char *path)
* Paramètres : xdoc = structure XML chargée. *
* context = contexte à utiliser pour les recherches. *
* path = chemin d'accès au noeud visé. *
+* name = nom du nouveau noeud à créer. *
+* *
+* Description : Ajoute un noeud à un autre noeud. *
+* *
+* Retour : Adresse du noeud mis en place ou NULL en cas d'échec. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+xmlNodePtr add_node_to_xpath(xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path, const char *name)
+{
+ xmlNodePtr result; /* Noeud créé à retourner */
+ xmlNodePtr parent; /* Support du nouveau noeud */
+
+ parent = get_node_from_xpath(context, path);
+ if (parent == NULL) return NULL;
+
+ return add_node_to_node(xdoc, parent, name);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : xdoc = structure XML chargée. *
+* parent = noeud parent de rattachement. *
+* name = nom du nouveau noeud à créer. *
+* *
+* Description : Ajoute un noeud à un autre noeud. *
+* *
+* Retour : Adresse du noeud mis en place ou NULL en cas d'échec. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+xmlNodePtr add_node_to_node(xmlDocPtr xdoc, xmlNodePtr parent, const char *name)
+{
+ xmlNodePtr result; /* Noeud créé à retourner */
+
+ result = xmlNewDocNode(xdoc, NULL, BAD_CAST name, NULL);
+ result = xmlAddChild(parent, result);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : xdoc = structure XML chargée. *
+* context = contexte à utiliser pour les recherches. *
+* path = chemin d'accès au noeud visé. *
* *
* Description : S'assure qu'un noeud donné est bien présent dans le document.*
* *
@@ -802,8 +857,58 @@ bool add_content_to_node(xmlDocPtr xdoc, xmlXPathContextPtr context, const char
node = ensure_node_exist(xdoc, context, path);
if (node == NULL) return false;
- xmlNodeSetContent(node, content);
+ xmlNodeSetContent(node, BAD_CAST content);
return true;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : node = noeud dont le contenu est à mettre à jour. *
+* name = nom de la propriété à créer. *
+* value = chaîne de caractère à placer. *
+* *
+* Description : Ajoute une propriété à un noeud existant donné. *
+* *
+* Retour : true en cas de succès, false sinon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool add_string_attribute_to_node(xmlNodePtr node, const char *name, const char *value)
+{
+ xmlAttrPtr attrib; /* Attribut créé et en place */
+
+ attrib = xmlSetProp(node, BAD_CAST name, BAD_CAST value);
+
+ return (attrib != NULL);
+
+}
+
+
+/******************************************************************************
+* *
+* 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_long_attribute_to_node(xmlNodePtr node, const char *name, long value)
+{
+ char tmp[11/*strlen("2147483647")*/]; /* Stockage temporaire */
+
+ snprintf(tmp, 11, "%ld", value);
+
+ return add_string_attribute_to_node(node, name, tmp);
+
+}
diff --git a/src/common/xml.h b/src/common/xml.h
index 82e2578..a555f56 100644
--- a/src/common/xml.h
+++ b/src/common/xml.h
@@ -111,12 +111,24 @@ bool write_xml_content(xmlTextWriterPtr, const char *, ...);
/* Fournit le premier noeud correspondant à un chemin XPath. */
xmlNodePtr get_node_from_xpath(xmlXPathContextPtr, const char *);
+/* Ajoute un noeud à un autre noeud. */
+xmlNodePtr add_node_to_path(xmlDocPtr, xmlXPathContextPtr, const char *, const char *);
+
+/* Ajoute un noeud à un autre noeud. */
+xmlNodePtr add_node_to_node(xmlDocPtr, xmlNodePtr, const char *);
+
/* S'assure qu'un noeud donné est bien présent dans le document. */
xmlNodePtr ensure_node_exist(xmlDocPtr, xmlXPathContextPtr, const char *);
/* S'assure qu'un noeud donné est bien présent dans le document. */
bool add_content_to_node(xmlDocPtr, xmlXPathContextPtr, const char *, const char *);
+/* Ajoute une propriété à un noeud existant donné. */
+bool add_string_attribute_to_node(xmlNodePtr, const char *, const char *);
+
+/* Ajoute une propriété à un noeud existant donné. */
+bool add_long_attribute_to_node(xmlNodePtr, const char *, long);
+
#endif /* _XML_H */