From e258adecd0e19a6cfe6afa232b89aa416368820e Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Mon, 6 Aug 2012 11:16:30 +0800 Subject: [PATCH] Provide new accessors for xmlOutputBuffer To avoid digging into buf->buffer insternal strcuture the two new entry points xmlOutputBufferGetContent() and xmlOutputBufferGetSize() should make the ode cleaner. * include/libxml/xmlIO.h: add two new functions * xmlIO.c: impement the 2 functions based on the new buffer entry points --- include/libxml/xmlIO.h | 6 ++++++ xmlIO.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h index c899f5be..0ccaeafc 100644 --- a/include/libxml/xmlIO.h +++ b/include/libxml/xmlIO.h @@ -245,6 +245,12 @@ XMLPUBFUN xmlOutputBufferPtr XMLCALL void *ioctx, xmlCharEncodingHandlerPtr encoder); +/* Couple of APIs to get the output without digging into the buffers */ +XMLPUBFUN const xmlChar * XMLCALL + xmlOutputBufferGetContent (xmlOutputBufferPtr out); +XMLPUBFUN size_t XMLCALL + xmlOutputBufferGetSize (xmlOutputBufferPtr out); + XMLPUBFUN int XMLCALL xmlOutputBufferWrite (xmlOutputBufferPtr out, int len, diff --git a/xmlIO.c b/xmlIO.c index 20ec1810..53bd8bfe 100644 --- a/xmlIO.c +++ b/xmlIO.c @@ -2922,6 +2922,39 @@ xmlOutputBufferCreateBuffer(xmlBufferPtr buffer, return(ret); } +/** + * xmlOutputBufferGetContent: + * @out: an xmlOutputBufferPtr + * + * Gives a pointer to the data currently held in the output buffer + * + * Returns a pointer to the data or NULL in case of error + */ +const xmlChar * +xmlOutputBufferGetContent(xmlOutputBufferPtr out) { + if ((out == NULL) || (out->buffer == NULL)) + return(NULL); + + return(xmlBufContent(out->buffer)); +} + +/** + * xmlOutputBufferGetSize: + * @out: an xmlOutputBufferPtr + * + * Gives the length of the data currently held in the output buffer + * + * Returns 0 in case or error or no data is held, the size otherwise + */ +size_t +xmlOutputBufferGetSize(xmlOutputBufferPtr out) { + if ((out == NULL) || (out->buffer == NULL)) + return(0); + + return(xmlBufUse(out->buffer)); +} + + #endif /* LIBXML_OUTPUT_ENABLED */ /**