From 4299f29ac941292054b4e004aac51e1b143a386a Mon Sep 17 00:00:00 2001 From: Emanuele Aina Date: Tue, 26 Mar 2013 13:00:17 +0100 Subject: utils: Add empathy_xml_validate_from_resource() Validate against dtd stored in a GResource. https://bugzilla.gnome.org/show_bug.cgi?id=696974 --- libempathy/empathy-utils.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'libempathy/empathy-utils.c') diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index 74770c159..e074327b6 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -108,6 +108,41 @@ empathy_init (void) g_object_unref (am); } +gboolean +empathy_xml_validate_from_resource (xmlDoc *doc, + const gchar *dtd_resourcename) +{ + GBytes *resourcecontents; + gconstpointer resourcedata; + gsize resourcesize; + xmlParserInputBufferPtr buffer; + xmlValidCtxt cvp; + xmlDtd *dtd; + GError *error = NULL; + gboolean ret; + + DEBUG ("Loading dtd resource %s", dtd_resourcename); + + resourcecontents = g_resources_lookup_data (dtd_resourcename, G_RESOURCE_LOOKUP_FLAGS_NONE, &error); + if (error != NULL) + { + g_warning ("Unable to load dtd resource '%s': %s", dtd_resourcename, error->message); + g_error_free (error); + return FALSE; + } + resourcedata = g_bytes_get_data (resourcecontents, &resourcesize); + buffer = xmlParserInputBufferCreateStatic (resourcedata, resourcesize, XML_CHAR_ENCODING_UTF8); + + memset (&cvp, 0, sizeof (cvp)); + dtd = xmlIOParseDTD (NULL, buffer, XML_CHAR_ENCODING_UTF8); + ret = xmlValidateDtd (&cvp, doc, dtd); + + xmlFreeDtd (dtd); + g_bytes_unref (resourcecontents); + + return ret; +} + gboolean empathy_xml_validate (xmlDoc *doc, const gchar *dtd_filename) -- cgit v1.2.3