[Python-checkins] r46216 - python/trunk/Objects/stringobject.c

fredrik.lundh python-checkins at python.org
Thu May 25 17:49:46 CEST 2006


Author: fredrik.lundh
Date: Thu May 25 17:49:45 2006
New Revision: 46216

Modified:
   python/trunk/Objects/stringobject.c
Log:
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)



Modified: python/trunk/Objects/stringobject.c
==============================================================================
--- python/trunk/Objects/stringobject.c	(original)
+++ python/trunk/Objects/stringobject.c	Thu May 25 17:49:45 2006
@@ -2040,14 +2040,16 @@
 	Py_ssize_t i, n = PyString_GET_SIZE(self);
 	PyObject *newobj;
 
-	newobj = PyString_FromStringAndSize(PyString_AS_STRING(self), n);
+	newobj = PyString_FromStringAndSize(NULL, n);
 	if (!newobj)
 		return NULL;
 
 	s = PyString_AS_STRING(newobj);
 
+	memcpy(s, PyString_AS_STRING(self), n);
+
 	for (i = 0; i < n; i++) {
-		char c = Py_CHARMASK(s[i]);
+		int c = Py_CHARMASK(s[i]);
 		if (isupper(c))
 			s[i] = _tolower(c);
 	}
@@ -2067,14 +2069,16 @@
 	Py_ssize_t i, n = PyString_GET_SIZE(self);
 	PyObject *newobj;
 
-	newobj = PyString_FromStringAndSize(PyString_AS_STRING(self), n);
+	newobj = PyString_FromStringAndSize(NULL, n);
 	if (!newobj)
 		return NULL;
 
 	s = PyString_AS_STRING(newobj);
 
+	memcpy(s, PyString_AS_STRING(self), n);
+
 	for (i = 0; i < n; i++) {
-		char c = Py_CHARMASK(s[i]);
+		int c = Py_CHARMASK(s[i]);
 		if (islower(c))
 			s[i] = _toupper(c);
 	}


More information about the Python-checkins mailing list