[libgrss] Added shorthand internal function file_to_xml()



commit 45f6df174c2130b2d8ccabe2ef4bda362b67cd77
Author: Roberto Guido <bob4mail gmail com>
Date:   Thu Apr 29 05:06:16 2010 +0200

    Added shorthand internal function file_to_xml()

 src/feeds-group.c |   16 +---------------
 src/utils.c       |   14 ++++++++++++++
 src/utils.h       |    1 +
 3 files changed, 16 insertions(+), 15 deletions(-)
---
diff --git a/src/feeds-group.c b/src/feeds-group.c
index ea7a515..ec7c82e 100644
--- a/src/feeds-group.c
+++ b/src/feeds-group.c
@@ -144,27 +144,16 @@ retrieve_group_handler (FeedsGroup *group, xmlDocPtr doc, xmlNodePtr cur)
 GList*
 feeds_group_parse_file (FeedsGroup *group, const gchar *path, GError *error)
 {
-	gchar *contents;
-	gsize len;
 	GList *items;
-	GError *err;
 	xmlDocPtr doc;
 	xmlNodePtr cur;
 	FeedsGroupHandler *handler;
 
 	items = NULL;
 	doc = NULL;
-	contents = NULL;
 
 	do {
-		err = NULL;
-		if (g_file_get_contents (path, &contents, &len, &err) == FALSE) {
-			g_propagate_error (&error, err);
-			break;
-		}
-
-		doc = content_to_xml (contents, len);
-
+		doc = file_to_xml (path);
 		g_set_error (&error, FEEDS_GROUP_ERROR, FEEDS_GROUP_PARSE_ERROR, "Empty document");
 
 		if ((cur = xmlDocGetRootElement (doc)) == NULL)
@@ -192,9 +181,6 @@ feeds_group_parse_file (FeedsGroup *group, const gchar *path, GError *error)
 	if (doc != NULL)
 		xmlFreeDoc (doc);
 
-	if (contents != NULL)
-		g_free (contents);
-
 	return items;
 }
 
diff --git a/src/utils.c b/src/utils.c
index 2224a8d..0f89a67 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -298,6 +298,20 @@ content_to_xml (const gchar *contents, gsize size)
 	return doc;
 }
 
+xmlDocPtr
+file_to_xml (const gchar *path)
+{
+	xmlParserCtxtPtr ctxt;
+	xmlDocPtr doc;
+
+	ctxt = xmlNewParserCtxt ();
+	ctxt->sax->getEntity = xml_process_entities;
+	doc = xmlSAXParseFile (ctxt->sax, path, 0);
+	xmlFreeParserCtxt (ctxt);
+
+	return doc;
+}
+
 /* in theory, we'd need only the RFC822 timezones here
    in practice, feeds also use other timezones...        */
 static struct {
diff --git a/src/utils.h b/src/utils.h
index 41d60a7..a69f86b 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -43,6 +43,7 @@ gchar*		unxmlize		(gchar * string);
 gchar*		xhtml_extract		(xmlNodePtr xml, gint xhtmlMode, const gchar *defaultBase);
 
 xmlDocPtr	content_to_xml		(const gchar *contents, gsize size);
+xmlDocPtr	file_to_xml		(const gchar *path);
 
 time_t		date_parse_RFC822	(const gchar *date);
 time_t		date_parse_ISO8601	(const gchar *date);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]