From f907a9f051e3c7155075597dcaa6010acded083d Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Sat, 9 Aug 2008 19:50:45 -0300 Subject: [PATCH] Added AtomResource as a generalization for entries and feeds --- atom/Makefile.am | 2 +- atom/resource.c | 63 +++++++++++++++++++++++++++++++++++++ include/atompub/Makefile.am | 2 +- include/atompub/atom.h | 1 + include/atompub/resource.h | 34 ++++++++++++++++++++ 5 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 atom/resource.c create mode 100644 include/atompub/resource.h diff --git a/atom/Makefile.am b/atom/Makefile.am index a49a0ef..80cf24b 100644 --- a/atom/Makefile.am +++ b/atom/Makefile.am @@ -1,5 +1,5 @@ lib_LTLIBRARIES = libatom.la -libatom_la_SOURCES = entry.c person.c feed.c +libatom_la_SOURCES = entry.c person.c feed.c resource.c libatom_la_CFLAGS = -I$(top_srcdir)/include $(GLIB_CFLAGS) libatom_la_CFLAGS += $(XML_CFLAGS) libatom_la_LIBADD = $(GLIB_LIBS) $(XML_LIBS) diff --git a/atom/resource.c b/atom/resource.c new file mode 100644 index 0000000..00d76fe --- /dev/null +++ b/atom/resource.c @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2008 Thadeu Lima de Souza Cascardo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + + +#include + +#include + +struct _atom_resource +{ + char *str; + size_t len; +}; + +AtomResource * +atom_resource_new_from_feed (AtomFeed *feed) +{ + AtomResource *res; + res = g_slice_new (AtomResource); + atom_feed_string (feed, &(res->str), &(res->len)); + return res; +} + +AtomResource * +atom_resource_new_from_entry (AtomEntry *entry) +{ + AtomResource *res; + res = g_slice_new (AtomResource); + atom_entry_string (entry, &(res->str), &(res->len)); + return res; +} + +void +atom_resource_delete (AtomResource *res) +{ + if (res->str) + g_free (res->str); + g_slice_free (AtomResource, res); +} + +void +atom_resource_string (AtomResource *res, char **buffer, size_t *len) +{ + if (buffer) + *buffer = g_strdup (res->str); + if (len) + *len = res->len; +} diff --git a/include/atompub/Makefile.am b/include/atompub/Makefile.am index 46fbdf1..3b2816b 100644 --- a/include/atompub/Makefile.am +++ b/include/atompub/Makefile.am @@ -1,3 +1,3 @@ pkginclude_HEADERS = atom.h config.h ctx.h entry.h person.h error.h feed.h \ iri.h backend.h atom-glib.h error-glib.h atom-xml.h \ - entry-xml.h person-xml.h feed-xml.h globals.h + entry-xml.h person-xml.h feed-xml.h globals.h resource.h diff --git a/include/atompub/atom.h b/include/atompub/atom.h index b1625c3..cd59e46 100644 --- a/include/atompub/atom.h +++ b/include/atompub/atom.h @@ -28,6 +28,7 @@ #include #include #include +#include #include #endif diff --git a/include/atompub/resource.h b/include/atompub/resource.h new file mode 100644 index 0000000..a6a7f26 --- /dev/null +++ b/include/atompub/resource.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2008 Thadeu Lima de Souza Cascardo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + + +#ifndef ATOMPUB_RESOURCE_H +#define ATOMPUB_RESOURCE_H + +#include +#include +#include + +typedef struct _atom_resource AtomResource; + +AtomResource * atom_resource_new_from_feed (AtomFeed *); +AtomResource * atom_resource_new_from_entry (AtomEntry *); +void atom_resource_delete (AtomResource *); +void atom_resource_string (AtomResource *, char **, size_t *); + +#endif -- 2.20.1