needforspeed: make new upper/lower work properly for single-character

strings too... (thanks to georg brandl for spotting the exact problem
faster than anyone else)
This commit is contained in:
Fredrik Lundh 2006-05-25 15:49:45 +00:00
parent 39ccef607e
commit 4b4e33ef14
1 changed files with 8 additions and 4 deletions

View File

@ -2040,14 +2040,16 @@ string_lower(PyStringObject *self)
Py_ssize_t i, n = PyString_GET_SIZE(self); Py_ssize_t i, n = PyString_GET_SIZE(self);
PyObject *newobj; PyObject *newobj;
newobj = PyString_FromStringAndSize(PyString_AS_STRING(self), n); newobj = PyString_FromStringAndSize(NULL, n);
if (!newobj) if (!newobj)
return NULL; return NULL;
s = PyString_AS_STRING(newobj); s = PyString_AS_STRING(newobj);
memcpy(s, PyString_AS_STRING(self), n);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
char c = Py_CHARMASK(s[i]); int c = Py_CHARMASK(s[i]);
if (isupper(c)) if (isupper(c))
s[i] = _tolower(c); s[i] = _tolower(c);
} }
@ -2067,14 +2069,16 @@ string_upper(PyStringObject *self)
Py_ssize_t i, n = PyString_GET_SIZE(self); Py_ssize_t i, n = PyString_GET_SIZE(self);
PyObject *newobj; PyObject *newobj;
newobj = PyString_FromStringAndSize(PyString_AS_STRING(self), n); newobj = PyString_FromStringAndSize(NULL, n);
if (!newobj) if (!newobj)
return NULL; return NULL;
s = PyString_AS_STRING(newobj); s = PyString_AS_STRING(newobj);
memcpy(s, PyString_AS_STRING(self), n);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
char c = Py_CHARMASK(s[i]); int c = Py_CHARMASK(s[i]);
if (islower(c)) if (islower(c))
s[i] = _toupper(c); s[i] = _toupper(c);
} }