[Python-checkins] commit of r41638 - in python/trunk: Include/cStringIO.h Include/ceval.h Include/import.h Include/methodobject.h Include/modsupport.h Include/moduleobject.h Include/object.h Modules/_bisectmodule.c Modules/_bsddb.c Modules/_csv.c Modules/_cursesmodule.c Modules/_hashopenssl.c Modules/_sre.c Modules/_tkinter.c Modules/binascii.c Modules/bz2module.c Modules/cPickle.c Modules/cStringIO.c Modules/cjkcodecs/multibytecodec.c Modules/datetimemodule.c Modules/itertoolsmodule.c Modules/mmapmodule.c Modules/parsermodule.c Modules/pyexpat.c Modules/sha256module.c Modules/sha512module.c Modules/socketmodule.c Objects/boolobject.c Objects/classobject.c Objects/complexobject.c Objects/descrobject.c Objects/enumobject.c Objects/fileobject.c Objects/floatobject.c Objects/funcobject.c Objects/intobject.c Objects/listobject.c Objects/longobject.c Objects/methodobject.c Objects/moduleobject.c Objects/object.c Objects/stringobject.c Objects/structseq.c Objects/tupleobject.c Objects/typeobject.c Objects/unicodeobject.c Objects/weakrefobject.c Python/bltinmodule.c Python/ceval.c Python/getargs.c Python/import.c Python/modsupport.c

jeremy.hylton python-checkins at python.org
Sat Dec 10 19:50:29 CET 2005


Author: jeremy.hylton
Date: Sat Dec 10 19:50:16 2005
New Revision: 41638

Modified:
   python/trunk/Include/cStringIO.h
   python/trunk/Include/ceval.h
   python/trunk/Include/import.h
   python/trunk/Include/methodobject.h
   python/trunk/Include/modsupport.h
   python/trunk/Include/moduleobject.h
   python/trunk/Include/object.h
   python/trunk/Modules/_bisectmodule.c
   python/trunk/Modules/_bsddb.c
   python/trunk/Modules/_csv.c
   python/trunk/Modules/_cursesmodule.c
   python/trunk/Modules/_hashopenssl.c
   python/trunk/Modules/_sre.c
   python/trunk/Modules/_tkinter.c
   python/trunk/Modules/binascii.c
   python/trunk/Modules/bz2module.c
   python/trunk/Modules/cPickle.c
   python/trunk/Modules/cStringIO.c
   python/trunk/Modules/cjkcodecs/multibytecodec.c
   python/trunk/Modules/datetimemodule.c
   python/trunk/Modules/itertoolsmodule.c
   python/trunk/Modules/mmapmodule.c
   python/trunk/Modules/parsermodule.c
   python/trunk/Modules/pyexpat.c
   python/trunk/Modules/sha256module.c
   python/trunk/Modules/sha512module.c
   python/trunk/Modules/socketmodule.c
   python/trunk/Objects/boolobject.c
   python/trunk/Objects/classobject.c
   python/trunk/Objects/complexobject.c
   python/trunk/Objects/descrobject.c
   python/trunk/Objects/enumobject.c
   python/trunk/Objects/fileobject.c
   python/trunk/Objects/floatobject.c
   python/trunk/Objects/funcobject.c
   python/trunk/Objects/intobject.c
   python/trunk/Objects/listobject.c
   python/trunk/Objects/longobject.c
   python/trunk/Objects/methodobject.c
   python/trunk/Objects/moduleobject.c
   python/trunk/Objects/object.c
   python/trunk/Objects/stringobject.c
   python/trunk/Objects/structseq.c
   python/trunk/Objects/tupleobject.c
   python/trunk/Objects/typeobject.c
   python/trunk/Objects/unicodeobject.c
   python/trunk/Objects/weakrefobject.c
   python/trunk/Python/bltinmodule.c
   python/trunk/Python/ceval.c
   python/trunk/Python/getargs.c
   python/trunk/Python/import.c
   python/trunk/Python/modsupport.c
Log:
Add const to several API functions that take char *.

In C++, it's an error to pass a string literal to a char* function
without a const_cast().  Rather than require every C++ extension
module to put a cast around string literals, fix the API to state the
const-ness.

I focused on parts of the API where people usually pass literals:
PyArg_ParseTuple() and friends, Py_BuildValue(), PyMethodDef, the type
slots, etc.  Predictably, there were a large set of functions that
needed to be fixed as a result of these changes.  The most pervasive
change was to make the keyword args list passed to
PyArg_ParseTupleAndKewords() to be a const char *kwlist[].

One cast was required as a result of the changes:  A type object
mallocs the memory for its tp_doc slot and later frees it.
PyTypeObject says that tp_doc is const char *; but if the type was
created by type_new(), we know it is safe to cast to char *.



Modified: python/trunk/Include/cStringIO.h
==============================================================================
--- python/trunk/Include/cStringIO.h	(original)
+++ python/trunk/Include/cStringIO.h	Sat Dec 10 19:50:16 2005
@@ -38,7 +38,7 @@
   int(*creadline)(PyObject *, char **);
 
   /* Write a string to an output object*/
-  int(*cwrite)(PyObject *, char *, int);
+  int(*cwrite)(PyObject *, const char *, int);
 
   /* Get the output object as a Python string (returns new reference). */
   PyObject *(*cgetvalue)(PyObject *);

Modified: python/trunk/Include/ceval.h
==============================================================================
--- python/trunk/Include/ceval.h	(original)
+++ python/trunk/Include/ceval.h	Sat Dec 10 19:50:16 2005
@@ -18,9 +18,11 @@
 #define PyEval_CallObject(func,arg) \
         PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
 
-PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *obj, char *format, ...);
+PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *obj,
+                                           const char *format, ...);
 PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
-                                        char *methodname, char *format, ...);
+                                         const char *methodname,
+                                         const char *format, ...);
 
 PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
 PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
@@ -60,8 +62,8 @@
 #  define _Py_MakeRecCheck(x)  (++(x) > _Py_CheckRecursionLimit)
 #endif
 
-PyAPI_FUNC(char *) PyEval_GetFuncName(PyObject *);
-PyAPI_FUNC(char *) PyEval_GetFuncDesc(PyObject *);
+PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *);
+PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *);
 
 PyAPI_FUNC(PyObject *) PyEval_GetCallStats(PyObject *);
 PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *);

Modified: python/trunk/Include/import.h
==============================================================================
--- python/trunk/Include/import.h	(original)
+++ python/trunk/Include/import.h	Sat Dec 10 19:50:16 2005
@@ -12,8 +12,8 @@
 PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx(
 	char *name, PyObject *co, char *pathname);
 PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void);
-PyAPI_FUNC(PyObject *) PyImport_AddModule(char *name);
-PyAPI_FUNC(PyObject *) PyImport_ImportModule(char *name);
+PyAPI_FUNC(PyObject *) PyImport_AddModule(const char *name);
+PyAPI_FUNC(PyObject *) PyImport_ImportModule(const char *name);
 PyAPI_FUNC(PyObject *) PyImport_ImportModuleEx(
 	char *name, PyObject *globals, PyObject *locals, PyObject *fromlist);
 PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);

Modified: python/trunk/Include/methodobject.h
==============================================================================
--- python/trunk/Include/methodobject.h	(original)
+++ python/trunk/Include/methodobject.h	Sat Dec 10 19:50:16 2005
@@ -35,15 +35,15 @@
 PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *);
 
 struct PyMethodDef {
-    char	*ml_name;	/* The name of the built-in function/method */
+    const char	*ml_name;	/* The name of the built-in function/method */
     PyCFunction  ml_meth;	/* The C function that implements it */
     int		 ml_flags;	/* Combination of METH_xxx flags, which mostly
 				   describe the args expected by the C func */
-    char	*ml_doc;	/* The __doc__ attribute, or NULL */
+    const char	*ml_doc;	/* The __doc__ attribute, or NULL */
 };
 typedef struct PyMethodDef PyMethodDef;
 
-PyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, char *);
+PyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, const char *);
 
 #define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL)
 PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, 
@@ -76,7 +76,7 @@
 } PyMethodChain;
 
 PyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *,
-                                                  char *);
+                                            const char *);
 
 typedef struct {
     PyObject_HEAD

Modified: python/trunk/Include/modsupport.h
==============================================================================
--- python/trunk/Include/modsupport.h	(original)
+++ python/trunk/Include/modsupport.h	Sat Dec 10 19:50:16 2005
@@ -9,22 +9,22 @@
 
 #include <stdarg.h>
 
-PyAPI_FUNC(int) PyArg_Parse(PyObject *, char *, ...);
-PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, char *, ...);
+PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...);
+PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);
 PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
-                                                  char *, char **, ...);
-PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, char *, int, int, ...);
-PyAPI_FUNC(PyObject *) Py_BuildValue(char *, ...);
-PyAPI_FUNC(int) _PyArg_NoKeywords(char *funcname, PyObject *kw);
+                                                  const char *, const char **, ...);
+PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, int, int, ...);
+PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...);
+PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kw);
 
-PyAPI_FUNC(int) PyArg_VaParse(PyObject *, char *, va_list);
+PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list);
 PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
-                                                  char *, char **, va_list);
-PyAPI_FUNC(PyObject *) Py_VaBuildValue(char *, va_list);
+                                                  const char *, const char **, va_list);
+PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list);
 
-PyAPI_FUNC(int) PyModule_AddObject(PyObject *, char *, PyObject *);
-PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, char *, long);
-PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, char *, char *);
+PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *);
+PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);
+PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *);
 
 #define PYTHON_API_VERSION 1012
 #define PYTHON_API_STRING "1012"
@@ -84,9 +84,9 @@
 #define Py_InitModule4 Py_InitModule4TraceRefs
 #endif
 
