| Index: third_party/libxml/src/xmlwriter.c
|
| diff --git a/third_party/libxml/src/xmlwriter.c b/third_party/libxml/src/xmlwriter.c
|
| index 11b15e03571e0973fcd697bdc67d0ff9cfcc824a..fac20ac047616a9d1c578f730f5ccd6e24d80a91 100644
|
| --- a/third_party/libxml/src/xmlwriter.c
|
| +++ b/third_party/libxml/src/xmlwriter.c
|
| @@ -21,15 +21,18 @@
|
|
|
| #include <libxml/xmlwriter.h>
|
|
|
| +#include "buf.h"
|
| +#include "enc.h"
|
| +#include "save.h"
|
| +
|
| #define B64LINELEN 72
|
| #define B64CRLF "\r\n"
|
|
|
| /*
|
| * The following VA_COPY was coded following an example in
|
| * the Samba project. It may not be sufficient for some
|
| - * esoteric implementations of va_list (i.e. it may need
|
| - * something involving a memcpy) but (hopefully) will be
|
| - * sufficient for libxml2.
|
| + * esoteric implementations of va_list but (hopefully) will
|
| + * be sufficient for libxml2.
|
| */
|
| #ifndef VA_COPY
|
| #ifdef HAVE_VA_COPY
|
| @@ -38,7 +41,12 @@
|
| #ifdef HAVE___VA_COPY
|
| #define VA_COPY(dest,src) __va_copy(dest, src)
|
| #else
|
| - #define VA_COPY(dest,src) (dest) = (src)
|
| + #ifndef VA_LIST_IS_ARRAY
|
| + #define VA_COPY(dest,src) (dest) = (src)
|
| + #else
|
| + #include <string.h>
|
| + #define VA_COPY(dest,src) memcpy((char *)(dest),(char *)(src),sizeof(va_list))
|
| + #endif
|
| #endif
|
| #endif
|
| #endif
|
| @@ -548,9 +556,9 @@ xmlTextWriterStartDocument(xmlTextWriterPtr writer, const char *version,
|
| writer->out->encoder = encoder;
|
| if (encoder != NULL) {
|
| if (writer->out->conv == NULL) {
|
| - writer->out->conv = xmlBufferCreateSize(4000);
|
| + writer->out->conv = xmlBufCreateSize(4000);
|
| }
|
| - xmlCharEncOutFunc(encoder, writer->out->conv, NULL);
|
| + xmlCharEncOutput(writer->out, 1);
|
| if ((writer->doc != NULL) && (writer->doc->encoding == NULL))
|
| writer->doc->encoding = xmlStrdup((xmlChar *)writer->out->encoder->name);
|
| } else
|
| @@ -1074,10 +1082,10 @@ xmlTextWriterStartElementNS(xmlTextWriterPtr writer,
|
| sum += count;
|
|
|
| if (namespaceURI != 0) {
|
| - xmlTextWriterNsStackEntry *p = (xmlTextWriterNsStackEntry *)
|
| + xmlTextWriterNsStackEntry *p = (xmlTextWriterNsStackEntry *)
|
| xmlMalloc(sizeof(xmlTextWriterNsStackEntry));
|
| if (p == 0) {
|
| - xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
|
| + xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
|
| "xmlTextWriterStartElementNS : out of memory!\n");
|
| return -1;
|
| }
|
| @@ -1501,8 +1509,8 @@ xmlTextWriterWriteString(xmlTextWriterPtr writer, const xmlChar * content)
|
| break;
|
| case XML_TEXTWRITER_ATTRIBUTE:
|
| buf = NULL;
|
| - xmlAttrSerializeTxtContent(writer->out->buffer, writer->doc,
|
| - NULL, content);
|
| + xmlBufAttrSerializeTxtContent(writer->out->buffer,
|
| + writer->doc, NULL, content);
|
| break;
|
| default:
|
| break;
|
| @@ -1663,7 +1671,7 @@ xmlTextWriterWriteBase64(xmlTextWriterPtr writer, const char *data,
|
| * Write hqx encoded data to an xmlOutputBuffer.
|
| * ::todo
|
| *
|
| - * Returns the bytes written (may be 0 because of buffering)
|
| + * Returns the bytes written (may be 0 because of buffering)
|
| * or -1 in case of error
|
| */
|
| static int
|
| @@ -1672,8 +1680,8 @@ xmlOutputBufferWriteBinHex(xmlOutputBufferPtr out,
|
| {
|
| int count;
|
| int sum;
|
| - static char hex[16] =
|
| - {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
|
| + static char hex[16] =
|
| + {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
|
| int i;
|
|
|
| if ((out == NULL) || (data == NULL) || (len < 0)) {
|
| @@ -1849,7 +1857,7 @@ xmlTextWriterStartAttributeNS(xmlTextWriterPtr writer,
|
| nsentry.uri = (xmlChar *)namespaceURI;
|
| nsentry.elem = xmlListFront(writer->nodes);
|
|
|
| - curns = (xmlTextWriterNsStackEntry *)xmlListSearch(writer->nsstack,
|
| + curns = (xmlTextWriterNsStackEntry *)xmlListSearch(writer->nsstack,
|
| (void *)&nsentry);
|
| if ((curns != NULL)) {
|
| xmlFree(buf);
|
| @@ -2234,10 +2242,12 @@ xmlTextWriterWriteElement(xmlTextWriterPtr writer, const xmlChar * name,
|
| if (count == -1)
|
| return -1;
|
| sum += count;
|
| - count = xmlTextWriterWriteString(writer, content);
|
| - if (count == -1)
|
| - return -1;
|
| - sum += count;
|
| + if (content != NULL) {
|
| + count = xmlTextWriterWriteString(writer, content);
|
| + if (count == -1)
|
| + return -1;
|
| + sum += count;
|
| + }
|
| count = xmlTextWriterEndElement(writer);
|
| if (count == -1)
|
| return -1;
|
| @@ -2496,8 +2506,8 @@ xmlTextWriterEndPI(xmlTextWriterPtr writer)
|
|
|
| if (writer->indent) {
|
| count = xmlOutputBufferWriteString(writer->out, "\n");
|
| - if (count < 0)
|
| - return -1;
|
| + if (count < 0)
|
| + return -1;
|
| sum += count;
|
| }
|
|
|
| @@ -4606,6 +4616,26 @@ xmlTextWriterSetIndentString(xmlTextWriterPtr writer, const xmlChar * str)
|
| }
|
|
|
| /**
|
| + * xmlTextWriterSetQuoteChar:
|
| + * @writer: the xmlTextWriterPtr
|
| + * @quotechar: the quote character
|
| + *
|
| + * Set the character used for quoting attributes.
|
| + *
|
| + * Returns -1 on error or 0 otherwise.
|
| + */
|
| +int
|
| +xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar)
|
| +{
|
| + if ((writer == NULL) || ((quotechar != '\'') && (quotechar != '"')))
|
| + return -1;
|
| +
|
| + writer->qchar = quotechar;
|
| +
|
| + return 0;
|
| +}
|
| +
|
| +/**
|
| * xmlTextWriterWriteIndent:
|
| * @writer: the xmlTextWriterPtr
|
| *
|
|
|