[librsvg] Add rsvg-xml.[ch]
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] Add rsvg-xml.[ch]
- Date: Tue, 22 Jun 2010 14:04:17 +0000 (UTC)
commit 9aa2584d2bc8cae32e90f50e4d10e7126e70751b
Author: Christian Persch <chpe gnome org>
Date: Tue Jun 22 16:03:39 2010 +0200
Add rsvg-xml.[ch]
Forgot to git add these. Part of bug #621699.
rsvg-xml.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
rsvg-xml.h | 35 ++++++++++++++++++++++
2 files changed, 131 insertions(+), 0 deletions(-)
---
diff --git a/rsvg-xml.c b/rsvg-xml.c
new file mode 100644
index 0000000..31f7ef0
--- /dev/null
+++ b/rsvg-xml.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright © 2010 Christian Persch
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 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
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+*/
+
+#include "config.h"
+
+#include "rsvg-xml.h"
+
+typedef struct {
+ GInputStream *stream;
+ GCancellable *cancellable;
+ GError **error;
+} RsvgXmlInputStreamContext;
+
+/* this should use gsize, but libxml2 is borked */
+static int
+context_read (RsvgXmlInputStreamContext *context,
+ char *buffer,
+ int len)
+{
+ gssize n_read;
+
+ if (*(context->error))
+ return -1;
+
+ n_read = g_input_stream_read (context->stream, buffer, (gsize) len,
+ context->cancellable,
+ context->error);
+ if (n_read < 0)
+ return -1;
+
+ return (int) n_read;
+}
+
+static int
+context_close (RsvgXmlInputStreamContext *context)
+{
+ gboolean ret;
+
+ /* Don't overwrite a previous error */
+ ret = g_input_stream_close (context->stream, context->cancellable,
+ *(context->error) == NULL ? context->error : NULL);
+
+ g_object_unref (context->stream);
+ if (context->cancellable)
+ g_object_unref (context->cancellable);
+ g_slice_free (RsvgXmlInputStreamContext, context);
+
+ return ret ? 0 : -1;
+}
+
+/**
+ * _rsvg_xml_input_buffer_new_from_stream:
+ * @context: a #xmlParserCtxtPtr
+ * @input_stream: a #GInputStream
+ *
+ * Returns: a new #xmlParserInputPtr wrapping @input_stream
+ */
+xmlParserInputBufferPtr
+_rsvg_xml_input_buffer_new_from_stream (GInputStream *stream,
+ GCancellable *cancellable,
+ xmlCharEncoding enc,
+ GError **error)
+
+{
+ RsvgXmlInputStreamContext *context;
+
+ g_return_val_if_fail (G_IS_INPUT_STREAM (stream), NULL);
+ g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
+ g_return_val_if_fail (error != NULL, NULL);
+
+ context = g_slice_new (RsvgXmlInputStreamContext);
+ context->stream = g_object_ref (stream);
+ context->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+ context->error = error;
+
+ return xmlParserInputBufferCreateIO ((xmlInputReadCallback) context_read,
+ (xmlInputCloseCallback) context_close,
+ context,
+ enc);
+}
diff --git a/rsvg-xml.h b/rsvg-xml.h
new file mode 100644
index 0000000..95158d8
--- /dev/null
+++ b/rsvg-xml.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright © 2010 Christian Persch
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 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
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+*/
+
+#ifndef RSVG_XML_H
+#define RSVG_XML_H
+
+#include <libxml/xmlIO.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+xmlParserInputBufferPtr _rsvg_xml_input_buffer_new_from_stream (GInputStream *stream,
+ GCancellable *cancellable,
+ xmlCharEncoding enc,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* !RSVG_XML_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]