From af68c874a6803b4e90b616077a602c0593719a1d Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Sat, 10 Dec 2005 18:50:16 +0000 Subject: 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 *. --- Include/cStringIO.h | 2 +- Include/ceval.h | 10 +++-- Include/import.h | 4 +- Include/methodobject.h | 8 ++-- Include/modsupport.h | 30 ++++++------- Include/moduleobject.h | 2 +- Include/object.h | 14 +++--- Modules/_bisectmodule.c | 9 ++-- Modules/_bsddb.c | 78 +++++++++++++++++++-------------- Modules/_csv.c | 2 +- Modules/_cursesmodule.c | 4 +- Modules/_hashopenssl.c | 4 +- Modules/_sre.c | 16 +++---- Modules/_tkinter.c | 4 +- Modules/binascii.c | 5 ++- Modules/bz2module.c | 8 ++-- Modules/cPickle.c | 20 ++++----- Modules/cStringIO.c | 2 +- Modules/cjkcodecs/multibytecodec.c | 4 +- Modules/datetimemodule.c | 32 +++++++------- Modules/itertoolsmodule.c | 2 +- Modules/mmapmodule.c | 15 ++++--- Modules/parsermodule.c | 18 ++++---- Modules/pyexpat.c | 4 +- Modules/sha256module.c | 4 +- Modules/sha512module.c | 4 +- Modules/socketmodule.c | 2 +- Objects/boolobject.c | 2 +- Objects/classobject.c | 2 +- Objects/complexobject.c | 2 +- Objects/descrobject.c | 4 +- Objects/enumobject.c | 2 +- Objects/fileobject.c | 7 +-- Objects/floatobject.c | 2 +- Objects/funcobject.c | 2 +- Objects/intobject.c | 2 +- Objects/listobject.c | 4 +- Objects/longobject.c | 3 +- Objects/methodobject.c | 8 ++-- Objects/moduleobject.c | 8 ++-- Objects/object.c | 10 ++--- Objects/stringobject.c | 2 +- Objects/structseq.c | 2 +- Objects/tupleobject.c | 2 +- Objects/typeobject.c | 16 ++++--- Objects/unicodeobject.c | 2 +- Objects/weakrefobject.c | 2 +- Python/bltinmodule.c | 2 +- Python/ceval.c | 4 +- Python/getargs.c | 90 +++++++++++++++++++------------------- Python/import.c | 4 +- Python/modsupport.c | 36 +++++++-------- 52 files changed, 272 insertions(+), 255 deletions(-) diff --git a/Include/cStringIO.h b/Include/cStringIO.h index 66e1edb..290a103 100644 --- a/Include/cStringIO.h +++ b/Include/cStringIO.h @@ -38,7 +38,7 @@ static struct PycStringIO_CAPI { 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 *); diff --git a/Include/ceval.h b/Include/ceval.h index 9481506..6db0818 100644 --- a/Include/ceval.h +++ b/Include/ceval.h @@ -18,9 +18,11 @@ PyAPI_FUNC(PyObject *) PyEval_CallObject(PyObject *, PyObject *); #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 @@ PyAPI_DATA(int) _Py_CheckRecursionLimit; # 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 *); diff --git a/Include/import.h b/Include/import.h index 572cb8a..45cc6c9 100644 --- a/Include/import.h +++ b/Include/import.h @@ -12,8 +12,8 @@ PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(char *name, PyObject *co); 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); diff --git a/Include/methodobject.h b/Include/methodobject.h index 9736dc3..c887d94 100644 --- a/Include/methodobject.h +++ b/Include/methodobject.h @@ -35,15 +35,15 @@ PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); 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 @@ typedef struct PyMethodChain { } PyMethodChain; PyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *, - char *); + const char *); typedef struct { PyObject_HEAD diff --git a/Include/modsupport.h b/Include/modsupport.h index bc30c3f..7851683 100644 --- a/Include/modsupport.h +++ b/Include/modsupport.h @@ -9,22 +9,22 @@ extern "C" { #include -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 @@ PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, char *, char *); #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, \ diff --git a/Include/moduleobject.h b/Include/moduleobject.h index 0f67da3..3d278af 100644 --- a/Include/moduleobject.h +++ b/Include/moduleobject.h @@ -12,7 +12,7 @@ PyAPI_DATA(PyTypeObject) PyModule_Type; #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 *); diff --git a/Include/object.h b/Include/object.h index 15fee96..ed6f3d1 100644 --- a/Include/object.h +++ b/Include/object.h @@ -225,9 +225,9 @@ typedef struct { 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 PyObject *(*allocfunc)(struct _typeobject *, int); typedef struct _typeobject { PyObject_VAR_HEAD - char *tp_name; /* For printing, in format "." */ + const char *tp_name; /* For printing, in format "." */ int tp_basicsize, tp_itemsize; /* For allocation */ /* Methods to implement standard operations */ @@ -275,7 +275,7 @@ typedef struct _typeobject { /* 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(PyObject *) PyObject_Unicode(PyObject *); 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 *); diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c index 0d29462..e40297d 100644 --- a/Modules/_bisectmodule.c +++ b/Modules/_bisectmodule.c @@ -40,7 +40,7 @@ bisect_right(PyObject *self, PyObject *args, PyObject *kw) 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 @@ insort_right(PyObject *self, PyObject *args, PyObject *kw) 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 @@ bisect_left(PyObject *self, PyObject *args, PyObject *kw) 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 @@ insort_left(PyObject *self, PyObject *args, PyObject *kw) 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 @@ init_bisect(void) m = Py_InitModule3("_bisect", bisect_methods, module_doc); } - diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c index f493ecb..59931c3 100644 --- a/Modules/_bsddb.c +++ b/Modules/_bsddb.c @@ -650,7 +650,7 @@ static PyObject* _DBCursor_get(DBCursorObject* self, int extra_flags, 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 @@ DB_associate(DBObject* self, PyObject* args, PyObject* kwargs) #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 @@ _DB_consume(DBObject* self, PyObject* args, PyObject* kwargs, int consume_flag) 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 @@ DB_cursor(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_delete(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_get(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_pget(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_get_size(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_get_both(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_key_range(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_open(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_put(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_remove(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_stat(DBObject* self, PyObject* args, PyObject* kwargs) #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 @@ DB_truncate(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_verify(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_set_encrypt(DBObject* self, PyObject* args, PyObject* kwargs) 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 @@ DBC_get(DBCursorObject* self, PyObject* args, PyObject *kwargs) 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 @@ DBC_pget(DBCursorObject* self, PyObject* args, PyObject *kwargs) 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 @@ DBC_put(DBCursorObject* self, PyObject* args, PyObject* kwargs) 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 @@ DBC_set(DBCursorObject* self, PyObject* args, PyObject *kwargs) 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 @@ DBC_set_range(DBCursorObject* self, PyObject* args, PyObject* kwargs) 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 @@ DBC_set_recno(DBCursorObject* self, PyObject* args, PyObject *kwargs) 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 @@ DBEnv_dbremove(DBEnvObject* self, PyObject* args, PyObject* kwargs) 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 @@ DBEnv_dbrename(DBEnvObject* self, PyObject* args, PyObject* kwargs) 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 @@ DBEnv_set_encrypt(DBEnvObject* self, PyObject* args, PyObject* kwargs) 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 @@ DBEnv_set_timeout(DBEnvObject* self, PyObject* args, PyObject* kwargs) 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 @@ DBEnv_txn_begin(DBEnvObject* self, PyObject* args, PyObject* kwargs) 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 @@ DB_construct(PyObject* self, PyObject* args, PyObject* kwargs) { 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)) diff --git a/Modules/_csv.c b/Modules/_csv.c index da5ae0d..51dc89d 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -291,7 +291,7 @@ Dialect_dealloc(DialectObj *self) self->ob_type->tp_free((PyObject *)self); } -static char *dialect_kws[] = { +static const char *dialect_kws[] = { "dialect", "delimiter", "doublequote", diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index acff973..2d7f6e0 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -1886,10 +1886,10 @@ PyCurses_setupterm(PyObject* self, PyObject *args, PyObject* keywds) 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; } diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index bfa180c..c0df605 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -230,7 +230,7 @@ EVP_repr(PyObject *self) 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 @@ The MD5 and SHA1 algorithms are always supported.\n"); 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; diff --git a/Modules/_sre.c b/Modules/_sre.c index f97cb62..1f0a8bc 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2007,7 +2007,7 @@ pattern_match(PatternObject* self, PyObject* args, PyObject* kw) 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 @@ pattern_search(PatternObject* self, PyObject* args, PyObject* kw) 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 @@ pattern_findall(PatternObject* self, PyObject* args, PyObject* kw) 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 @@ pattern_split(PatternObject* self, PyObject* args, PyObject* kw) 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 @@ pattern_sub(PatternObject* self, PyObject* args, PyObject* kw) 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 @@ pattern_subn(PatternObject* self, PyObject* args, PyObject* kw) 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 @@ match_groups(MatchObject* self, PyObject* args, PyObject* kw) 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 @@ match_groupdict(MatchObject* self, PyObject* args, PyObject* kw) 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; diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 632f3d6..dd1620a 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -2393,7 +2393,7 @@ Tktt_Repr(PyObject *self) } 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 @@ Tkapp_Dealloc(PyObject *self) } static PyObject * -Tkapp_GetAttr(PyObject *self, char *name) +Tkapp_GetAttr(PyObject *self, const char *name) { return Py_FindMethod(Tkapp_methods, self, name); } diff --git a/Modules/binascii.c b/Modules/binascii.c index bfb393f..eab90b3 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -1032,7 +1032,7 @@ binascii_a2b_qp(PyObject *self, PyObject *args, PyObject *kwargs) 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 @@ binascii_b2a_qp (PyObject *self, PyObject *args, PyObject *kwargs) 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; diff --git a/Modules/bz2module.c b/Modules/bz2module.c index af67ff1..db93675 100644 --- a/Modules/bz2module.c +++ b/Modules/bz2module.c @@ -1285,8 +1285,8 @@ static PyMemberDef BZ2File_members[] = { 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 @@ BZ2Comp_init(BZ2CompObject *self, PyObject *args, PyObject *kwargs) { 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 @@ bz2_compress(PyObject *self, PyObject *args, PyObject *kwargs) 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, diff --git a/Modules/cPickle.c b/Modules/cPickle.c index 6af99ba..865541f 100644 --- a/Modules/cPickle.c +++ b/Modules/cPickle.c @@ -339,7 +339,7 @@ typedef struct Picklerobject { 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 @@ cPickle_ErrFormat(PyObject *ErrType, char *stringformat, char *format, ...) } 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 @@ write_file(Picklerobject *self, char *s, int n) } 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 @@ write_cStringIO(Picklerobject *self, char *s, int n) } 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 @@ readline_other(Unpicklerobject *self, char **s) * 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 @@ save_none(Picklerobject *self, PyObject *args) 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 @@ newPicklerobject(PyObject *file, int proto) 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 @@ Unpickler_setattr(Unpicklerobject *self, char *name, PyObject *value) 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 @@ cpm_dump(PyObject *self, PyObject *args, PyObject *kwds) 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; diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c index 9ed77d8..0d50459 100644 --- a/Modules/cStringIO.c +++ b/Modules/cStringIO.c @@ -362,7 +362,7 @@ PyDoc_STRVAR(O_write__doc__, static int -O_cwrite(PyObject *self, char *c, int l) { +O_cwrite(PyObject *self, const char *c, int l) { int newl; Oobject *oself; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 7d2d15e..b0dae0c 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -45,8 +45,8 @@ PyDoc_STRVAR(MultibyteCodec_StreamReader__doc__, 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, diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c index 6b44fe5..8a6fae2 100644 --- a/Modules/datetimemodule.c +++ b/Modules/datetimemodule.c @@ -1073,10 +1073,10 @@ append_keyword_tzinfo(PyObject *repr, PyObject *tzinfo) 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 @@ delta_new(PyTypeObject *type, PyObject *args, PyObject *kw) 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 @@ static PyGetSetDef date_getset[] = { /* 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 @@ static PyObject * 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 @@ date_strftime(PyDateTime_Date *self, PyObject *args, PyObject *kw) 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 @@ static PyGetSetDef time_getset[] = { * 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 @@ static PyObject * 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 @@ time_strftime(PyDateTime_Time *self, PyObject *args, PyObject *kw) 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 @@ static PyGetSetDef datetime_getset[] = { * Constructors. */ -static char *datetime_kws[] = { +static const char *datetime_kws[] = { "year", "month", "day", "hour", "minute", "second", "microsecond", "tzinfo", NULL }; @@ -3729,7 +3729,7 @@ datetime_now(PyObject *cls, PyObject *args, PyObject *kw) { 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 @@ datetime_fromtimestamp(PyObject *cls, PyObject *args, PyObject *kw) 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, ×tamp, &tzinfo)) @@ -3843,7 +3843,7 @@ datetime_strptime(PyObject *cls, PyObject *args) 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 @@ static PyObject * 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 @@ static PyObject * 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 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) 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)) diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 5ec5b8d..c675bf4 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -26,7 +26,7 @@ static PyObject *_grouper_create(groupbyobject *, PyObject *); 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; diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 51487a7..7796ced 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -864,12 +864,13 @@ new_mmap_object(PyObject *self, PyObject *args, PyObject *kwdict) 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 @@ new_mmap_object(PyObject *self, PyObject *args, PyObject *kwdict) 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, diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 12226a4..e788fc9 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -158,7 +158,7 @@ typedef struct { 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 @@ parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw) 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 @@ parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw) 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 @@ parser_compilest(PyST_Object *self, PyObject *args, PyObject *kw) char* str = ""; 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 @@ parser_isexpr(PyST_Object *self, PyObject *args, PyObject *kw) 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 @@ parser_issuite(PyST_Object *self, PyObject *args, PyObject *kw) 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 @@ parser_methods[] = { 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 @@ parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type) 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 @@ parser_tuple2st(PyST_Object *self, PyObject *args, PyObject *kw) PyObject *tuple; node *tree; - static char *keywords[] = {"sequence", NULL}; + static const char *keywords[] = {"sequence", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kw, "O:sequence2st", keywords, &tuple)) diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index c853160..d1def24 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1724,8 +1724,8 @@ pyexpat_ParserCreate(PyObject *notused, PyObject *args, PyObject *kw) 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)) diff --git a/Modules/sha256module.c b/Modules/sha256module.c index 8da36b7..b40bb70 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -624,7 +624,7 @@ PyDoc_STRVAR(SHA256_new__doc__, 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 @@ PyDoc_STRVAR(SHA224_new__doc__, 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; diff --git a/Modules/sha512module.c b/Modules/sha512module.c index d229625..57e9bc9 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -690,7 +690,7 @@ PyDoc_STRVAR(SHA512_new__doc__, 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 @@ PyDoc_STRVAR(SHA384_new__doc__, 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; diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index e3573e3..3391405 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2489,7 +2489,7 @@ sock_initobj(PyObject *self, PyObject *args, PyObject *kwds) 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, diff --git a/Objects/boolobject.c b/Objects/boolobject.c index f2429fe..677a98b 100644 --- a/Objects/boolobject.c +++ b/Objects/boolobject.c @@ -50,7 +50,7 @@ PyObject *PyBool_FromLong(long ok) 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; diff --git a/Objects/classobject.c b/Objects/classobject.c index ddec3e4..c8057e2 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -159,7 +159,7 @@ static PyObject * 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)) diff --git a/Objects/complexobject.c b/Objects/complexobject.c index 138ba80..08c8c89 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -829,7 +829,7 @@ complex_new(PyTypeObject *type, PyObject *args, PyObject *kwds) 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; diff --git a/Objects/descrobject.c b/Objects/descrobject.c index df7435a..f763832 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -579,7 +579,7 @@ PyTypeObject PyWrapperDescr_Type = { }; 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 @@ static int 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", diff --git a/Objects/enumobject.c b/Objects/enumobject.c index f74acdc..a9d4a5e 100644 --- a/Objects/enumobject.c +++ b/Objects/enumobject.c @@ -16,7 +16,7 @@ enum_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { 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)) diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 7e40547..259a423 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -1884,7 +1884,7 @@ file_init(PyObject *self, PyObject *args, PyObject *kwds) { 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 @@ file_init(PyObject *self, PyObject *args, PyObject *kwds) 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, diff --git a/Objects/floatobject.c b/Objects/floatobject.c index b3f861f..198beb1 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -941,7 +941,7 @@ static PyObject * 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 */ diff --git a/Objects/funcobject.c b/Objects/funcobject.c index 85cef6f..d0e3a25 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -364,7 +364,7 @@ func_new(PyTypeObject* type, PyObject* args, PyObject* kw) 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", diff --git a/Objects/intobject.c b/Objects/intobject.c index 0ead74b..5a0b259 100644 --- a/Objects/intobject.c +++ b/Objects/intobject.c @@ -879,7 +879,7 @@ int_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { 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 */ diff --git a/Objects/listobject.c b/Objects/listobject.c index 1a96361..04671f4 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -1983,7 +1983,7 @@ listsort(PyListObject *self, PyObject *args, PyObject *kwds) 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 @@ static int 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; diff --git a/Objects/longobject.c b/Objects/longobject.c index ff5ba6f..6f98d44 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -1,4 +1,5 @@ + /* Long (arbitrary precision) integer object implementation */ /* XXX The functional organization of this file is terrible */ @@ -2922,7 +2923,7 @@ long_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { 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 */ diff --git a/Objects/methodobject.c b/Objects/methodobject.c index 5818616..3a205f5 100644 --- a/Objects/methodobject.c +++ b/Objects/methodobject.c @@ -132,7 +132,7 @@ meth_dealloc(PyCFunctionObject *m) 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 @@ listmethodchain(PyMethodChain *chain) /* 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 @@ Py_FindMethodInChain(PyMethodChain *chain, PyObject *self, char *name) /* 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; diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index cc75e45..76a4ab3 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -15,7 +15,7 @@ static PyMemberDef module_members[] = { }; PyObject * -PyModule_New(char *name) +PyModule_New(const char *name) { PyModuleObject *m; PyObject *nameobj; @@ -149,10 +149,10 @@ _PyModule_Clear(PyObject *m) 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) { diff --git a/Objects/object.c b/Objects/object.c index 1895697..6d6d078 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -663,7 +663,7 @@ static int 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_Hash(PyObject *v) } PyObject * -PyObject_GetAttrString(PyObject *v, char *name) +PyObject_GetAttrString(PyObject *v, const char *name) { PyObject *w, *res; @@ -1033,7 +1033,7 @@ PyObject_GetAttrString(PyObject *v, char *name) } 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 @@ PyObject_HasAttrString(PyObject *v, char *name) } 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 @@ merge_class_dict(PyObject* dict, PyObject* aclass) */ 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; diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 037fa6a..7c3ab09 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -3325,7 +3325,7 @@ static PyObject * 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); diff --git a/Objects/structseq.c b/Objects/structseq.c index 603477f..ac3cf03 100644 --- a/Objects/structseq.c +++ b/Objects/structseq.c @@ -97,7 +97,7 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds) 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)) diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 76e5de3..3fd311a 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -528,7 +528,7 @@ static PyObject * 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); diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 591c62b..7c36ba4 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -21,7 +21,7 @@ static PyMemberDef type_members[] = { 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 @@ static PyObject * 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 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) 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 @@ type_dealloc(PyTypeObject *type) 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); diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 013fe4a..9e5e3b4 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -7238,7 +7238,7 @@ static PyObject * 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; diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c index 5412dd3..1de9434 100644 --- a/Objects/weakrefobject.c +++ b/Objects/weakrefobject.c @@ -126,7 +126,7 @@ gc_clear(PyWeakReference *self) 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); diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index be46c8d..50c7863 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1907,7 +1907,7 @@ builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) { 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", diff --git a/Python/ceval.c b/Python/ceval.c index 9e16c6e..777e981 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3434,7 +3434,7 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw) return result; } -char * +const char * PyEval_GetFuncName(PyObject *func) { if (PyMethod_Check(func)) @@ -3453,7 +3453,7 @@ PyEval_GetFuncName(PyObject *func) } } -char * +const char * PyEval_GetFuncDesc(PyObject *func) { if (PyMethod_Check(func)) diff --git a/Python/getargs.c b/Python/getargs.c index df60a86..16f156f 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -6,33 +6,33 @@ #include -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 @@ PyArg_Parse(PyObject *args, char *format, ...) int -PyArg_ParseTuple(PyObject *args, char *format, ...) +PyArg_ParseTuple(PyObject *args, const char *format, ...) { int retval; va_list va; @@ -58,7 +58,7 @@ PyArg_ParseTuple(PyObject *args, char *format, ...) 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 @@ cleanreturn(int retval, PyObject *freelist) 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 @@ vgetargs1(PyObject *args, char *format, va_list *p_va, int compat) 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 @@ seterror(int iarg, char *msg, int *levels, char *fname, char *message) */ 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 @@ converttuple(PyObject *arg, char **p_format, va_list *p_va, int *levels, /* 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 @@ convertitem(PyObject *arg, char **p_format, va_list *p_va, int *levels, /* 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 @@ float_argument_error(PyObject *arg) */ 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 @@ convertbuffer(PyObject *arg, void **p, char **errmsg) 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 @@ PyArg_ParseTupleAndKeywords(PyObject *args, 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 @@ PyArg_VaParseTupleAndKeywords(PyObject *args, 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 @@ vgetargskeywords(PyObject *args, PyObject *keywords, char *format, 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 @@ vgetargskeywords(PyObject *args, PyObject *keywords, char *format, 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 @@ err: 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 @@ PyArg_UnpackTuple(PyObject *args, char *name, int min, int max, ...) * 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 @@ _PyArg_NoKeywords(char *funcname, PyObject *kw) funcname); return 0; } - - - diff --git a/Python/import.c b/Python/import.c index fcdc46b..daa8f8d 100644 --- a/Python/import.c +++ b/Python/import.c @@ -555,7 +555,7 @@ _PyImport_FindExtension(char *name, char *filename) 'NEW' REFERENCE! */ PyObject * -PyImport_AddModule(char *name) +PyImport_AddModule(const char *name) { PyObject *modules = PyImport_GetModuleDict(); PyObject *m; @@ -1875,7 +1875,7 @@ PyImport_ImportFrozenModule(char *name) its module object WITH INCREMENTED REFERENCE COUNT */ PyObject * -PyImport_ImportModule(char *name) +PyImport_ImportModule(const char *name) { PyObject *pname; PyObject *result; diff --git a/Python/modsupport.c b/Python/modsupport.c index 3b4c517..e77cb36 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -26,7 +26,7 @@ static char api_version_warning[] = 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 @@ Py_InitModule4(char *name, PyMethodDef *methods, char *doc, /* 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 @@ countformat(char *format, int endchar) /* 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 @@ do_mkdict(char **p_format, va_list *p_va, int endchar, int n) } 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 @@ _ustrlen(Py_UNICODE *u) #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 @@ do_mktuple(char **p_format, va_list *p_va, int endchar, int n) } 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 @@ do_mkvalue(char **p_format, va_list *p_va) PyObject * -Py_BuildValue(char *format, ...) +Py_BuildValue(const char *format, ...) { va_list va; PyObject* retval; @@ -465,9 +465,9 @@ Py_BuildValue(char *format, ...) } 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 @@ Py_VaBuildValue(char *format, va_list va) PyObject * -PyEval_CallFunction(PyObject *obj, char *format, ...) +PyEval_CallFunction(PyObject *obj, const char *format, ...) { va_list vargs; PyObject *args; @@ -516,7 +516,7 @@ PyEval_CallFunction(PyObject *obj, char *format, ...) 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 @@ PyEval_CallMethod(PyObject *obj, char *methodname, char *format, ...) } 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 @@ PyModule_AddObject(PyObject *m, char *name, PyObject *o) } 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)); } -- cgit v0.12