-PyAPI_FUNC(PyObject *) Py_InitModule4(char *name, PyMethodDef *methods,
-                                            char *doc, PyObject *self,
-                                            int apiver);
+PyAPI_FUNC(PyObject *) Py_InitModule4(const char *name, PyMethodDef *methods,
+                                      const char *doc, PyObject *self,
+                                      int apiver);
 
 #define Py_InitModule(name, methods) \
 	Py_InitModule4(name, methods, (char *)NULL, (PyObject *)NULL, \

Modified: python/trunk/Include/moduleobject.h
==============================================================================
--- python/trunk/Include/moduleobject.h	(original)
+++ python/trunk/Include/moduleobject.h	Sat Dec 10 19:50:16 2005
@@ -12,7 +12,7 @@
 #define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
 #define PyModule_CheckExact(op) ((op)->ob_type == &PyModule_Type)
 
-PyAPI_FUNC(PyObject *) PyModule_New(char *);
+PyAPI_FUNC(PyObject *) PyModule_New(const char *);
 PyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *);
 PyAPI_FUNC(char *) PyModule_GetName(PyObject *);
 PyAPI_FUNC(char *) PyModule_GetFilename(PyObject *);

Modified: python/trunk/Include/object.h
==============================================================================
--- python/trunk/Include/object.h	(original)
+++ python/trunk/Include/object.h	Sat Dec 10 19:50:16 2005
@@ -225,9 +225,9 @@
 typedef void (*freefunc)(void *);
 typedef void (*destructor)(PyObject *);
 typedef int (*printfunc)(PyObject *, FILE *, int);
-typedef PyObject *(*getattrfunc)(PyObject *, char *);
+typedef PyObject *(*getattrfunc)(PyObject *, const char *);
 typedef PyObject *(*getattrofunc)(PyObject *, PyObject *);
-typedef int (*setattrfunc)(PyObject *, char *, PyObject *);
+typedef int (*setattrfunc)(PyObject *, const char *, PyObject *);
 typedef int (*setattrofunc)(PyObject *, PyObject *, PyObject *);
 typedef int (*cmpfunc)(PyObject *, PyObject *);
 typedef PyObject *(*reprfunc)(PyObject *);
@@ -243,7 +243,7 @@
 
 typedef struct _typeobject {
 	PyObject_VAR_HEAD
-	char *tp_name; /* For printing, in format "<module>.<name>" */
+	const char *tp_name; /* For printing, in format "<module>.<name>" */
 	int tp_basicsize, tp_itemsize; /* For allocation */
 
 	/* Methods to implement standard operations */
@@ -275,7 +275,7 @@
 	/* Flags to define presence of optional/expanded features */
 	long tp_flags;
 
-	char *tp_doc; /* Documentation string */
+	const char *tp_doc; /* Documentation string */
 
 	/* Assigned meaning in release 2.0 */
 	/* call function for all accessible objects */
@@ -379,9 +379,9 @@
 PyAPI_FUNC(int) PyObject_Compare(PyObject *, PyObject *);
 PyAPI_FUNC(PyObject *) PyObject_RichCompare(PyObject *, PyObject *, int);
 PyAPI_FUNC(int) PyObject_RichCompareBool(PyObject *, PyObject *, int);
-PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, char *);
-PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, char *, PyObject *);
-PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, char *);
+PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, const char *);
+PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, const char *, PyObject *);
+PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, const char *);
 PyAPI_FUNC(PyObject *) PyObject_GetAttr(PyObject *, PyObject *);
 PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *);
 PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *);

Modified: python/trunk/Modules/_bisectmodule.c
==============================================================================
--- python/trunk/Modules/_bisectmodule.c	(original)
+++ python/trunk/Modules/_bisectmodule.c	Sat Dec 10 19:50:16 2005
@@ -40,7 +40,7 @@
 	int lo = 0;
 	int hi = -1;
 	int index;
-	static char *keywords[] = {"a", "x", "lo", "hi", NULL};
+	static const char *keywords[] = {"a", "x", "lo", "hi", NULL};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|ii:bisect_right",
 		keywords, &list, &item, &lo, &hi))
@@ -70,7 +70,7 @@
 	int lo = 0;
 	int hi = -1;
 	int index;
-	static char *keywords[] = {"a", "x", "lo", "hi", NULL};
+	static const char *keywords[] = {"a", "x", "lo", "hi", NULL};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|ii:insort_right",
 		keywords, &list, &item, &lo, &hi))
@@ -137,7 +137,7 @@
 	int lo = 0;
 	int hi = -1;
 	int index;
-	static char *keywords[] = {"a", "x", "lo", "hi", NULL};
+	static const char *keywords[] = {"a", "x", "lo", "hi", NULL};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|ii:bisect_left",
 		keywords, &list, &item, &lo, &hi))
@@ -167,7 +167,7 @@
 	int lo = 0;
 	int hi = -1;
 	int index;
-	static char *keywords[] = {"a", "x", "lo", "hi", NULL};
+	static const char *keywords[] = {"a", "x", "lo", "hi", NULL};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|ii:insort_left",
 		keywords, &list, &item, &lo, &hi))
@@ -233,4 +233,3 @@
 
 	m = Py_InitModule3("_bisect", bisect_methods, module_doc);
 }
-

Modified: python/trunk/Modules/_bsddb.c
==============================================================================
--- python/trunk/Modules/_bsddb.c	(original)
+++ python/trunk/Modules/_bsddb.c	Sat Dec 10 19:50:16 2005
@@ -650,7 +650,7 @@
     int dlen = -1;
     int doff = -1;
     int flags = 0;
-    char* kwnames[] = { "flags", "dlen", "doff", NULL };
+    static const char* kwnames[] = { "flags", "dlen", "doff", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, format, kwnames,
 				     &flags, &dlen, &doff)) 
@@ -1147,9 +1147,10 @@
 #if (DBVER >= 41)
     PyObject *txnobj = NULL;
     DB_TXN *txn = NULL;
-    char* kwnames[] = {"secondaryDB", "callback", "flags", "txn", NULL};
+    static const char* kwnames[] = {"secondaryDB", "callback", "flags", "txn",
+                                    NULL};
 #else
-    char* kwnames[] = {"secondaryDB", "callback", "flags", NULL};
+    static const char* kwnames[] = {"secondaryDB", "callback", "flags", NULL};
 #endif
 
 #if (DBVER >= 41)
@@ -1255,7 +1256,7 @@
     PyObject* retval = NULL;
     DBT key, data;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "txn", "flags", NULL };
+    static const char* kwnames[] = { "txn", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:consume", kwnames,
                                      &txnobj, &flags))
@@ -1325,7 +1326,7 @@
     DBC* dbc;
     PyObject* txnobj = NULL;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "txn", "flags", NULL };
+    static const char* kwnames[] = { "txn", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:cursor", kwnames,
                                      &txnobj, &flags))
@@ -1350,7 +1351,7 @@
     PyObject* keyobj;
     DBT key;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "key", "txn", "flags", NULL };
+    static const char* kwnames[] = { "key", "txn", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Oi:delete", kwnames,
                                      &keyobj, &txnobj, &flags))
@@ -1402,7 +1403,8 @@
     int doff = -1;
     DBT key, data;
     DB_TXN *txn = NULL;
-    char* kwnames[] = {"key", "default", "txn", "flags", "dlen", "doff", NULL};
+    static const char* kwnames[] = {"key", "default", "txn", "flags", "dlen",
+                                    "doff", NULL};
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OOiii:get", kwnames,
                                      &keyobj, &dfltobj, &txnobj, &flags, &dlen,
@@ -1469,7 +1471,8 @@
     int doff = -1;
     DBT key, pkey, data;
     DB_TXN *txn = NULL;
-    char* kwnames[] = {"key", "default", "txn", "flags", "dlen", "doff", NULL};
+    static const char* kwnames[] = {"key", "default", "txn", "flags", "dlen",
+                                    "doff", NULL};
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OOiii:pget", kwnames,
                                      &keyobj, &dfltobj, &txnobj, &flags, &dlen,
@@ -1558,7 +1561,7 @@
     PyObject* retval = NULL;
     DBT key, data;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "key", "txn", NULL };
+    static const char* kwnames[] = { "key", "txn", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:get_size", kwnames,
                                      &keyobj, &txnobj))
@@ -1601,7 +1604,7 @@
     PyObject* retval = NULL;
     DBT key, data;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "key", "data", "txn", "flags", NULL };
+    static const char* kwnames[] = { "key", "data", "txn", "flags", NULL };
 
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|Oi:get_both", kwnames,
@@ -1752,7 +1755,7 @@
     DBT key;
     DB_TXN *txn = NULL;
     DB_KEY_RANGE range;
-    char* kwnames[] = { "key", "txn", "flags", NULL };
+    static const char* kwnames[] = { "key", "txn", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Oi:key_range", kwnames,
                                      &keyobj, &txnobj, &flags))
@@ -1783,17 +1786,17 @@
     PyObject *txnobj = NULL;
     DB_TXN *txn = NULL;
     /* with dbname */
-    char* kwnames[] = {
+    static const char* kwnames[] = {
         "filename", "dbname", "dbtype", "flags", "mode", "txn", NULL};
     /* without dbname */
-    char* kwnames_basic[] = {
+    static const char* kwnames_basic[] = {
         "filename", "dbtype", "flags", "mode", "txn", NULL};
 #else
     /* with dbname */
-    char* kwnames[] = {
+    static const char* kwnames[] = {
         "filename", "dbname", "dbtype", "flags", "mode", NULL};
     /* without dbname */
-    char* kwnames_basic[] = {
+    static const char* kwnames_basic[] = {
         "filename", "dbtype", "flags", "mode", NULL};
 #endif
 
@@ -1877,7 +1880,8 @@
     PyObject* keyobj, *dataobj, *retval;
     DBT key, data;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "key", "data", "txn", "flags", "dlen", "doff", NULL };
+    static const char* kwnames[] = { "key", "data", "txn", "flags", "dlen",
+                                     "doff", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|Oiii:put", kwnames,
                          &keyobj, &dataobj, &txnobj, &flags, &dlen, &doff))
@@ -1917,7 +1921,7 @@
     char* filename;
     char* database = NULL;
     int err, flags=0;
-    char* kwnames[] = { "filename", "dbname", "flags", NULL};
+    static const char* kwnames[] = { "filename", "dbname", "flags", NULL};
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|zi:remove", kwnames,
                                      &filename, &database, &flags))
@@ -2335,9 +2339,9 @@
 #if (DBVER >= 43)
     PyObject* txnobj = NULL;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "txn", "flags", NULL };
+    static const char* kwnames[] = { "txn", "flags", NULL };
 #else
-    char* kwnames[] = { "flags", NULL };
+    static const char* kwnames[] = { "flags", NULL };
 #endif
 
 #if (DBVER >= 43)
