Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Unified Diff: third_party/libxml/patches/icu

Issue 1193533007: Upgrade to libxml 2.9.2 and libxslt 1.1.28 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: no iconv Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/libxml/patches/bug_651202 ('k') | third_party/libxml/patches/icu-configure » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/libxml/patches/icu
diff --git a/third_party/libxml/patches/icu b/third_party/libxml/patches/icu
deleted file mode 100644
index 4503f922fcb32ede3fab33aa7d508253e87cdb28..0000000000000000000000000000000000000000
--- a/third_party/libxml/patches/icu
+++ /dev/null
@@ -1,453 +0,0 @@
-Add code support for ICU.
-
-diff --git a/third_party/libxml/encoding.c b/third_party/libxml/encoding.c
-index b86a547..0f41df9 100644
---- a/third_party/libxml/encoding.c
-+++ b/third_party/libxml/encoding.c
-@@ -58,7 +58,7 @@ static xmlCharEncodingAliasPtr xmlCharEncodingAliases = NULL;
- static int xmlCharEncodingAliasesNb = 0;
- static int xmlCharEncodingAliasesMax = 0;
-
--#ifdef LIBXML_ICONV_ENABLED
-+#if defined(LIBXML_ICONV_ENABLED) || defined(LIBXML_ICU_ENABLED)
- #if 0
- #define DEBUG_ENCODING /* Define this to get encoding traces */
- #endif
-@@ -97,6 +97,54 @@ xmlEncodingErr(xmlParserErrors error, const char *msg, const char *val)
- NULL, 0, val, NULL, NULL, 0, 0, msg, val);
- }
-
-+#ifdef LIBXML_ICU_ENABLED
-+static uconv_t*
-+openIcuConverter(const char* name, int toUnicode)
-+{
-+ UErrorCode status = U_ZERO_ERROR;
-+ uconv_t *conv = (uconv_t *) xmlMalloc(sizeof(uconv_t));
-+ if (conv == NULL)
-+ return NULL;
-+
-+ conv->uconv = ucnv_open(name, &status);
-+ if (U_FAILURE(status))
-+ goto error;
-+
-+ status = U_ZERO_ERROR;
-+ if (toUnicode) {
-+ ucnv_setToUCallBack(conv->uconv, UCNV_TO_U_CALLBACK_STOP,
-+ NULL, NULL, NULL, &status);
-+ }
-+ else {
-+ ucnv_setFromUCallBack(conv->uconv, UCNV_FROM_U_CALLBACK_STOP,
-+ NULL, NULL, NULL, &status);
-+ }
-+ if (U_FAILURE(status))
-+ goto error;
-+
-+ status = U_ZERO_ERROR;
-+ conv->utf8 = ucnv_open("UTF-8", &status);
-+ if (U_SUCCESS(status))
-+ return conv;
-+
-+error:
-+ if (conv->uconv)
-+ ucnv_close(conv->uconv);
-+ xmlFree(conv);
-+ return NULL;
-+}
-+
-+static void
-+closeIcuConverter(uconv_t *conv)
-+{
-+ if (conv != NULL) {
-+ ucnv_close(conv->uconv);
-+ ucnv_close(conv->utf8);
-+ xmlFree(conv);
-+ }
-+}
-+#endif /* LIBXML_ICU_ENABLED */
-+
- /************************************************************************
- * *
- * Conversions To/From UTF8 encoding *
-@@ -1306,7 +1354,11 @@ xmlNewCharEncodingHandler(const char *name,
- #ifdef LIBXML_ICONV_ENABLED
- handler->iconv_in = NULL;
- handler->iconv_out = NULL;
--#endif /* LIBXML_ICONV_ENABLED */
-+#endif
-+#ifdef LIBXML_ICU_ENABLED
-+ handler->uconv_in = NULL;
-+ handler->uconv_out = NULL;
-+#endif
-
- /*
- * registers and returns the handler.
-@@ -1371,7 +1423,7 @@ xmlInitCharEncodingHandlers(void) {
- xmlNewCharEncodingHandler("ASCII", asciiToUTF8, NULL);
- xmlNewCharEncodingHandler("US-ASCII", asciiToUTF8, NULL);
- #endif /* LIBXML_OUTPUT_ENABLED */
--#ifndef LIBXML_ICONV_ENABLED
-+#if !defined(LIBXML_ICONV_ENABLED) && !defined(LIBXML_ICU_ENABLED)
- #ifdef LIBXML_ISO8859X_ENABLED
- xmlRegisterCharEncodingHandlersISO8859x ();
- #endif
-@@ -1578,6 +1630,10 @@ xmlFindCharEncodingHandler(const char *name) {
- xmlCharEncodingHandlerPtr enc;
- iconv_t icv_in, icv_out;
- #endif /* LIBXML_ICONV_ENABLED */
-+#ifdef LIBXML_ICU_ENABLED
-+ xmlCharEncodingHandlerPtr enc;
-+ uconv_t *ucv_in, *ucv_out;
-+#endif /* LIBXML_ICU_ENABLED */
- char upper[100];
- int i;
-
-@@ -1647,6 +1703,35 @@ xmlFindCharEncodingHandler(const char *name) {
- "iconv : problems with filters for '%s'\n", name);
- }
- #endif /* LIBXML_ICONV_ENABLED */
-+#ifdef LIBXML_ICU_ENABLED
-+ /* check whether icu can handle this */
-+ ucv_in = openIcuConverter(name, 1);
-+ ucv_out = openIcuConverter(name, 0);
-+ if (ucv_in != NULL && ucv_out != NULL) {
-+ enc = (xmlCharEncodingHandlerPtr)
-+ xmlMalloc(sizeof(xmlCharEncodingHandler));
-+ if (enc == NULL) {
-+ closeIcuConverter(ucv_in);
-+ closeIcuConverter(ucv_out);
-+ return(NULL);
-+ }
-+ enc->name = xmlMemStrdup(name);
-+ enc->input = NULL;
-+ enc->output = NULL;
-+ enc->uconv_in = ucv_in;
-+ enc->uconv_out = ucv_out;
-+#ifdef DEBUG_ENCODING
-+ xmlGenericError(xmlGenericErrorContext,
-+ "Found ICU converter handler for encoding %s\n", name);
-+#endif
-+ return enc;
-+ } else if (ucv_in != NULL || ucv_out != NULL) {
-+ closeIcuConverter(ucv_in);
-+ closeIcuConverter(ucv_out);
-+ xmlEncodingErr(XML_ERR_INTERNAL_ERROR,
-+ "ICU converter : problems with filters for '%s'\n", name);
-+ }
-+#endif /* LIBXML_ICU_ENABLED */
-
- #ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
-@@ -1737,6 +1822,75 @@ xmlIconvWrapper(iconv_t cd, unsigned char *out, int *outlen,
-
- /************************************************************************
- * *
-+ * ICU based generic conversion functions *
-+ * *
-+ ************************************************************************/
-+
-+#ifdef LIBXML_ICU_ENABLED
-+/**
-+ * xmlUconvWrapper:
-+ * @cd: ICU uconverter data structure
-+ * @toUnicode : non-zero if toUnicode. 0 otherwise.
-+ * @out: a pointer to an array of bytes to store the result
-+ * @outlen: the length of @out
-+ * @in: a pointer to an array of ISO Latin 1 chars
-+ * @inlen: the length of @in
-+ *
-+ * Returns 0 if success, or
-+ * -1 by lack of space, or
-+ * -2 if the transcoding fails (for *in is not valid utf8 string or
-+ * the result of transformation can't fit into the encoding we want), or
-+ * -3 if there the last byte can't form a single output char.
-+ *
-+ * The value of @inlen after return is the number of octets consumed
-+ * as the return value is positive, else unpredictable.
-+ * The value of @outlen after return is the number of ocetes consumed.
-+ */
-+static int
-+xmlUconvWrapper(uconv_t *cd, int toUnicode, unsigned char *out, int *outlen,
-+ const unsigned char *in, int *inlen) {
-+ const char *ucv_in = (const char *) in;
-+ char *ucv_out = (char *) out;
-+ UErrorCode err = U_ZERO_ERROR;
-+
-+ if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || (in == NULL)) {
-+ if (outlen != NULL) *outlen = 0;
-+ return(-1);
-+ }
-+
-+ /*
-+ * TODO(jungshik)
-+ * 1. is ucnv_convert(To|From)Algorithmic better?
-+ * 2. had we better use an explicit pivot buffer?
-+ * 3. error returned comes from 'fromUnicode' only even
-+ * when toUnicode is true !
-+ */
-+ if (toUnicode) {
-+ /* encoding => UTF-16 => UTF-8 */
-+ ucnv_convertEx(cd->utf8, cd->uconv, &ucv_out, ucv_out + *outlen,
-+ &ucv_in, ucv_in + *inlen, NULL, NULL, NULL, NULL,
-+ 0, TRUE, &err);
-+ } else {
-+ /* UTF-8 => UTF-16 => encoding */
-+ ucnv_convertEx(cd->uconv, cd->utf8, &ucv_out, ucv_out + *outlen,
-+ &ucv_in, ucv_in + *inlen, NULL, NULL, NULL, NULL,
-+ 0, TRUE, &err);
-+ }
-+ *inlen = ucv_in - (const char*) in;
-+ *outlen = ucv_out - (char *) out;
-+ if (U_SUCCESS(err))
-+ return 0;
-+ if (err == U_BUFFER_OVERFLOW_ERROR)
-+ return -1;
-+ if (err == U_INVALID_CHAR_FOUND || err == U_ILLEGAL_CHAR_FOUND)
-+ return -2;
-+ /* if (err == U_TRUNCATED_CHAR_FOUND) */
-+ return -3;
-+}
-+#endif /* LIBXML_ICU_ENABLED */
-+
-+/************************************************************************
-+ * *
- * The real API used by libxml for on-the-fly conversion *
- * *
- ************************************************************************/
-@@ -1810,6 +1964,16 @@ xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out,
- if (ret == -1) ret = -3;
- }
- #endif /* LIBXML_ICONV_ENABLED */
-+#ifdef LIBXML_ICU_ENABLED
-+ else if (handler->uconv_in != NULL) {
-+ ret = xmlUconvWrapper(handler->uconv_in, 1, &out->content[out->use],
-+ &written, in->content, &toconv);
-+ xmlBufferShrink(in, toconv);
-+ out->use += written;
-+ out->content[out->use] = 0;
-+ if (ret == -1) ret = -3;
-+ }
-+#endif /* LIBXML_ICU_ENABLED */
- #ifdef DEBUG_ENCODING
- switch (ret) {
- case 0:
-@@ -1915,6 +2079,17 @@ xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out,
- ret = -3;
- }
- #endif /* LIBXML_ICONV_ENABLED */
-+#ifdef LIBXML_ICU_ENABLED
-+ else if (handler->uconv_in != NULL) {
-+ ret = xmlUconvWrapper(handler->uconv_in, 1, &out->content[out->use],
-+ &written, in->content, &toconv);
-+ xmlBufferShrink(in, toconv);
-+ out->use += written;
-+ out->content[out->use] = 0;
-+ if (ret == -1)
-+ ret = -3;
-+ }
-+#endif /* LIBXML_ICU_ENABLED */
- switch (ret) {
- case 0:
- #ifdef DEBUG_ENCODING
-@@ -2015,6 +2190,15 @@ retry:
- out->content[out->use] = 0;
- }
- #endif /* LIBXML_ICONV_ENABLED */
-+#ifdef LIBXML_ICU_ENABLED
-+ else if (handler->uconv_out != NULL) {
-+ ret = xmlUconvWrapper(handler->uconv_out, 0,
-+ &out->content[out->use],
-+ &written, NULL, &toconv);
-+ out->use += written;
-+ out->content[out->use] = 0;
-+ }
-+#endif /* LIBXML_ICU_ENABLED */
- #ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "initialized encoder\n");
-@@ -2061,6 +2245,26 @@ retry:
- }
- }
- #endif /* LIBXML_ICONV_ENABLED */
-+#ifdef LIBXML_ICU_ENABLED
-+ else if (handler->uconv_out != NULL) {
-+ ret = xmlUconvWrapper(handler->uconv_out, 0,
-+ &out->content[out->use],
-+ &written, in->content, &toconv);
-+ xmlBufferShrink(in, toconv);
-+ out->use += written;
-+ writtentot += written;
-+ out->content[out->use] = 0;
-+ if (ret == -1) {
-+ if (written > 0) {
-+ /*
-+ * Can be a limitation of iconv
-+ */
-+ goto retry;
-+ }
-+ ret = -3;
-+ }
-+ }
-+#endif /* LIBXML_ICU_ENABLED */
- else {
- xmlEncodingErr(XML_I18N_NO_OUTPUT,
- "xmlCharEncOutFunc: no output function !\n", NULL);
-@@ -2173,6 +2377,22 @@ xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) {
- xmlFree(handler);
- }
- #endif /* LIBXML_ICONV_ENABLED */
-+#ifdef LIBXML_ICU_ENABLED
-+ if ((handler->uconv_out != NULL) || (handler->uconv_in != NULL)) {
-+ if (handler->name != NULL)
-+ xmlFree(handler->name);
-+ handler->name = NULL;
-+ if (handler->uconv_out != NULL) {
-+ closeIcuConverter(handler->uconv_out);
-+ handler->uconv_out = NULL;
-+ }
-+ if (handler->uconv_in != NULL) {
-+ closeIcuConverter(handler->uconv_in);
-+ handler->uconv_in = NULL;
-+ }
-+ xmlFree(handler);
-+ }
-+#endif
- #ifdef DEBUG_ENCODING
- if (ret)
- xmlGenericError(xmlGenericErrorContext,
-@@ -2248,6 +2468,22 @@ xmlByteConsumed(xmlParserCtxtPtr ctxt) {
- cur += toconv;
- } while (ret == -2);
- #endif
-+#ifdef LIBXML_ICU_ENABLED
-+ } else if (handler->uconv_out != NULL) {
-+ do {
-+ toconv = in->end - cur;
-+ written = 32000;
-+ ret = xmlUconvWrapper(handler->uconv_out, 0, &convbuf[0],
-+ &written, cur, &toconv);
-+ if (ret < 0) {
-+ if (written > 0)
-+ ret = -2;
-+ else
-+ return(-1);
-+ }
-+ unused += written;
-+ cur += toconv;
-+ } while (ret == -2);
- } else {
- /* could not find a converter */
- return(-1);
-@@ -2259,8 +2495,9 @@ xmlByteConsumed(xmlParserCtxtPtr ctxt) {
- }
- return(in->consumed + (in->cur - in->base));
- }
-+#endif
-
--#ifndef LIBXML_ICONV_ENABLED
-+#if !defined(LIBXML_ICONV_ENABLED) && !defined(LIBXML_ICU_ENABLED)
- #ifdef LIBXML_ISO8859X_ENABLED
-
- /**
-diff --git a/third_party/libxml/include/libxml/encoding.h b/third_party/libxml/include/libxml/encoding.h
-index c74b25f..b5f8b48 100644
---- a/third_party/libxml/include/libxml/encoding.h
-+++ b/third_party/libxml/include/libxml/encoding.h
-@@ -26,6 +26,24 @@
-
- #ifdef LIBXML_ICONV_ENABLED
- #include <iconv.h>
-+#else
-+#ifdef LIBXML_ICU_ENABLED
-+#include <unicode/ucnv.h>
-+#if 0
-+/* Forward-declare UConverter here rather than pulling in <unicode/ucnv.h>
-+ * to prevent unwanted ICU symbols being exposed to users of libxml2.
-+ * One particular case is Qt4 conflicting on UChar32.
-+ */
-+#include <stdint.h>
-+struct UConverter;
-+typedef struct UConverter UConverter;
-+#ifdef _MSC_VER
-+typedef wchar_t UChar;
-+#else
-+typedef uint16_t UChar;
-+#endif
-+#endif
-+#endif
- #endif
- #ifdef __cplusplus
- extern "C" {
-@@ -125,6 +143,13 @@ typedef int (* xmlCharEncodingOutputFunc)(unsigned char *out, int *outlen,
- * Block defining the handlers for non UTF-8 encodings.
- * If iconv is supported, there are two extra fields.
- */
-+#ifdef LIBXML_ICU_ENABLED
-+struct _uconv_t {
-+ UConverter *uconv; /* for conversion between an encoding and UTF-16 */
-+ UConverter *utf8; /* for conversion between UTF-8 and UTF-16 */
-+};
-+typedef struct _uconv_t uconv_t;
-+#endif
-
- typedef struct _xmlCharEncodingHandler xmlCharEncodingHandler;
- typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr;
-@@ -136,6 +161,10 @@ struct _xmlCharEncodingHandler {
- iconv_t iconv_in;
- iconv_t iconv_out;
- #endif /* LIBXML_ICONV_ENABLED */
-+#ifdef LIBXML_ICU_ENABLED
-+ uconv_t *uconv_in;
-+ uconv_t *uconv_out;
-+#endif /* LIBXML_ICU_ENABLED */
- };
-
- #ifdef __cplusplus
-diff --git a/third_party/libxml/include/libxml/parser.h b/third_party/libxml/include/libxml/parser.h
-index dd79c42..3580b63 100644
---- a/third_party/libxml/include/libxml/parser.h
-+++ b/third_party/libxml/include/libxml/parser.h
-@@ -1222,6 +1222,7 @@ typedef enum {
- XML_WITH_DEBUG_MEM = 29,
- XML_WITH_DEBUG_RUN = 30,
- XML_WITH_ZLIB = 31,
-+ XML_WITH_ICU = 32,
- XML_WITH_NONE = 99999 /* just to be sure of allocation size */
- } xmlFeature;
-
-diff --git a/third_party/libxml/include/libxml/xmlversion.h.in b/third_party/libxml/include/libxml/xmlversion.h.in
-index 4739f3a..de310ab 100644
---- a/third_party/libxml/include/libxml/xmlversion.h.in
-+++ b/third_party/libxml/include/libxml/xmlversion.h.in
-@@ -269,6 +269,15 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
- #endif
-
- /**
-+ * LIBXML_ICU_ENABLED:
-+ *
-+ * Whether icu support is available
-+ */
-+#if @WITH_ICU@
-+#define LIBXML_ICU_ENABLED
-+#endif
-+
-+/**
- * LIBXML_ISO8859X_ENABLED:
- *
- * Whether ISO-8859-* support is made available in case iconv is not
-diff --git a/third_party/libxml/parser.c b/third_party/libxml/parser.c
-index 85e7599..3ba2a06 100644
---- a/third_party/libxml/parser.c
-+++ b/third_party/libxml/parser.c
-@@ -954,6 +954,12 @@ xmlHasFeature(xmlFeature feature)
- #else
- return(0);
- #endif
-+ case XML_WITH_ICU:
-+#ifdef LIBXML_ICU_ENABLED
-+ return(1);
-+#else
-+ return(0);
-+#endif
- default:
- break;
- }
« no previous file with comments | « third_party/libxml/patches/bug_651202 ('k') | third_party/libxml/patches/icu-configure » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698