diff options
author | Petri Lehtinen <petri@digip.org> | 2011-11-04 20:36:54 (GMT) |
---|---|---|
committer | Petri Lehtinen <petri@digip.org> | 2011-11-04 20:36:56 (GMT) |
commit | 245a94b6e8b776bbb307904768b1c607ae0f0a71 (patch) | |
tree | 8f942cfcf44035c35bb94171faaea4d6851f552a | |
parent | c9f38462eecc27a6c5be041df4a5910f6a2ab99f (diff) | |
parent | c06bb7affd231021fae09ddeba64b2a54d2c9e34 (diff) | |
download | cpython-245a94b6e8b776bbb307904768b1c607ae0f0a71.zip cpython-245a94b6e8b776bbb307904768b1c607ae0f0a71.tar.gz cpython-245a94b6e8b776bbb307904768b1c607ae0f0a71.tar.bz2 |
Merge heads
-rw-r--r-- | Python/codecs.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/Python/codecs.c b/Python/codecs.c index dcc7c98..cdf2c44 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -573,7 +573,7 @@ PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc) if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) { PyObject *restuple; PyObject *object; - Py_ssize_t i, o; + Py_ssize_t i; Py_ssize_t start; Py_ssize_t end; PyObject *res; @@ -612,7 +612,7 @@ PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc) } outp = PyUnicode_1BYTE_DATA(res); /* generate replacement */ - for (i = start, o = 0; i < end; ++i) { + for (i = start; i < end; ++i) { int digits; int base; ch = PyUnicode_READ_CHAR(object, i); @@ -778,7 +778,7 @@ PyCodec_SurrogatePassErrors(PyObject *exc) } else if (PyObject_IsInstance(exc, PyExc_UnicodeDecodeError)) { unsigned char *p; - Py_UNICODE ch = 0; + Py_UCS4 ch = 0; if (PyUnicodeDecodeError_GetStart(exc, &start)) return NULL; if (!(object = PyUnicodeDecodeError_GetObject(exc))) @@ -804,7 +804,10 @@ PyCodec_SurrogatePassErrors(PyObject *exc) PyErr_SetObject(PyExceptionInstance_Class(exc), exc); return NULL; } - return Py_BuildValue("(u#n)", &ch, 1, start+3); + res = PyUnicode_FromOrdinal(ch); + if (res == NULL) + return NULL; + return Py_BuildValue("(Nn)", res, start+3); } else { wrong_exception_type(exc); @@ -853,8 +856,9 @@ PyCodec_SurrogateEscapeErrors(PyObject *exc) return restuple; } else if (PyObject_IsInstance(exc, PyExc_UnicodeDecodeError)) { + PyObject *str; unsigned char *p; - Py_UNICODE ch[4]; /* decode up to 4 bad bytes. */ + Py_UCS2 ch[4]; /* decode up to 4 bad bytes. */ int consumed = 0; if (PyUnicodeDecodeError_GetStart(exc, &start)) return NULL; @@ -879,7 +883,10 @@ PyCodec_SurrogateEscapeErrors(PyObject *exc) PyErr_SetObject(PyExceptionInstance_Class(exc), exc); return NULL; } - return Py_BuildValue("(u#n)", ch, consumed, start+consumed); + str = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, ch, consumed); + if (str == NULL) + return NULL; + return Py_BuildValue("(Nn)", str, start+consumed); } else { wrong_exception_type(exc); |