Commit d2f673ac authored by Guido van Rossum's avatar Guido van Rossum

This is the uncontroversial half of patch 1263 by Thomas Lee:

changes to codecs.c and structmember.c to use PyUnicode instead of
PyString.
parent 325c6d47
...@@ -61,10 +61,9 @@ PyObject *normalizestring(const char *string) ...@@ -61,10 +61,9 @@ PyObject *normalizestring(const char *string)
return NULL; return NULL;
} }
v = PyString_FromStringAndSize(NULL, len); p = PyMem_Malloc(len + 1);
if (v == NULL) if (p == NULL)
return NULL; return NULL;
p = PyString_AS_STRING(v);
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
register char ch = string[i]; register char ch = string[i];
if (ch == ' ') if (ch == ' ')
...@@ -73,6 +72,11 @@ PyObject *normalizestring(const char *string) ...@@ -73,6 +72,11 @@ PyObject *normalizestring(const char *string)
ch = tolower(Py_CHARMASK(ch)); ch = tolower(Py_CHARMASK(ch));
p[i] = ch; p[i] = ch;
} }
p[i] = '\0';
v = PyUnicode_FromString(p);
if (v == NULL)
return NULL;
PyMem_Free(p);
return v; return v;
} }
...@@ -112,7 +116,7 @@ PyObject *_PyCodec_Lookup(const char *encoding) ...@@ -112,7 +116,7 @@ PyObject *_PyCodec_Lookup(const char *encoding)
v = normalizestring(encoding); v = normalizestring(encoding);
if (v == NULL) if (v == NULL)
goto onError; goto onError;
PyString_InternInPlace(&v); PyUnicode_InternInPlace(&v);
/* First, try to lookup the name in the registry dictionary */ /* First, try to lookup the name in the registry dictionary */
result = PyDict_GetItem(interp->codec_search_cache, v); result = PyDict_GetItem(interp->codec_search_cache, v);
...@@ -193,7 +197,7 @@ PyObject *args_tuple(PyObject *object, ...@@ -193,7 +197,7 @@ PyObject *args_tuple(PyObject *object,
if (errors) { if (errors) {
PyObject *v; PyObject *v;
v = PyString_FromString(errors); v = PyUnicode_FromString(errors);
if (v == NULL) { if (v == NULL) {
Py_DECREF(args); Py_DECREF(args);
return NULL; return NULL;
......
...@@ -51,13 +51,13 @@ PyMember_GetOne(const char *addr, PyMemberDef *l) ...@@ -51,13 +51,13 @@ PyMember_GetOne(const char *addr, PyMemberDef *l)
v = Py_None; v = Py_None;
} }
else else
v = PyString_FromString(*(char**)addr); v = PyUnicode_FromString(*(char**)addr);
break; break;
case T_STRING_INPLACE: case T_STRING_INPLACE:
v = PyString_FromString((char*)addr); v = PyUnicode_FromString((char*)addr);
break; break;
case T_CHAR: case T_CHAR:
v = PyString_FromStringAndSize((char*)addr, 1); v = PyUnicode_FromStringAndSize((char*)addr, 1);
break; break;
case T_OBJECT: case T_OBJECT:
v = *(PyObject **)addr; v = *(PyObject **)addr;
...@@ -225,8 +225,8 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) ...@@ -225,8 +225,8 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
Py_XDECREF(oldv); Py_XDECREF(oldv);
break; break;
case T_CHAR: case T_CHAR:
if (PyString_Check(v) && PyString_Size(v) == 1) { if (PyUnicode_Check(v) && PyUnicode_GetSize(v) == 1) {
*(char*)addr = PyString_AsString(v)[0]; *(char*)addr = PyUnicode_AsString(v)[0];
} }
else { else {
PyErr_BadArgument(); PyErr_BadArgument();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment