This is the uncontroversial half of patch 1263 by Thomas Lee:
changes to codecs.c and structmember.c to use PyUnicode instead of PyString.
This commit is contained in:
parent
630e46424a
commit
21431e85d5
|
@ -55,16 +55,15 @@ PyObject *normalizestring(const char *string)
|
|||
size_t len = strlen(string);
|
||||
char *p;
|
||||
PyObject *v;
|
||||
|
||||
|
||||
if (len > PY_SSIZE_T_MAX) {
|
||||
PyErr_SetString(PyExc_OverflowError, "string is too large");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
v = PyString_FromStringAndSize(NULL, len);
|
||||
if (v == NULL)
|
||||
return NULL;
|
||||
p = PyString_AS_STRING(v);
|
||||
|
||||
p = PyMem_Malloc(len + 1);
|
||||
if (p == NULL)
|
||||
return NULL;
|
||||
for (i = 0; i < len; i++) {
|
||||
register char ch = string[i];
|
||||
if (ch == ' ')
|
||||
|
@ -73,6 +72,11 @@ PyObject *normalizestring(const char *string)
|
|||
ch = tolower(Py_CHARMASK(ch));
|
||||
p[i] = ch;
|
||||
}
|
||||
p[i] = '\0';
|
||||
v = PyUnicode_FromString(p);
|
||||
if (v == NULL)
|
||||
return NULL;
|
||||
PyMem_Free(p);
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -112,7 +116,7 @@ PyObject *_PyCodec_Lookup(const char *encoding)
|
|||
v = normalizestring(encoding);
|
||||
if (v == NULL)
|
||||
goto onError;
|
||||
PyString_InternInPlace(&v);
|
||||
PyUnicode_InternInPlace(&v);
|
||||
|
||||
/* First, try to lookup the name in the registry dictionary */
|
||||
result = PyDict_GetItem(interp->codec_search_cache, v);
|
||||
|
@ -193,7 +197,7 @@ PyObject *args_tuple(PyObject *object,
|
|||
if (errors) {
|
||||
PyObject *v;
|
||||
|
||||
v = PyString_FromString(errors);
|
||||
v = PyUnicode_FromString(errors);
|
||||
if (v == NULL) {
|
||||
Py_DECREF(args);
|
||||
return NULL;
|
||||
|
|
|
@ -51,13 +51,13 @@ PyMember_GetOne(const char *addr, PyMemberDef *l)
|
|||
v = Py_None;
|
||||
}
|
||||
else
|
||||
v = PyString_FromString(*(char**)addr);
|
||||
v = PyUnicode_FromString(*(char**)addr);
|
||||
break;
|
||||
case T_STRING_INPLACE:
|
||||
v = PyString_FromString((char*)addr);
|
||||
v = PyUnicode_FromString((char*)addr);
|
||||
break;
|
||||
case T_CHAR:
|
||||
v = PyString_FromStringAndSize((char*)addr, 1);
|
||||
v = PyUnicode_FromStringAndSize((char*)addr, 1);
|
||||
break;
|
||||
case T_OBJECT:
|
||||
v = *(PyObject **)addr;
|
||||
|
@ -225,8 +225,8 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
|
|||
Py_XDECREF(oldv);
|
||||
break;
|
||||
case T_CHAR:
|
||||
if (PyString_Check(v) && PyString_Size(v) == 1) {
|
||||
*(char*)addr = PyString_AsString(v)[0];
|
||||
if (PyUnicode_Check(v) && PyUnicode_GetSize(v) == 1) {
|
||||
*(char*)addr = PyUnicode_AsString(v)[0];
|
||||
}
|
||||
else {
|
||||
PyErr_BadArgument();
|
||||
|
|
Loading…
Reference in New Issue