summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetri Lehtinen <petri@digip.org>2011-11-04 20:36:54 (GMT)
committerPetri Lehtinen <petri@digip.org>2011-11-04 20:36:56 (GMT)
commit245a94b6e8b776bbb307904768b1c607ae0f0a71 (patch)
tree8f942cfcf44035c35bb94171faaea4d6851f552a
parentc9f38462eecc27a6c5be041df4a5910f6a2ab99f (diff)
parentc06bb7affd231021fae09ddeba64b2a54d2c9e34 (diff)
downloadcpython-245a94b6e8b776bbb307904768b1c607ae0f0a71.zip
cpython-245a94b6e8b776bbb307904768b1c607ae0f0a71.tar.gz
cpython-245a94b6e8b776bbb307904768b1c607ae0f0a71.tar.bz2
Merge heads
-rw-r--r--Python/codecs.c19
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);