projects
/
cascardo
/
atompub.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed setting an entry title
[cascardo/atompub.git]
/
atom
/
entry.c
diff --git
a/atom/entry.c
b/atom/entry.c
index
d366500
..
fac28f2
100644
(file)
--- a/
atom/entry.c
+++ b/
atom/entry.c
@@
-23,17
+23,18
@@
#include <libxml/tree.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/parser.h>
-#define ATOM_NAMESPACE "http://www.w3.org/2005/Atom"
-
struct _atom_entry
{
xmlDocPtr doc;
char *id;
char *title;
struct _atom_entry
{
xmlDocPtr doc;
char *id;
char *title;
-
AtomPerson *author
;
+
GPtrArray *authors
;
char *summary;
};
char *summary;
};
+void atom_entry_author_add (AtomEntry *, AtomPerson *);
+static void atom_entry_authors_delete (AtomEntry *);
+
AtomEntry *
atom_entry_new (char *title, AtomPerson *author)
{
AtomEntry *
atom_entry_new (char *title, AtomPerson *author)
{
@@
-42,7
+43,8
@@
atom_entry_new (char *title, AtomPerson *author)
entry->doc = NULL;
entry->id = NULL;
entry->title = g_strdup (title);
entry->doc = NULL;
entry->id = NULL;
entry->title = g_strdup (title);
- entry->author = author;
+ entry->authors = NULL;
+ atom_entry_author_add (entry, author);
entry->summary = NULL;
return entry;
}
entry->summary = NULL;
return entry;
}
@@
-54,7
+56,8
@@
atom_entry_new_data_len (char *data, size_t len)
xmlNodePtr root;
xmlNodePtr child;
entry = g_slice_new0 (AtomEntry);
xmlNodePtr root;
xmlNodePtr child;
entry = g_slice_new0 (AtomEntry);
- entry->doc = xmlReadMemory (data, len, NULL, NULL, XML_PARSE_RECOVER);
+ entry->doc = xmlReadMemory (data, len, NULL, NULL,
+ XML_PARSE_RECOVER | XML_PARSE_NOERROR);
if (entry->doc == NULL ||
(root = xmlDocGetRootElement (entry->doc)) == NULL)
{
if (entry->doc == NULL ||
(root = xmlDocGetRootElement (entry->doc)) == NULL)
{
@@
-78,7
+81,7
@@
atom_entry_new_data_len (char *data, size_t len)
else if (!xmlStrcmp (child->name, "summary"))
entry->summary = content;
else if (!xmlStrcmp (child->name, "author"))
else if (!xmlStrcmp (child->name, "summary"))
entry->summary = content;
else if (!xmlStrcmp (child->name, "author"))
-
entry->author = atom_person_new_from_xmlnode (child
);
+
atom_entry_author_add (entry, atom_person_new_from_xmlnode (child)
);
else
xmlFree (content);
}
else
xmlFree (content);
}
@@
-94,8
+97,8
@@
atom_entry_delete (AtomEntry *entry)
g_free (entry->id);
if (entry->title)
g_free (entry->title);
g_free (entry->id);
if (entry->title)
g_free (entry->title);
- if (entry->author)
- atom_
person_delete (entry->author
);
+ if (entry->author
s
)
+ atom_
entry_authors_delete (entry
);
if (entry->summary)
g_free (entry->summary);
g_slice_free (AtomEntry, entry);
if (entry->summary)
g_free (entry->summary);
g_slice_free (AtomEntry, entry);
@@
-126,21
+129,36
@@
atom_entry_title_set (AtomEntry *entry, char *title)
{
if (entry->title)
g_free (title);
{
if (entry->title)
g_free (title);
- entry->title = g_strdup (
entry
);
+ entry->title = g_strdup (
title
);
}
}
-AtomPerson *
-atom_entry_author
(AtomEntry *entry
)
+void
+atom_entry_author
s (AtomEntry *entry, AtomPerson *** authors, size_t *len
)
{
{
- return entry->author;
+ if (len)
+ *len = entry->authors->len;
+ if (authors)
+ *authors = entry->authors->pdata;
}
void
}
void
-atom_entry_author_set (AtomEntry *entry, AtomPerson *author)
+atom_entry_author_add (AtomEntry *entry, AtomPerson *author)
+{
+ if (entry->authors == NULL)
+ {
+ entry->authors = g_ptr_array_new ();
+ }
+ g_ptr_array_add (entry->authors, author);
+}
+
+static void
+atom_entry_authors_delete (AtomEntry *entry)
{
{
- if (entry->author)
- atom_person_delete (entry->author);
- entry->author = author;
+ size_t len = entry->authors->len;
+ int i;
+ for (i = 0; i < len; i++)
+ atom_person_delete (g_ptr_array_index (entry->authors, i));
+ g_ptr_array_free (entry->authors, TRUE);
}
char *
}
char *
@@
-157,21
+175,16
@@
atom_entry_summary_set (AtomEntry *entry, char *summary)
entry->summary = g_strdup (summary);
}
entry->summary = g_strdup (summary);
}
-char *
-atom_entry_string (AtomEntry *entry)
+void
+atom_entry_string (AtomEntry *entry
, char **buffer, size_t *len
)
{
{
- char *buffer;
- int size;
- xmlDocDumpMemory (entry->doc, &buffer, &size);
- return buffer;
+ xmlDocDumpMemory (entry->doc, buffer, len);
}
}
-size_t
-atom_entry_
len
(AtomEntry *entry)
+xmlNodePtr
+atom_entry_
to_xmlnode
(AtomEntry *entry)
{
{
- char *buffer;
- int size;
- xmlDocDumpMemory (entry->doc, &buffer, &size);
- xmlFree (buffer);
- return size;
+ if (entry->doc)
+ return xmlCopyNodeList (xmlDocGetRootElement (entry->doc));
+ return NULL;
}
}