AtomEntry is now an opaque structure and may be read from a file
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sat, 9 Aug 2008 07:45:06 +0000 (04:45 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sat, 9 Aug 2008 07:45:06 +0000 (04:45 -0300)
src/atom.c

index 0c98cee..e458ce9 100644 (file)
  */
 
 
+#include <atompub/atom.h>
+
+#include <glib.h>
 #include <libxml/tree.h>
+#include <libxml/parser.h>
 
 #define ATOM_NAMESPACE "http://www.w3.org/2005/Atom"
 
-typedef xmlDocPtr AtomEntry;
+struct _atom_entry
+{
+  xmlDocPtr doc;
+};
 
-AtomEntry
+AtomEntry *
 atom_entry_new_with_prefix (char *prefix)
 {
+  AtomEntry *entry;
   xmlDocPtr doc;
   xmlNsPtr ns;
   xmlNodePtr node;
@@ -33,36 +41,49 @@ atom_entry_new_with_prefix (char *prefix)
   node = xmlNewNode (ns, "entry");
   xmlNewNs (node, ATOM_NAMESPACE, prefix);
   xmlDocSetRootElement (doc, node);
-  return doc;
+  entry = g_slice_new (AtomEntry);
+  entry->doc = doc;
+  return entry;
 }
 
-AtomEntry
+AtomEntry *
 atom_entry_new (void)
 {
   return atom_entry_new_with_prefix (NULL);
 }
 
+AtomEntry *
+atom_entry_new_data_len (char *data, size_t len)
+{
+  AtomEntry *entry;
+  entry = g_slice_new (AtomEntry);
+  entry->doc = xmlParseMemory (data, len);
+  return entry;
+}
+
 void
-atom_entry_delete (AtomEntry entry)
+atom_entry_delete (AtomEntry *entry)
 {
-  xmlFreeDoc (entry);
+  if (entry->doc)
+    xmlFreeDoc (entry->doc);
+  g_slice_free (AtomEntry entry);
 }
 
 char *
-atom_entry_string (AtomEntry entry)
+atom_entry_string (AtomEntry *entry)
 {
   char *buffer;
   int size;
-  xmlDocDumpMemory (entry, &buffer, &size);
+  xmlDocDumpMemory (entry->doc, &buffer, &size);
   return buffer;
 }
 
 size_t
-atom_entry_len (AtomEntry entry)
+atom_entry_len (AtomEntry *entry)
 {
   char *buffer;
   int size;
-  xmlDocDumpMemory (entry, &buffer, &size);
+  xmlDocDumpMemory (entry->doc, &buffer, &size);
   xmlFree (buffer);
   return size;
 }