From 032449048eaddbee3f02324d33979ba0f6aa2719 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Sun, 12 Oct 2008 13:33:57 -0300 Subject: [PATCH] Update entry xml node before using it --- atom/entry.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/atom/entry.c b/atom/entry.c index fac28f2..99ab439 100644 --- a/atom/entry.c +++ b/atom/entry.c @@ -175,16 +175,65 @@ atom_entry_summary_set (AtomEntry *entry, char *summary) entry->summary = g_strdup (summary); } +static void +atom_entry_update_xmlnode (AtomEntry *entry) +{ + xmlNodePtr root; + xmlNodePtr id; + xmlNodePtr title; + xmlNodePtr summary; + xmlNodePtr author; + int i; + if (entry->doc == NULL) + { + entry->doc = xmlNewDoc ("1.0"); + root = xmlNewNode (NULL, "entry"); + xmlNewNs (root, ATOM_NAMESPACE, NULL); + xmlDocSetRootElement (entry->doc, root); + } + else + { + xmlNodePtr child; + xmlNodePtr next; + root = xmlDocGetRootElement (entry->doc); + child = root->xmlChildrenNode; + while (child != NULL) + { + next = child->next; + if (!xmlStrcmp (child->name, "id") || + !xmlStrcmp (child->name, "title") || + !xmlStrcmp (child->name, "summary") || + !xmlStrcmp (child->name, "author")) + { + xmlUnlinkNode (child); + xmlFreeNode (child); + } + child = next; + } + } + id = xmlNewTextChild (root, NULL, "id", entry->id); + title = xmlNewTextChild (root, NULL, "title", entry->title); + if (entry->summary) + summary = xmlNewTextChild (root, NULL, "summary", entry->summary); + for (i = 0; i < entry->authors->len; i++) + { + AtomPerson *person; + person = g_ptr_array_index (entry->authors, i); + author = atom_person_to_xmlnode (person, "author"); + xmlAddChild (root, author); + } +} + void atom_entry_string (AtomEntry *entry, char **buffer, size_t *len) { + atom_entry_update_xmlnode (entry); xmlDocDumpMemory (entry->doc, buffer, len); } xmlNodePtr atom_entry_to_xmlnode (AtomEntry *entry) { - if (entry->doc) - return xmlCopyNodeList (xmlDocGetRootElement (entry->doc)); - return NULL; + atom_entry_update_xmlnode (entry); + return xmlCopyNodeList (xmlDocGetRootElement (entry->doc)); } -- 2.20.1