Merge branch 'master' into entry
[cascardo/atompub.git] / atom / entry.c
1 /*
2  *  Copyright (C) 2008  Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License along
15  *  with this program; if not, write to the Free Software Foundation, Inc.,
16  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18
19
20 #include <atompub/atom.h>
21
22 #include <glib.h>
23 #include <libxml/tree.h>
24 #include <libxml/parser.h>
25
26 #define ATOM_NAMESPACE "http://www.w3.org/2005/Atom"
27
28 struct _atom_entry
29 {
30   xmlDocPtr doc;
31 };
32
33 AtomEntry *
34 atom_entry_new_with_prefix (char *prefix)
35 {
36   AtomEntry *entry;
37   xmlDocPtr doc;
38   xmlNsPtr ns;
39   xmlNodePtr node;
40   doc = xmlNewDoc ("1.0");
41   node = xmlNewNode (ns, "entry");
42   xmlNewNs (node, ATOM_NAMESPACE, prefix);
43   xmlDocSetRootElement (doc, node);
44   entry = g_slice_new (AtomEntry);
45   entry->doc = doc;
46   return entry;
47 }
48
49 AtomEntry *
50 atom_entry_new (void)
51 {
52   return atom_entry_new_with_prefix (NULL);
53 }
54
55 AtomEntry *
56 atom_entry_new_data_len (char *data, size_t len)
57 {
58   AtomEntry *entry;
59   entry = g_slice_new (AtomEntry);
60   entry->doc = xmlParseMemory (data, len);
61   return entry;
62 }
63
64 void
65 atom_entry_delete (AtomEntry *entry)
66 {
67   if (entry->doc)
68     xmlFreeDoc (entry->doc);
69   g_slice_free (AtomEntry entry);
70 }
71
72 char *
73 atom_entry_string (AtomEntry *entry)
74 {
75   char *buffer;
76   int size;
77   xmlDocDumpMemory (entry->doc, &buffer, &size);
78   return buffer;
79 }
80
81 size_t
82 atom_entry_len (AtomEntry *entry)
83 {
84   char *buffer;
85   int size;
86   xmlDocDumpMemory (entry->doc, &buffer, &size);
87   xmlFree (buffer);
88   return size;
89 }