@@ -2477,7 +2481,7 @@
     u_int32_t count=0;
     PyObject* txnobj = NULL;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "txn", "flags", NULL };
+    static const char* kwnames[] = { "txn", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:cursor", kwnames,
                                      &txnobj, &flags))
@@ -2521,7 +2525,8 @@
     char* dbName=NULL;
     char* outFileName=NULL;
     FILE* outFile=NULL;
-    char* kwnames[] = { "filename", "dbname", "outfile", "flags", NULL };
+    static const char* kwnames[] = { "filename", "dbname", "outfile", "flags",
+                                     NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|zzi:verify", kwnames,
                                      &fileName, &dbName, &outFileName, &flags))
@@ -2578,7 +2583,7 @@
     int err;
     u_int32_t flags=0;
     char *passwd = NULL;
-    char* kwnames[] = { "passwd", "flags", NULL };
+    static const char* kwnames[] = { "passwd", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|i:set_encrypt", kwnames,
 		&passwd, &flags)) {
@@ -3018,7 +3023,8 @@
     int dlen = -1;
     int doff = -1;
     DBT key, data;
-    char* kwnames[] = { "key","data", "flags", "dlen", "doff", NULL };
+    static const char* kwnames[] = { "key","data", "flags", "dlen", "doff",
+                                     NULL };
 
     CLEAR_DBT(key);
     CLEAR_DBT(data);
@@ -3104,7 +3110,8 @@
     int dlen = -1;
     int doff = -1;
     DBT key, pkey, data;
-    char* kwnames[] = { "key","data", "flags", "dlen", "doff", NULL };
+    static const char* kwnames[] = { "key","data", "flags", "dlen", "doff",
+                                     NULL };
 
     CLEAR_DBT(key);
     CLEAR_DBT(data);
@@ -3257,7 +3264,8 @@
     int err, flags = 0;
     PyObject* keyobj, *dataobj;
     DBT key, data;
-    char* kwnames[] = { "key", "data", "flags", "dlen", "doff", NULL };
+    static const char* kwnames[] = { "key", "data", "flags", "dlen", "doff",
+                                     NULL };
     int dlen = -1;
     int doff = -1;
 
@@ -3292,7 +3300,7 @@
     int err, flags = 0;
     DBT key, data;
     PyObject* retval, *keyobj;
-    char* kwnames[] = { "key", "flags", "dlen", "doff", NULL };
+    static const char* kwnames[] = { "key", "flags", "dlen", "doff", NULL };
     int dlen = -1;
     int doff = -1;
 
@@ -3362,7 +3370,7 @@
     int err, flags = 0;
     DBT key, data;
     PyObject* retval, *keyobj;
-    char* kwnames[] = { "key", "flags", "dlen", "doff", NULL };
+    static const char* kwnames[] = { "key", "flags", "dlen", "doff", NULL };
     int dlen = -1;
     int doff = -1;
 
@@ -3552,7 +3560,7 @@
     PyObject* retval;
     int dlen = -1;
     int doff = -1;
-    char* kwnames[] = { "recno","flags", "dlen", "doff", NULL };
+    static const char* kwnames[] = { "recno","flags", "dlen", "doff", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|iii:set_recno", kwnames,
 				     &irecno, &flags, &dlen, &doff))
@@ -3746,7 +3754,8 @@
     char *database = NULL;
     PyObject *txnobj = NULL;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "file", "database", "txn", "flags", NULL };
+    static const char* kwnames[] = { "file", "database", "txn", "flags",
+                                     NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ss|Oi:dbremove", kwnames,
 		&file, &database, &txnobj, &flags)) {
@@ -3773,7 +3782,8 @@
     char *newname = NULL;
     PyObject *txnobj = NULL;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "file", "database", "newname", "txn", "flags", NULL };
+    static const char* kwnames[] = { "file", "database", "newname", "txn",
+                                     "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "sss|Oi:dbrename", kwnames,
 		&file, &database, &newname, &txnobj, &flags)) {
@@ -3797,7 +3807,7 @@
     int err;
     u_int32_t flags=0;
     char *passwd = NULL;
-    char* kwnames[] = { "passwd", "flags", NULL };
+    static const char* kwnames[] = { "passwd", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|i:set_encrypt", kwnames,
 		&passwd, &flags)) {
@@ -3820,7 +3830,7 @@
     int err;
     u_int32_t flags=0;
     u_int32_t timeout = 0;
-    char* kwnames[] = { "timeout", "flags", NULL };
+    static const char* kwnames[] = { "timeout", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:set_timeout", kwnames,
 		&timeout, &flags)) {
@@ -4107,7 +4117,7 @@
     int flags = 0;
     PyObject* txnobj = NULL;
     DB_TXN *txn = NULL;
-    char* kwnames[] = { "parent", "flags", NULL };
+    static const char* kwnames[] = { "parent", "flags", NULL };
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:txn_begin", kwnames,
                                      &txnobj, &flags))
@@ -4937,7 +4947,7 @@
 {
     PyObject* dbenvobj = NULL;
     int flags = 0;
-    char* kwnames[] = { "dbEnv", "flags", NULL};
+    static const char* kwnames[] = { "dbEnv", "flags", NULL};
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:DB", kwnames,
                                      &dbenvobj, &flags))

Modified: python/trunk/Modules/_csv.c
==============================================================================
--- python/trunk/Modules/_csv.c	(original)
+++ python/trunk/Modules/_csv.c	Sat Dec 10 19:50:16 2005
@@ -291,7 +291,7 @@
         self->ob_type->tp_free((PyObject *)self);
 }
 
-static char *dialect_kws[] = {
+static const char *dialect_kws[] = {
 	"dialect",
 	"delimiter",
 	"doublequote",

Modified: python/trunk/Modules/_cursesmodule.c
==============================================================================
--- python/trunk/Modules/_cursesmodule.c	(original)
+++ python/trunk/Modules/_cursesmodule.c	Sat Dec 10 19:50:16 2005
@@ -1886,10 +1886,10 @@
 	int err;
 	char* termstr = NULL;
 
-	static char *kwlist[] = {"term", "fd", NULL};
+	static const char *kwlist[] = {"term", "fd", NULL};
 
 	if (!PyArg_ParseTupleAndKeywords(
-		args,keywds,"|zi:setupterm",kwlist,&termstr,&fd)) {
+		args, keywds, "|zi:setupterm", kwlist, &termstr, &fd)) {
 		return NULL;
 	}
 	

Modified: python/trunk/Modules/_hashopenssl.c
==============================================================================
--- python/trunk/Modules/_hashopenssl.c	(original)
+++ python/trunk/Modules/_hashopenssl.c	Sat Dec 10 19:50:16 2005
@@ -230,7 +230,7 @@
 static int
 EVP_tp_init(EVPobject *self, PyObject *args, PyObject *kwds)
 {
-    static char *kwlist[] = {"name", "string", NULL};
+    static const char *kwlist[] = {"name", "string", NULL};
     PyObject *name_obj = NULL;
     char *nameStr;
     unsigned char *cp = NULL;
@@ -366,7 +366,7 @@
 static PyObject *
 EVP_new(PyObject *self, PyObject *args, PyObject *kwdict)
 {
-    static char *kwlist[] = {"name", "string", NULL};
+    static const char *kwlist[] = {"name", "string", NULL};
     PyObject *name_obj = NULL;
     char *name;
     const EVP_MD *digest;

Modified: python/trunk/Modules/_sre.c
==============================================================================
--- python/trunk/Modules/_sre.c	(original)
+++ python/trunk/Modules/_sre.c	Sat Dec 10 19:50:16 2005
@@ -2007,7 +2007,7 @@
     PyObject* string;
     int start = 0;
     int end = INT_MAX;
-    static char* kwlist[] = { "pattern", "pos", "endpos", NULL };
+    static const char* kwlist[] = { "pattern", "pos", "endpos", NULL };
     if (!PyArg_ParseTupleAndKeywords(args, kw, "O|ii:match", kwlist,
                                      &string, &start, &end))
         return NULL;
@@ -2044,7 +2044,7 @@
     PyObject* string;
     int start = 0;
     int end = INT_MAX;
-    static char* kwlist[] = { "pattern", "pos", "endpos", NULL };
+    static const char* kwlist[] = { "pattern", "pos", "endpos", NULL };
     if (!PyArg_ParseTupleAndKeywords(args, kw, "O|ii:search", kwlist,
                                      &string, &start, &end))
         return NULL;
@@ -2185,7 +2185,7 @@
     PyObject* string;
     int start = 0;
     int end = INT_MAX;
-    static char* kwlist[] = { "source", "pos", "endpos", NULL };
+    static const char* kwlist[] = { "source", "pos", "endpos", NULL };
     if (!PyArg_ParseTupleAndKeywords(args, kw, "O|ii:findall", kwlist,
                                      &string, &start, &end))
         return NULL;
@@ -2311,7 +2311,7 @@
 
     PyObject* string;
     int maxsplit = 0;
-    static char* kwlist[] = { "source", "maxsplit", NULL };
+    static const char* kwlist[] = { "source", "maxsplit", NULL };
     if (!PyArg_ParseTupleAndKeywords(args, kw, "O|i:split", kwlist,
                                      &string, &maxsplit))
         return NULL;
@@ -2595,7 +2595,7 @@
     PyObject* template;
     PyObject* string;
     int count = 0;
-    static char* kwlist[] = { "repl", "string", "count", NULL };
+    static const char* kwlist[] = { "repl", "string", "count", NULL };
     if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|i:sub", kwlist,
                                      &template, &string, &count))
         return NULL;
@@ -2609,7 +2609,7 @@
     PyObject* template;
     PyObject* string;
     int count = 0;
-    static char* kwlist[] = { "repl", "string", "count", NULL };
+    static const char* kwlist[] = { "repl", "string", "count", NULL };
     if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|i:subn", kwlist,
                                      &template, &string, &count))
         return NULL;
@@ -2916,7 +2916,7 @@
     int index;
 
     PyObject* def = Py_None;
-    static char* kwlist[] = { "default", NULL };
+    static const char* kwlist[] = { "default", NULL };
     if (!PyArg_ParseTupleAndKeywords(args, kw, "|O:groups", kwlist, &def))
         return NULL;
 
@@ -2945,7 +2945,7 @@
     int index;
 
     PyObject* def = Py_None;
