diff Python/codecs.c @ 43603:dd03aa741f56

This is the uncontroversial half of patch 1263 by Thomas Lee: changes to codecs.c and structmember.c to use PyUnicode instead of PyString.
author Guido van Rossum <guido@python.org>
date Fri, 19 Oct 2007 21:48:41 +0000
parents 5f9e79d1e158
children 0d462d789b18
line wrap: on
line diff
--- a/Python/codecs.c	Fri Oct 19 07:34:48 2007 +0000
+++ b/Python/codecs.c	Fri Oct 19 21:48:41 2007 +0000
@@ -55,16 +55,15 @@
     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 @@
             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 @@
     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 @@
     if (errors) {
 	PyObject *v;
 	
-	v = PyString_FromString(errors);
+	v = PyUnicode_FromString(errors);
 	if (v == NULL) {
 	    Py_DECREF(args);
 	    return NULL;