From 2af29f720faac0a9ee3961a81b81acae9a716220 Mon Sep 17 00:00:00 2001 From: Emmanuel Pacaud Date: Tue, 14 Mar 2006 23:02:39 +0100 Subject: [PATCH] SVG: use xmlOutputBuffer for file creation, instead of dumping xml tree in a memory buffer. --- src/cairo-svg-surface.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index 58faa32e0..5d569bd6b 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -1342,21 +1342,32 @@ _cairo_svg_document_destroy (cairo_svg_document_t *document) free (document); } +static int +_cairo_svg_document_write (cairo_output_stream_t *output_stream, + const char * buffer, + int len) +{ + if (_cairo_output_stream_write (output_stream, buffer, len) != CAIRO_STATUS_SUCCESS) + return -1; +} + + static cairo_status_t _cairo_svg_document_finish (cairo_svg_document_t *document) { cairo_status_t status; cairo_output_stream_t *output = document->output_stream; - xmlChar *xml_buffer; - int xml_buffer_size; + xmlOutputBufferPtr xml_output_buffer; if (document->finished) return CAIRO_STATUS_SUCCESS; - /* FIXME: Dumping xml tree in memory is silly. */ - xmlDocDumpFormatMemoryEnc (document->xml_doc, &xml_buffer, &xml_buffer_size, "UTF-8", 1); - _cairo_output_stream_write (document->output_stream, xml_buffer, xml_buffer_size); - xmlFree(xml_buffer); + xml_output_buffer = xmlOutputBufferCreateIO ((xmlOutputWriteCallback) _cairo_svg_document_write, + (xmlOutputCloseCallback) NULL, + (void *) document->output_stream, + NULL); + xmlSaveFormatFileTo (xml_output_buffer, document->xml_doc, "UTF-8", 1); + xmlFreeDoc (document->xml_doc); status = _cairo_output_stream_get_status (output);