-    static char* kwlist[] = { "default", NULL };
+    static const char* kwlist[] = { "default", NULL };
     if (!PyArg_ParseTupleAndKeywords(args, kw, "|O:groupdict", kwlist, &def))
         return NULL;
 

Modified: python/trunk/Modules/_tkinter.c
==============================================================================
--- python/trunk/Modules/_tkinter.c	(original)
+++ python/trunk/Modules/_tkinter.c	Sat Dec 10 19:50:16 2005
@@ -2393,7 +2393,7 @@
 }
 
 static PyObject *
-Tktt_GetAttr(PyObject *self, char *name)
+Tktt_GetAttr(PyObject *self, const char *name)
 {
 	return Py_FindMethod(Tktt_methods, self, name);
 }
@@ -2723,7 +2723,7 @@
 }
 
 static PyObject *
-Tkapp_GetAttr(PyObject *self, char *name)
+Tkapp_GetAttr(PyObject *self, const char *name)
 {
 	return Py_FindMethod(Tkapp_methods, self, name);
 }

Modified: python/trunk/Modules/binascii.c
==============================================================================
--- python/trunk/Modules/binascii.c	(original)
+++ python/trunk/Modules/binascii.c	Sat Dec 10 19:50:16 2005
@@ -1032,7 +1032,7 @@
 	unsigned char *data, *odata;
 	unsigned int datalen = 0;
 	PyObject *rv;
-	static char *kwlist[] = {"data", "header", NULL};
+	static const char *kwlist[] = {"data", "header", NULL};
 	int header = 0;
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#|i", kwlist, &data,
@@ -1133,7 +1133,8 @@
 	unsigned int datalen = 0, odatalen = 0;
 	PyObject *rv;
 	unsigned int linelen = 0;
-	static char *kwlist[] = {"data", "quotetabs", "istext", "header", NULL};
+	static const char *kwlist[] = {"data", "quotetabs", "istext",
+                                       "header", NULL};
 	int istext = 1;
 	int quotetabs = 0;
 	int header = 0;

Modified: python/trunk/Modules/bz2module.c
==============================================================================
--- python/trunk/Modules/bz2module.c	(original)
+++ python/trunk/Modules/bz2module.c	Sat Dec 10 19:50:16 2005
@@ -1285,8 +1285,8 @@
 static int
 BZ2File_init(BZ2FileObject *self, PyObject *args, PyObject *kwargs)
 {
-	static char *kwlist[] = {"filename", "mode", "buffering",
-				 "compresslevel", 0};
+	static const char *kwlist[] = {"filename", "mode", "buffering",
+                                       "compresslevel", 0};
 	PyObject *name;
 	char *mode = "r";
 	int buffering = -1;
@@ -1674,7 +1674,7 @@
 {
 	int compresslevel = 9;
 	int bzerror;
-	static char *kwlist[] = {"compresslevel", 0};
+	static const char *kwlist[] = {"compresslevel", 0};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i:BZ2Compressor",
 					 kwlist, &compresslevel))
@@ -2019,7 +2019,7 @@
 	bz_stream _bzs;
 	bz_stream *bzs = &_bzs;
 	int bzerror;
-	static char *kwlist[] = {"data", "compresslevel", 0};
+	static const char *kwlist[] = {"data", "compresslevel", 0};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#|i",
 					 kwlist, &data, &datasize,

Modified: python/trunk/Modules/cPickle.c
==============================================================================
--- python/trunk/Modules/cPickle.c	(original)
+++ python/trunk/Modules/cPickle.c	Sat Dec 10 19:50:16 2005
@@ -339,7 +339,7 @@
 
 	int fast; /* Fast mode doesn't save in memo, don't use if circ ref */
         int nesting;
-	int (*write_func)(struct Picklerobject *, char *, int);
+	int (*write_func)(struct Picklerobject *, const char *, int);
 	char *write_buf;
 	int buf_size;
 	PyObject *dispatch_table;
@@ -417,7 +417,7 @@
 }
 
 static int
-write_file(Picklerobject *self, char *s, int  n)
+write_file(Picklerobject *self, const char *s, int  n)
 {
 	size_t nbyteswritten;
 
@@ -437,7 +437,7 @@
 }
 
 static int
-write_cStringIO(Picklerobject *self, char *s, int  n)
+write_cStringIO(Picklerobject *self, const char *s, int  n)
 {
 	if (s == NULL) {
 		return 0;
@@ -451,14 +451,14 @@
 }
 
 static int
-write_none(Picklerobject *self, char *s, int  n)
+write_none(Picklerobject *self, const char *s, int  n)
 {
 	if (s == NULL) return 0;
 	return n;
 }
 
 static int
-write_other(Picklerobject *self, char *s, int  n)
+write_other(Picklerobject *self, const char *s, int  n)
 {
 	PyObject *py_str = 0, *junk = 0;
 
@@ -669,7 +669,7 @@
  * The caller is responsible for free()'ing the return value.
  */
 static char *
-pystrndup(char *s, int n)
+pystrndup(const char *s, int n)
 {
 	char *r = (char *)malloc(n+1);
 	if (r == NULL)
@@ -945,7 +945,7 @@
 static int
 save_bool(Picklerobject *self, PyObject *args)
 {
-	static char *buf[2] = {FALSE, TRUE};
+	static const char *buf[2] = {FALSE, TRUE};
 	static char len[2] = {sizeof(FALSE)-1, sizeof(TRUE)-1};
 	long l = PyInt_AS_LONG((PyIntObject *)args);
 
@@ -2858,7 +2858,7 @@
 static PyObject *
 get_Pickler(PyObject *self, PyObject *args, PyObject *kwds)
 {
-	static char *kwlist[] = {"file", "protocol", NULL};
+	static const char *kwlist[] = {"file", "protocol", NULL};
 	PyObject *file = NULL;
 	int proto = 0;
 
@@ -5378,7 +5378,7 @@
 static PyObject *
 cpm_dump(PyObject *self, PyObject *args, PyObject *kwds)
 {
-	static char *kwlist[] = {"obj", "file", "protocol", NULL};
+	static const char *kwlist[] = {"obj", "file", "protocol", NULL};
 	PyObject *ob, *file, *res = NULL;
 	Picklerobject *pickler = 0;
 	int proto = 0;
@@ -5407,7 +5407,7 @@
 static PyObject *
 cpm_dumps(PyObject *self, PyObject *args, PyObject *kwds)
 {
-	static char *kwlist[] = {"obj", "protocol", NULL};
+	static const char *kwlist[] = {"obj", "protocol", NULL};
 	PyObject *ob, *file = 0, *res = NULL;
 	Picklerobject *pickler = 0;
 	int proto = 0;

Modified: python/trunk/Modules/cStringIO.c
==============================================================================
--- python/trunk/Modules/cStringIO.c	(original)
+++ python/trunk/Modules/cStringIO.c	Sat Dec 10 19:50:16 2005
@@ -362,7 +362,7 @@
 
 
 static int
-O_cwrite(PyObject *self, char *c, int  l) {
+O_cwrite(PyObject *self, const char *c, int  l) {
         int newl;
         Oobject *oself;
 

Modified: python/trunk/Modules/cjkcodecs/multibytecodec.c
==============================================================================
--- python/trunk/Modules/cjkcodecs/multibytecodec.c	(original)
+++ python/trunk/Modules/cjkcodecs/multibytecodec.c	Sat Dec 10 19:50:16 2005
@@ -45,8 +45,8 @@
 PyDoc_STRVAR(MultibyteCodec_StreamWriter__doc__,
 "I.StreamWriter(stream[, errors]) -> StreamWriter instance");
 
-static char *codeckwarglist[] = {"input", "errors", NULL};
-static char *streamkwarglist[] = {"stream", "errors", NULL};
+static const char *codeckwarglist[] = {"input", "errors", NULL};
+static const char *streamkwarglist[] = {"stream", "errors", NULL};
 
 static PyObject *multibytecodec_encode(MultibyteCodec *,
 		MultibyteCodec_State *, const Py_UNICODE **, size_t,

Modified: python/trunk/Modules/datetimemodule.c
==============================================================================
--- python/trunk/Modules/datetimemodule.c	(original)
+++ python/trunk/Modules/datetimemodule.c	Sat Dec 10 19:50:16 2005
@@ -1073,10 +1073,10 @@
 static PyObject *
 format_ctime(PyDateTime_Date *date, int hours, int minutes, int seconds)
 {
-	static char *DayNames[] = {
+	static const char *DayNames[] = {
 		"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
 	};
-	static char *MonthNames[] = {
+	static const char *MonthNames[] = {
 		"Jan", "Feb", "Mar", "Apr", "May", "Jun",
 		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
 	};
@@ -1891,7 +1891,7 @@
 	PyObject *y = NULL;	/* temp sum of microseconds */
 	double leftover_us = 0.0;
 
-	static char *keywords[] = {
+	static const char *keywords[] = {
 		"days", "seconds", "microseconds", "milliseconds",
 		"minutes", "hours", "weeks", NULL
 	};
@@ -2194,7 +2194,7 @@
 
 /* Constructors. */
 
-static char *date_kws[] = {"year", "month", "day", NULL};
+static const char *date_kws[] = {"year", "month", "day", NULL};
 
 static PyObject *
 date_new(PyTypeObject *type, PyObject *args, PyObject *kw)
@@ -2406,7 +2406,7 @@
 date_repr(PyDateTime_Date *self)
 {
 	char buffer[1028];
-	char *typename;
+	const char *typename;
 
 	typename = self->ob_type->tp_name;
 	PyOS_snprintf(buffer, sizeof(buffer), "%s(%d, %d, %d)",
@@ -2448,7 +2448,7 @@
 	PyObject *result;
 	PyObject *format;
 	PyObject *tuple;
-	static char *keywords[] = {"format", NULL};
+	static const char *keywords[] = {"format", NULL};
 
 	if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:strftime", keywords,
 					  &PyString_Type, &format))
@@ -3028,7 +3028,7 @@
  * Constructors.
  */
 
-static char *time_kws[] = {"hour", "minute", "second", "microsecond",
+static const char *time_kws[] = {"hour", "minute", "second", "microsecond",
 			   "tzinfo", NULL};
 
 static PyObject *
@@ -3133,7 +3133,7 @@
 time_repr(PyDateTime_Time *self)
 {
 	char buffer[100];
-	char *typename = self->ob_type->tp_name;
+	const char *typename = self->ob_type->tp_name;
 	int h = TIME_GET_HOUR(self);
 	int m = TIME_GET_MINUTE(self);
 	int s = TIME_GET_SECOND(self);
@@ -3196,7 +3196,7 @@
 	PyObject *result;
 	PyObject *format;
 	PyObject *tuple;
-	static char *keywords[] = {"format", NULL};
+	static const char *keywords[] = {"format", NULL};
 
 	if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:strftime", keywords,
 					  &PyString_Type, &format))
@@ -3548,7 +3548,7 @@
  * Constructors.
  */
 
-static char *datetime_kws[] = {
+static const char *datetime_kws[] = {
 	"year", "month", "day", "hour", "minute", "second",
 	"microsecond", "tzinfo", NULL
 };
@@ -3729,7 +3729,7 @@
 {
 	PyObject *self;
 	PyObject *tzinfo = Py_None;
-	static char *keywords[] = {"tz", NULL};
+	static const char *keywords[] = {"tz", NULL};
 
 	if (! PyArg_ParseTupleAndKeywords(args, kw, "|O:now", keywords,
 					  &tzinfo))
@@ -3765,7 +3765,7 @@
 	PyObject *self;
 	double timestamp;
 	PyObject *tzinfo = Py_None;
-	static char *keywords[] = {"timestamp", "tz", NULL};
+	static const char *keywords[] = {"timestamp", "tz", NULL};
 
 	if (! PyArg_ParseTupleAndKeywords(args, kw, "d|O:fromtimestamp",
 					  keywords, &timestamp, &tzinfo))
@@ -3843,7 +3843,7 @@
 static PyObject *
 datetime_combine(PyObject *cls, PyObject *args, PyObject *kw)
 {
- 	static char *keywords[] = {"date", "time", NULL};
+ 	static const char *keywords[] = {"date", "time", NULL};
 	PyObject *date;
 	PyObject *time;
 	PyObject *result = NULL;
@@ -4027,7 +4027,7 @@
 datetime_repr(PyDateTime_DateTime *self)
 {
 	char buffer[1000];
-	char *typename = self->ob_type->tp_name;
+	const char *typename = self->ob_type->tp_name;
 	PyObject *baserepr;
 
 	if (DATE_GET_MICROSECOND(self)) {
@@ -4070,7 +4070,7 @@
 datetime_isoformat(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
 {
 	char sep = 'T';
-	static char *keywords[] = {"sep", NULL};
+	static const char *keywords[] = {"sep", NULL};
 	char buffer[100];
 	char *cp;
 	PyObject *result;
@@ -4261,7 +4261,7 @@
 	int offset, none;
 
 	PyObject *tzinfo;
-	static char *keywords[] = {"tz", NULL};
+	static const char *keywords[] = {"tz", NULL};
 
 	if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:astimezone", keywords,
 					  &PyDateTime_TZInfoType, &tzinfo))

Modified: python/trunk/Modules/itertoolsmodule.c
==============================================================================
--- python/trunk/Modules/itertoolsmodule.c	(original)
+++ python/trunk/Modules/itertoolsmodule.c	Sat Dec 10 19:50:16 2005
@@ -26,7 +26,7 @@
 static PyObject *
 groupby_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
-	static char *kwargs[] = {"iterable", "key", NULL};
+	static const char *kwargs[] = {"iterable", "key", NULL};
 	groupbyobject *gbo;
  	PyObject *it, *keyfunc = Py_None;
  

Modified: python/trunk/Modules/mmapmodule.c
==============================================================================
--- python/trunk/Modules/mmapmodule.c	(original)
+++ python/trunk/Modules/mmapmodule.c	Sat Dec 10 19:50:16 2005
@@ -864,12 +864,13 @@
 	int map_size;
 	int fd, flags = MAP_SHARED, prot = PROT_WRITE | PROT_READ;
 	access_mode access = ACCESS_DEFAULT;
-	char *keywords[] = {"fileno", "length", 
-			    "flags", "prot", 
-			    "access", NULL};
+	static const char *keywords[] = {"fileno", "length", 
+                                         "flags", "prot", 
+                                         "access", NULL};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iO|iii", keywords, 
-					 &fd, &map_size_obj, &flags, &prot, &access))
+					 &fd, &map_size_obj, &flags, &prot,
+                                         &access))
 		return NULL;
 	map_size = _GetMapSize(map_size_obj);
 	if (map_size < 0)
@@ -952,9 +953,9 @@
 	HANDLE fh = 0;
 	access_mode   access = ACCESS_DEFAULT;
 	DWORD flProtect, dwDesiredAccess;
-	char *keywords[] = { "fileno", "length", 
-			     "tagname", 
-			     "access", NULL };
+	static const char *keywords[] = { "fileno", "length", 
+                                          "tagname", 
+                                          "access", NULL };
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iO|zi", keywords,
 					 &fileno, &map_size_obj, 

Modified: python/trunk/Modules/parsermodule.c
==============================================================================
--- python/trunk/Modules/parsermodule.c	(original)
+++ python/trunk/Modules/parsermodule.c	Sat Dec 10 19:50:16 2005
@@ -158,7 +158,7 @@
 
 static void parser_free(PyST_Object *st);
 static int parser_compare(PyST_Object *left, PyST_Object *right);
-static PyObject *parser_getattr(PyObject *self, char *name);
+static PyObject *parser_getattr(PyObject *self, const char *name);
 
 
 static
@@ -292,7 +292,7 @@
     PyObject *res = 0;
     int ok;
 
-    static char *keywords[] = {"ast", "line_info", NULL};
+    static const char *keywords[] = {"ast", "line_info", NULL};
 
     if (self == NULL) {
         ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2tuple", keywords,
@@ -330,7 +330,7 @@
     PyObject *res = 0;
     int ok;
 
-    static char *keywords[] = {"ast", "line_info", NULL};
+    static const char *keywords[] = {"ast", "line_info", NULL};
 
     if (self == NULL)
         ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2list", keywords,
@@ -367,7 +367,7 @@
     char*         str = "<syntax-tree>";
     int ok;
 
-    static char *keywords[] = {"ast", "filename", NULL};
+    static const char *keywords[] = {"ast", "filename", NULL};
 
     if (self == NULL)
         ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|s:compilest", keywords,
@@ -396,7 +396,7 @@
     PyObject* res = 0;
     int ok;
 
-    static char *keywords[] = {"ast", NULL};
+    static const char *keywords[] = {"ast", NULL};
 
     if (self == NULL)
         ok = PyArg_ParseTupleAndKeywords(args, kw, "O!:isexpr", keywords,
@@ -419,7 +419,7 @@
     PyObject* res = 0;
     int ok;
 
-    static char *keywords[] = {"ast", NULL};
+    static const char *keywords[] = {"ast", NULL};
 
     if (self == NULL)
         ok = PyArg_ParseTupleAndKeywords(args, kw, "O!:issuite", keywords,
@@ -456,7 +456,7 @@
 
 
 static PyObject*
-parser_getattr(PyObject *self, char *name)
+parser_getattr(PyObject *self, const char *name)
 {
     return (Py_FindMethod(parser_methods, self, name));
 }
@@ -486,7 +486,7 @@
     char*     string = 0;
     PyObject* res    = 0;
 
-    static char *keywords[] = {"source", NULL};
+    static const char *keywords[] = {"source", NULL};
 
     if (PyArg_ParseTupleAndKeywords(args, kw, argspec, keywords, &string)) {
         node* n = PyParser_SimpleParseString(string,
@@ -568,7 +568,7 @@
     PyObject *tuple;
     node *tree;
 
-    static char *keywords[] = {"sequence", NULL};
+    static const char *keywords[] = {"sequence", NULL};
 
     if (!PyArg_ParseTupleAndKeywords(args, kw, "O:sequence2st", keywords,
                                      &tuple))

Modified: python/trunk/Modules/pyexpat.c
==============================================================================
--- python/trunk/Modules/pyexpat.c	(original)
+++ python/trunk/Modules/pyexpat.c	Sat Dec 10 19:50:16 2005
@@ -1724,8 +1724,8 @@
     PyObject *intern = NULL;
     PyObject *result;
     int intern_decref = 0;
-    static char *kwlist[] = {"encoding", "namespace_separator",
-			     "intern", NULL};
+    static const char *kwlist[] = {"encoding", "namespace_separator",
+                                   "intern", NULL};
 
     if (!PyArg_ParseTupleAndKeywords(args, kw, "|zzO:ParserCreate", kwlist,
                                      &encoding, &namespace_separator, &intern))

Modified: python/trunk/Modules/sha256module.c
==============================================================================
--- python/trunk/Modules/sha256module.c	(original)
+++ python/trunk/Modules/sha256module.c	Sat Dec 10 19:50:16 2005
@@ -624,7 +624,7 @@
 static PyObject *
 SHA256_new(PyObject *self, PyObject *args, PyObject *kwdict)
 {
-    static char *kwlist[] = {"string", NULL};
+    static const char *kwlist[] = {"string", NULL};
     SHAobject *new;
     unsigned char *cp = NULL;
     int len;
@@ -655,7 +655,7 @@
 static PyObject *
 SHA224_new(PyObject *self, PyObject *args, PyObject *kwdict)
 {
-    static char *kwlist[] = {"string", NULL};
+    static const char *kwlist[] = {"string", NULL};
     SHAobject *new;
     unsigned char *cp = NULL;
     int len;

Modified: python/trunk/Modules/sha512module.c
==============================================================================
--- python/trunk/Modules/sha512module.c	(original)
+++ python/trunk/Modules/sha512module.c	Sat Dec 10 19:50:16 2005
@@ -690,7 +690,7 @@
 static PyObject *
 SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict)
 {
-    static char *kwlist[] = {"string", NULL};
+    static const char *kwlist[] = {"string", NULL};
     SHAobject *new;
     unsigned char *cp = NULL;
     int len;
@@ -721,7 +721,7 @@
 static PyObject *
 SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict)
 {
-    static char *kwlist[] = {"string", NULL};
+    static const char *kwlist[] = {"string", NULL};
     SHAobject *new;
     unsigned char *cp = NULL;
     int len;

Modified: python/trunk/Modules/socketmodule.c
==============================================================================
--- python/trunk/Modules/socketmodule.c	(original)
+++ python/trunk/Modules/socketmodule.c	Sat Dec 10 19:50:16 2005
@@ -2489,7 +2489,7 @@
 	PySocketSockObject *s = (PySocketSockObject *)self;
 	SOCKET_T fd;
 	int family = AF_INET, type = SOCK_STREAM, proto = 0;
-	static char *keywords[] = {"family", "type", "proto", 0};
+	static const char *keywords[] = {"family", "type", "proto", 0};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwds,
 					 "|iii:socket", keywords,

Modified: python/trunk/Objects/boolobject.c
==============================================================================
--- python/trunk/Objects/boolobject.c	(original)
+++ python/trunk/Objects/boolobject.c	Sat Dec 10 19:50:16 2005
@@ -50,7 +50,7 @@
 static PyObject *
 bool_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
-	static char *kwlist[] = {"x", 0};
+	static const char *kwlist[] = {"x", 0};
 	PyObject *x = Py_False;
 	long ok;
 

Modified: python/trunk/Objects/classobject.c
==============================================================================
--- python/trunk/Objects/classobject.c	(original)
+++ python/trunk/Objects/classobject.c	Sat Dec 10 19:50:16 2005
@@ -159,7 +159,7 @@
 class_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	PyObject *name, *bases, *dict;
-	static char *kwlist[] = {"name", "bases", "dict", 0};
+	static const char *kwlist[] = {"name", "bases", "dict", 0};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "SOO", kwlist,
 					 &name, &bases, &dict))

Modified: python/trunk/Objects/complexobject.c
==============================================================================
--- python/trunk/Objects/complexobject.c	(original)
+++ python/trunk/Objects/complexobject.c	Sat Dec 10 19:50:16 2005
@@ -829,7 +829,7 @@
 	Py_complex cr, ci;
 	int own_r = 0;
 	static PyObject *complexstr;
-	static char *kwlist[] = {"real", "imag", 0};
+	static const char *kwlist[] = {"real", "imag", 0};
 
 	r = Py_False;
 	i = NULL;

Modified: python/trunk/Objects/descrobject.c
==============================================================================
--- python/trunk/Objects/descrobject.c	(original)
+++ python/trunk/Objects/descrobject.c	Sat Dec 10 19:50:16 2005
@@ -579,7 +579,7 @@
 };
 
 static PyDescrObject *
-descr_new(PyTypeObject *descrtype, PyTypeObject *type, char *name)
+descr_new(PyTypeObject *descrtype, PyTypeObject *type, const char *name)
 {
 	PyDescrObject *descr;
 
@@ -1182,7 +1182,7 @@
 property_init(PyObject *self, PyObject *args, PyObject *kwds)
 {
 	PyObject *get = NULL, *set = NULL, *del = NULL, *doc = NULL;
-	static char *kwlist[] = {"fget", "fset", "fdel", "doc", 0};
+	static const char *kwlist[] = {"fget", "fset", "fdel", "doc", 0};
 	propertyobject *gs = (propertyobject *)self;
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO:property",

Modified: python/trunk/Objects/enumobject.c
==============================================================================
--- python/trunk/Objects/enumobject.c	(original)
+++ python/trunk/Objects/enumobject.c	Sat Dec 10 19:50:16 2005
@@ -16,7 +16,7 @@
 {
 	enumobject *en;
 	PyObject *seq = NULL;
-	static char *kwlist[] = {"sequence", 0};
+	static const char *kwlist[] = {"sequence", 0};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:enumerate", kwlist,
 					 &seq))

Modified: python/trunk/Objects/fileobject.c
==============================================================================
--- python/trunk/Objects/fileobject.c	(original)
+++ python/trunk/Objects/fileobject.c	Sat Dec 10 19:50:16 2005
@@ -1884,7 +1884,7 @@
 {
 	PyFileObject *foself = (PyFileObject *)self;
 	int ret = 0;
-	static char *kwlist[] = {"name", "mode", "buffering", 0};
+	static const char *kwlist[] = {"name", "mode", "buffering", 0};
 	char *name = NULL;
 	char *mode = "r";
 	int bufsize = -1;
@@ -1926,8 +1926,9 @@
 			return -1;
 
                 /* We parse again to get the name as a PyObject */
-                if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|si:file", kwlist,
-                    &o_name, &mode, &bufsize))
+                if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|si:file", 
+                                                 kwlist, &o_name, &mode, 
+                                                 &bufsize))
                         return -1;
 
 		if (fill_file_fields(foself, NULL, o_name, mode,

Modified: python/trunk/Objects/floatobject.c
==============================================================================
--- python/trunk/Objects/floatobject.c	(original)
+++ python/trunk/Objects/floatobject.c	Sat Dec 10 19:50:16 2005
@@ -941,7 +941,7 @@
 float_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	PyObject *x = Py_False; /* Integer zero */
-	static char *kwlist[] = {"x", 0};
+	static const char *kwlist[] = {"x", 0};
 
 	if (type != &PyFloat_Type)
 		return float_subtype_new(type, args, kwds); /* Wimp out */

Modified: python/trunk/Objects/funcobject.c
==============================================================================
--- python/trunk/Objects/funcobject.c	(original)
+++ python/trunk/Objects/funcobject.c	Sat Dec 10 19:50:16 2005
@@ -364,7 +364,7 @@
 	PyObject *closure = Py_None;
 	PyFunctionObject *newfunc;
 	int nfree, nclosure;
-	static char *kwlist[] = {"code", "globals", "name",
+	static const char *kwlist[] = {"code", "globals", "name",
 				 "argdefs", "closure", 0};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kw, "O!O!|OOO:function",

Modified: python/trunk/Objects/intobject.c
==============================================================================
--- python/trunk/Objects/intobject.c	(original)
+++ python/trunk/Objects/intobject.c	Sat Dec 10 19:50:16 2005
@@ -879,7 +879,7 @@
 {
 	PyObject *x = NULL;
 	int base = -909;
-	static char *kwlist[] = {"x", "base", 0};
+	static const char *kwlist[] = {"x", "base", 0};
 
 	if (type != &PyInt_Type)
 		return int_subtype_new(type, args, kwds); /* Wimp out */

Modified: python/trunk/Objects/listobject.c
==============================================================================
--- python/trunk/Objects/listobject.c	(original)
+++ python/trunk/Objects/listobject.c	Sat Dec 10 19:50:16 2005
@@ -1983,7 +1983,7 @@
 	PyObject *keyfunc = NULL;
 	int i;
 	PyObject *key, *value, *kvpair;
-	static char *kwlist[] = {"cmp", "key", "reverse", 0};
+	static const char *kwlist[] = {"cmp", "key", "reverse", 0};
 
 	assert(self != NULL);
 	assert (PyList_Check(self));
@@ -2357,7 +2357,7 @@
 list_init(PyListObject *self, PyObject *args, PyObject *kw)
 {
 	PyObject *arg = NULL;
-	static char *kwlist[] = {"sequence", 0};
+	static const char *kwlist[] = {"sequence", 0};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kw, "|O:list", kwlist, &arg))
 		return -1;

Modified: python/trunk/Objects/longobject.c
==============================================================================
--- python/trunk/Objects/longobject.c	(original)
+++ python/trunk/Objects/longobject.c	Sat Dec 10 19:50:16 2005
@@ -1,4 +1,5 @@
 
+
 /* Long (arbitrary precision) integer object implementation */
 
 /* XXX The functional organization of this file is terrible */
@@ -2922,7 +2923,7 @@
 {
 	PyObject *x = NULL;
 	int base = -909;		     /* unlikely! */
-	static char *kwlist[] = {"x", "base", 0};
+	static const char *kwlist[] = {"x", "base", 0};
 
 	if (type != &PyLong_Type)
 		return long_subtype_new(type, args, kwds); /* Wimp out */

Modified: python/trunk/Objects/methodobject.c
==============================================================================
--- python/trunk/Objects/methodobject.c	(original)
+++ python/trunk/Objects/methodobject.c	Sat Dec 10 19:50:16 2005
@@ -132,7 +132,7 @@
 static PyObject *
 meth_get__doc__(PyCFunctionObject *m, void *closure)
 {
-	char *doc = m->m_ml->ml_doc;
+	const char *doc = m->m_ml->ml_doc;
 
 	if (doc != NULL)
 		return PyString_FromString(doc);
@@ -311,13 +311,13 @@
 /* Find a method in a method chain */
 
 PyObject *
-Py_FindMethodInChain(PyMethodChain *chain, PyObject *self, char *name)
+Py_FindMethodInChain(PyMethodChain *chain, PyObject *self, const char *name)
 {
 	if (name[0] == '_' && name[1] == '_') {
 		if (strcmp(name, "__methods__") == 0)
 			return listmethodchain(chain);
 		if (strcmp(name, "__doc__") == 0) {
-			char *doc = self->ob_type->tp_doc;
+			const char *doc = self->ob_type->tp_doc;
 			if (doc != NULL)
 				return PyString_FromString(doc);
 		}
@@ -339,7 +339,7 @@
 /* Find a method in a single method list */
 
 PyObject *
-Py_FindMethod(PyMethodDef *methods, PyObject *self, char *name)
+Py_FindMethod(PyMethodDef *methods, PyObject *self, const char *name)
 {
 	PyMethodChain chain;
 	chain.methods = methods;

Modified: python/trunk/Objects/moduleobject.c
==============================================================================
--- python/trunk/Objects/moduleobject.c	(original)
+++ python/trunk/Objects/moduleobject.c	Sat Dec 10 19:50:16 2005
@@ -15,7 +15,7 @@
 };
 
 PyObject *
-PyModule_New(char *name)
+PyModule_New(const char *name)
 {
 	PyModuleObject *m;
 	PyObject *nameobj;
@@ -149,10 +149,10 @@
 static int
 module_init(PyModuleObject *m, PyObject *args, PyObject *kwds)
 {
-	static char *kwlist[] = {"name", "doc", NULL};
+	static const char *kwlist[] = {"name", "doc", NULL};
 	PyObject *dict, *name = Py_None, *doc = Py_None;
-	if (!PyArg_ParseTupleAndKeywords(args, kwds, "S|O:module.__init__", kwlist,
-					 &name, &doc))
+	if (!PyArg_ParseTupleAndKeywords(args, kwds, "S|O:module.__init__",
+                                         kwlist, &name, &doc))
 		return -1;
 	dict = m->md_dict;
 	if (dict == NULL) {

Modified: python/trunk/Objects/object.c
==============================================================================
--- python/trunk/Objects/object.c	(original)
+++ python/trunk/Objects/object.c	Sat Dec 10 19:50:16 2005
@@ -663,7 +663,7 @@
 default_3way_compare(PyObject *v, PyObject *w)
 {
 	int c;
-	char *vname, *wname;
+	const char *vname, *wname;
 
 	if (v->ob_type == w->ob_type) {
 		/* When comparing these pointers, they must be cast to
@@ -1018,7 +1018,7 @@
 }
 
 PyObject *
-PyObject_GetAttrString(PyObject *v, char *name)
+PyObject_GetAttrString(PyObject *v, const char *name)
 {
 	PyObject *w, *res;
 
@@ -1033,7 +1033,7 @@
 }
 
 int
-PyObject_HasAttrString(PyObject *v, char *name)
+PyObject_HasAttrString(PyObject *v, const char *name)
 {
 	PyObject *res = PyObject_GetAttrString(v, name);
 	if (res != NULL) {
@@ -1045,7 +1045,7 @@
 }
 
 int
-PyObject_SetAttrString(PyObject *v, char *name, PyObject *w)
+PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
 {
 	PyObject *s;
 	int res;
@@ -1589,7 +1589,7 @@
 */
 
 static int
-merge_list_attr(PyObject* dict, PyObject* obj, char *attrname)
+merge_list_attr(PyObject* dict, PyObject* obj, const char *attrname)
 {
 	PyObject *list;
 	int result = 0;

Modified: python/trunk/Objects/stringobject.c
==============================================================================
--- python/trunk/Objects/stringobject.c	(original)
+++ python/trunk/Objects/stringobject.c	Sat Dec 10 19:50:16 2005
@@ -3325,7 +3325,7 @@
 string_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	PyObject *x = NULL;
-	static char *kwlist[] = {"object", 0};
+	static const char *kwlist[] = {"object", 0};
 
 	if (type != &PyString_Type)
 		return str_subtype_new(type, args, kwds);

Modified: python/trunk/Objects/structseq.c
==============================================================================
--- python/trunk/Objects/structseq.c	(original)
+++ python/trunk/Objects/structseq.c	Sat Dec 10 19:50:16 2005
@@ -97,7 +97,7 @@
 	PyObject *ob;
 	PyStructSequence *res = NULL;
 	int len, min_len, max_len, i, n_unnamed_fields;
-	static char *kwlist[] = {"sequence", "dict", 0};
+	static const char *kwlist[] = {"sequence", "dict", 0};
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:structseq", 
 					 kwlist, &arg, &dict))

Modified: python/trunk/Objects/tupleobject.c
==============================================================================
--- python/trunk/Objects/tupleobject.c	(original)
+++ python/trunk/Objects/tupleobject.c	Sat Dec 10 19:50:16 2005
@@ -528,7 +528,7 @@
 tuple_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	PyObject *arg = NULL;
-	static char *kwlist[] = {"sequence", 0};
+	static const char *kwlist[] = {"sequence", 0};
 
 	if (type != &PyTuple_Type)
 		return tuple_subtype_new(type, args, kwds);

Modified: python/trunk/Objects/typeobject.c
==============================================================================
--- python/trunk/Objects/typeobject.c	(original)
+++ python/trunk/Objects/typeobject.c	Sat Dec 10 19:50:16 2005
@@ -21,7 +21,7 @@
 static PyObject *
 type_name(PyTypeObject *type, void *context)
 {
-	char *s;
+	const char *s;
 
 	if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
 		PyHeapTypeObject* et = (PyHeapTypeObject*)type;
@@ -1556,7 +1556,7 @@
 type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
 {
 	PyObject *name, *bases, *dict;
-	static char *kwlist[] = {"name", "bases", "dict", 0};
+	static const char *kwlist[] = {"name", "bases", "dict", 0};
 	PyObject *slots, *tmp, *newslots;
 	PyTypeObject *type, *base, *tmptype, *winner;
 	PyHeapTypeObject *et;
@@ -1856,12 +1856,13 @@
 		PyObject *doc = PyDict_GetItemString(dict, "__doc__");
 		if (doc != NULL && PyString_Check(doc)) {
 			const size_t n = (size_t)PyString_GET_SIZE(doc);
-			type->tp_doc = (char *)PyObject_MALLOC(n+1);
-			if (type->tp_doc == NULL) {
+                        char *tp_doc = PyObject_MALLOC(n+1);
+			if (tp_doc == NULL) {
 				Py_DECREF(type);
 				return NULL;
 			}
-			memcpy(type->tp_doc, PyString_AS_STRING(doc), n+1);
+			memcpy(tp_doc, PyString_AS_STRING(doc), n+1);
+                        type->tp_doc = tp_doc;
 		}
 	}
 
@@ -2105,7 +2106,10 @@
 	Py_XDECREF(type->tp_mro);
 	Py_XDECREF(type->tp_cache);
 	Py_XDECREF(type->tp_subclasses);
-	PyObject_Free(type->tp_doc);
+        /* A type's tp_doc is heap allocated, unlike the tp_doc slots
+         * of most other objects.  It's okay to cast it to char *.
+         */
+	PyObject_Free((char *)type->tp_doc);
 	Py_XDECREF(et->name);
 	Py_XDECREF(et->slots);
 	type->ob_type->tp_free((PyObject *)type);

Modified: python/trunk/Objects/unicodeobject.c
==============================================================================
--- python/trunk/Objects/unicodeobject.c	(original)
+++ python/trunk/Objects/unicodeobject.c	Sat Dec 10 19:50:16 2005
@@ -7238,7 +7238,7 @@
 unicode_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
         PyObject *x = NULL;
-	static char *kwlist[] = {"string", "encoding", "errors", 0};
+	static const char *kwlist[] = {"string", "encoding", "errors", 0};
 	char *encoding = NULL;
 	char *errors = NULL;
 

Modified: python/trunk/Objects/weakrefobject.c
==============================================================================
--- python/trunk/Objects/weakrefobject.c	(original)
+++ python/trunk/Objects/weakrefobject.c	Sat Dec 10 19:50:16 2005
@@ -126,7 +126,7 @@
 static PyObject *
 weakref_call(PyWeakReference *self, PyObject *args, PyObject *kw)
 {
-    static char *argnames[] = {NULL};
+    static const char *argnames[] = {NULL};
 
     if (PyArg_ParseTupleAndKeywords(args, kw, ":__call__", argnames)) {
         PyObject *object = PyWeakref_GET_OBJECT(self);

Modified: python/trunk/Python/bltinmodule.c
==============================================================================
--- python/trunk/Python/bltinmodule.c	(original)
+++ python/trunk/Python/bltinmodule.c	Sat Dec 10 19:50:16 2005
@@ -1907,7 +1907,7 @@
 {
 	PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
 	PyObject *callable;
-	static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
+	static const char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
 	long reverse;
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",

Modified: python/trunk/Python/ceval.c
==============================================================================
--- python/trunk/Python/ceval.c	(original)
+++ python/trunk/Python/ceval.c	Sat Dec 10 19:50:16 2005
@@ -3434,7 +3434,7 @@
 	return result;
 }
 
-char *
+const char *
 PyEval_GetFuncName(PyObject *func)
 {
 	if (PyMethod_Check(func))
@@ -3453,7 +3453,7 @@
 	}
 }
 
-char *
+const char *
 PyEval_GetFuncDesc(PyObject *func)
 {
 	if (PyMethod_Check(func))

Modified: python/trunk/Python/getargs.c
==============================================================================
--- python/trunk/Python/getargs.c	(original)
+++ python/trunk/Python/getargs.c	Sat Dec 10 19:50:16 2005
@@ -6,33 +6,33 @@
 #include <ctype.h>
 
 
-int PyArg_Parse(PyObject *, char *, ...);
-int PyArg_ParseTuple(PyObject *, char *, ...);
-int PyArg_VaParse(PyObject *, char *, va_list);
+int PyArg_Parse(PyObject *, const char *, ...);
+int PyArg_ParseTuple(PyObject *, const char *, ...);
+int PyArg_VaParse(PyObject *, const char *, va_list);
 
 int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
-				char *, char **, ...);
+				const char *, const char **, ...);
 int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
-				char *, char **, va_list);
+				const char *, const char **, va_list);
 
 
 /* Forward */
-static int vgetargs1(PyObject *, char *, va_list *, int);
-static void seterror(int, char *, int *, char *, char *);
-static char *convertitem(PyObject *, char **, va_list *, int *, char *, 
+static int vgetargs1(PyObject *, const char *, va_list *, int);
+static void seterror(int, const char *, int *, const char *, const char *);
+static char *convertitem(PyObject *, const char **, va_list *, int *, char *, 
 			 size_t, PyObject **);
-static char *converttuple(PyObject *, char **, va_list *,
+static char *converttuple(PyObject *, const char **, va_list *,
 			  int *, char *, size_t, int, PyObject **);
-static char *convertsimple(PyObject *, char **, va_list *, char *,
+static char *convertsimple(PyObject *, const char **, va_list *, char *,
 			   size_t, PyObject **);
 static int convertbuffer(PyObject *, void **p, char **);
 
 static int vgetargskeywords(PyObject *, PyObject *,
-			    char *, char **, va_list *);
-static char *skipitem(char **, va_list *);
+			    const char *, const char **, va_list *);
+static char *skipitem(const char **, va_list *);
 
 int
-PyArg_Parse(PyObject *args, char *format, ...)
+PyArg_Parse(PyObject *args, const char *format, ...)
 {
 	int retval;
 	va_list va;
@@ -45,7 +45,7 @@
 
 
 int
-PyArg_ParseTuple(PyObject *args, char *format, ...)
+PyArg_ParseTuple(PyObject *args, const char *format, ...)
 {
 	int retval;
 	va_list va;
@@ -58,7 +58,7 @@
 
 
 int
-PyArg_VaParse(PyObject *args, char *format, va_list va)
+PyArg_VaParse(PyObject *args, const char *format, va_list va)
 {
 	va_list lva;
 
@@ -120,17 +120,17 @@
 
 
 static int
-vgetargs1(PyObject *args, char *format, va_list *p_va, int compat)
+vgetargs1(PyObject *args, const char *format, va_list *p_va, int compat)
 {
 	char msgbuf[256];
 	int levels[32];
-	char *fname = NULL;
-	char *message = NULL;
+	const char *fname = NULL;
+	const char *message = NULL;
 	int min = -1;
 	int max = 0;
 	int level = 0;
 	int endfmt = 0;
-	char *formatsave = format;
+	const char *formatsave = format;
 	int i, len;
 	char *msg;
 	PyObject *freelist = NULL;
@@ -269,7 +269,8 @@
 
 
 static void
-seterror(int iarg, char *msg, int *levels, char *fname, char *message)
+seterror(int iarg, const char *msg, int *levels, const char *fname,
+         const char *message)
 {
 	char buf[512];
 	int i;
@@ -324,12 +325,12 @@
 */
 
 static char *
-converttuple(PyObject *arg, char **p_format, va_list *p_va, int *levels,
+converttuple(PyObject *arg, const char **p_format, va_list *p_va, int *levels,
 	     char *msgbuf, size_t bufsize, int toplevel, PyObject **freelist)
 {
 	int level = 0;
 	int n = 0;
-	char *format = *p_format;
+	const char *format = *p_format;
 	int i;
 	
 	for (;;) {
@@ -392,11 +393,11 @@
 /* Convert a single item. */
 
 static char *
-convertitem(PyObject *arg, char **p_format, va_list *p_va, int *levels,
+convertitem(PyObject *arg, const char **p_format, va_list *p_va, int *levels,
 	    char *msgbuf, size_t bufsize, PyObject **freelist)
 {
 	char *msg;
-	char *format = *p_format;
+	const char *format = *p_format;
 	
 	if (*format == '(' /* ')' */) {
 		format++;
@@ -424,7 +425,7 @@
 /* Format an error message generated by convertsimple(). */
 
 static char *
-converterr(char *expected, PyObject *arg, char *msgbuf, size_t bufsize)
+converterr(const char *expected, PyObject *arg, char *msgbuf, size_t bufsize)
 {
 	assert(expected != NULL);
 	assert(arg != NULL); 
@@ -459,10 +460,10 @@
 */
 
 static char *
-convertsimple(PyObject *arg, char **p_format, va_list *p_va, char *msgbuf,
-	      size_t bufsize, PyObject **freelist)
+convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
+              char *msgbuf, size_t bufsize, PyObject **freelist)
 {
-	char *format = *p_format;
+	const char *format = *p_format;
 	char c = *format++;
 #ifdef Py_USING_UNICODE
 	PyObject *uarg;
@@ -1134,8 +1135,8 @@
 int
 PyArg_ParseTupleAndKeywords(PyObject *args,
 			    PyObject *keywords,
-			    char *format, 
-			    char **kwlist, ...)
+			    const char *format, 
+			    const char **kwlist, ...)
 {
 	int retval;
 	va_list va;
@@ -1158,9 +1159,9 @@
 
 int
 PyArg_VaParseTupleAndKeywords(PyObject *args,
-			    PyObject *keywords,
-			    char *format, 
-			    char **kwlist, va_list va)
+                              PyObject *keywords,
+                              const char *format, 
+                              const char **kwlist, va_list va)
 {
 	int retval;
 	va_list lva;
@@ -1190,16 +1191,16 @@
 
 
 static int
-vgetargskeywords(PyObject *args, PyObject *keywords, char *format,
-	         char **kwlist, va_list *p_va)
+vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
+	         const char **kwlist, va_list *p_va)
 {
 	char msgbuf[512];
 	int levels[32];
-	char *fname, *message;
+	const char *fname, *message;
 	int min, max;
-	char *formatsave;
+	const char *formatsave;
 	int i, len, nargs, nkeywords;
-	char *msg, **p;
+	const char *msg, **p;
 	PyObject *freelist = NULL;
 
 	assert(args != NULL && PyTuple_Check(args));
@@ -1269,7 +1270,7 @@
 	   keyword parameter in messages */
 	if (nkeywords > 0) {
 		for (i = 0; i < nargs; i++) {
-			char *thiskw = kwlist[i];
+			const char *thiskw = kwlist[i];
 			if (thiskw == NULL)
 				break;
 			if (PyDict_GetItemString(keywords, thiskw)) {
@@ -1402,9 +1403,9 @@
 
 
 static char *
-skipitem(char **p_format, va_list *p_va)
+skipitem(const char **p_format, va_list *p_va)
 {
-	char *format = *p_format;
+        const char *format = *p_format;
 	char c = *format++;
 	
 	switch (c) {
@@ -1518,7 +1519,7 @@
 
 
 int
-PyArg_UnpackTuple(PyObject *args, char *name, int min, int max, ...)
+PyArg_UnpackTuple(PyObject *args, const char *name, int min, int max, ...)
 {
 	int i, l;
 	PyObject **o;
@@ -1583,7 +1584,7 @@
  * not emtpy, returns 1 otherwise
  */
 int
-_PyArg_NoKeywords(char *funcname, PyObject *kw)
+_PyArg_NoKeywords(const char *funcname, PyObject *kw)
 {
 	if (kw == NULL)
 		return 1;
@@ -1598,6 +1599,3 @@
 			funcname);
 	return 0;
 }
-
-
-

Modified: python/trunk/Python/import.c
==============================================================================
--- python/trunk/Python/import.c	(original)
+++ python/trunk/Python/import.c	Sat Dec 10 19:50:16 2005
@@ -555,7 +555,7 @@
    'NEW' REFERENCE! */
 
 PyObject *
-PyImport_AddModule(char *name)
+PyImport_AddModule(const char *name)
 {
 	PyObject *modules = PyImport_GetModuleDict();
 	PyObject *m;
@@ -1875,7 +1875,7 @@
    its module object WITH INCREMENTED REFERENCE COUNT */
 
 PyObject *
-PyImport_ImportModule(char *name)
+PyImport_ImportModule(const char *name)
 {
 	PyObject *pname;
 	PyObject *result;

Modified: python/trunk/Python/modsupport.c
==============================================================================
--- python/trunk/Python/modsupport.c	(original)
+++ python/trunk/Python/modsupport.c	Sat Dec 10 19:50:16 2005
@@ -26,7 +26,7 @@
  This Python has API version %d, module %.100s has version %d.";
 
 PyObject *
-Py_InitModule4(char *name, PyMethodDef *methods, char *doc,
+Py_InitModule4(const char *name, PyMethodDef *methods, const char *doc,
 	       PyObject *passthrough, int module_api_version)
 {
 	PyObject *m, *d, *v, *n;
@@ -99,7 +99,7 @@
 /* Helper for mkvalue() to scan the length of a format */
 
 static int
-countformat(char *format, int endchar)
+countformat(const char *format, int endchar)
 {
 	int count = 0;
 	int level = 0;
@@ -142,14 +142,14 @@
 /* Generic function to create a value -- the inverse of getargs() */
 /* After an original idea and first implementation by Steven Miale */
 
-static PyObject *do_mktuple(char**, va_list *, int, int);
-static PyObject *do_mklist(char**, va_list *, int, int);
-static PyObject *do_mkdict(char**, va_list *, int, int);
-static PyObject *do_mkvalue(char**, va_list *);
+static PyObject *do_mktuple(const char**, va_list *, int, int);
+static PyObject *do_mklist(const char**, va_list *, int, int);
+static PyObject *do_mkdict(const char**, va_list *, int, int);
+static PyObject *do_mkvalue(const char**, va_list *);
 
 
 static PyObject *
-do_mkdict(char **p_format, va_list *p_va, int endchar, int n)
+do_mkdict(const char **p_format, va_list *p_va, int endchar, int n)
 {
 	PyObject *d;
 	int i;
@@ -195,7 +195,7 @@
 }
 
 static PyObject *
-do_mklist(char **p_format, va_list *p_va, int endchar, int n)
+do_mklist(const char **p_format, va_list *p_va, int endchar, int n)
 {
 	PyObject *v;
 	int i;
@@ -242,7 +242,7 @@
 #endif
 
 static PyObject *
-do_mktuple(char **p_format, va_list *p_va, int endchar, int n)
+do_mktuple(const char **p_format, va_list *p_va, int endchar, int n)
 {
 	PyObject *v;
 	int i;
@@ -278,7 +278,7 @@
 }
 
 static PyObject *
-do_mkvalue(char **p_format, va_list *p_va)
+do_mkvalue(const char **p_format, va_list *p_va)
 {
 	for (;;) {
 		switch (*(*p_format)++) {
@@ -454,7 +454,7 @@
 
 
 PyObject *
-Py_BuildValue(char *format, ...)
+Py_BuildValue(const char *format, ...)
 {
 	va_list va;
 	PyObject* retval;
@@ -465,9 +465,9 @@
 }
 
 PyObject *
-Py_VaBuildValue(char *format, va_list va)
+Py_VaBuildValue(const char *format, va_list va)
 {
-	char *f = format;
+	const char *f = format;
 	int n = countformat(f, '\0');
 	va_list lva;
 
@@ -494,7 +494,7 @@
 
 
 PyObject *
-PyEval_CallFunction(PyObject *obj, char *format, ...)
+PyEval_CallFunction(PyObject *obj, const char *format, ...)
 {
 	va_list vargs;
 	PyObject *args;
@@ -516,7 +516,7 @@
 
 
 PyObject *
-PyEval_CallMethod(PyObject *obj, char *methodname, char *format, ...)
+PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
 {
 	va_list vargs;
 	PyObject *meth;
@@ -545,7 +545,7 @@
 }
 
 int
-PyModule_AddObject(PyObject *m, char *name, PyObject *o)
+PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
 {
 	PyObject *dict;
 	if (!PyModule_Check(m)) {
@@ -574,13 +574,13 @@
 }
 
 int 
-PyModule_AddIntConstant(PyObject *m, char *name, long value)
+PyModule_AddIntConstant(PyObject *m, const char *name, long value)
 {
 	return PyModule_AddObject(m, name, PyInt_FromLong(value));
 }
 
 int 
-PyModule_AddStringConstant(PyObject *m, char *name, char *value)
+PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
 {
 	return PyModule_AddObject(m, name, PyString_FromString(value));
 }


More information about the Python-checkins mailing list