[Python-checkins] cpython: Avoid the Py_UNICODE type in codecs.c

victor.stinner python-checkins at python.org
Fri Nov 4 21:35:04 CET 2011


http://hg.python.org/cpython/rev/e3b6458056c7
changeset: 73359:e3b6458056c7
user: Victor Stinner <victor.stinner at haypocalc.com>
date: Fri Nov 04 21:36:35 2011 +0100
summary:
 Avoid the Py_UNICODE type in codecs.c
files:
 Python/codecs.c | 15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/Python/codecs.c b/Python/codecs.c
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -778,7 +778,7 @@
 }
 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 @@
 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 @@
 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 @@
 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);
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /