summaryrefslogtreecommitdiff
path: root/Python/modsupport.c
diff options
context:
space:
mode:
authorMarc-André Lemburg <mal@egenix.com>2001-07-31 13:24:44 +0000
committerMarc-André Lemburg <mal@egenix.com>2001-07-31 13:24:44 +0000
commit852c43564d0206f88a50cb8c08cb2e89dcb7526b (patch)
treead24204d1b11d9ad650159627356f14d40e98a40 /Python/modsupport.c
parentc2f3ab30bfd5a82da0b3a5b61c4e0ba6b9d62d96 (diff)
downloadcpython-852c43564d0206f88a50cb8c08cb2e89dcb7526b.tar.gz
This patch turns the Python API mismatch notice into a standard
Python warning which can be catched by means of the Python warning framework. It also adds two new APIs which hopefully make it easier for Python to switch to buffer overflow safe [v]snprintf() APIs for error reporting et al. The two new APIs are PyOS_snprintf() and PyOS_vsnprintf() and work just like the standard ones in many C libs. On platforms which have snprintf(), the native APIs are used, on all other an emulation with snprintf() tries to do its best.
Diffstat (limited to 'Python/modsupport.c')
-rw-r--r--Python/modsupport.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 08685898da..eb0818cc95 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -26,8 +26,8 @@ char *_Py_PackageContext = NULL;
*/
static char api_version_warning[] =
-"WARNING: Python C API version mismatch for module %s:\n\
- This Python has API version %d, module %s has version %d.\n";
+"Python C API version mismatch for module %.100s:\
+ This Python has API version %d, module %.100s has version %d.";
PyObject *
Py_InitModule4(char *name, PyMethodDef *methods, char *doc,
@@ -37,9 +37,15 @@ Py_InitModule4(char *name, PyMethodDef *methods, char *doc,
PyMethodDef *ml;
if (!Py_IsInitialized())
Py_FatalError("Interpreter not initialized (version mismatch?)");
- if (module_api_version != PYTHON_API_VERSION)
- fprintf(stderr, api_version_warning,
- name, PYTHON_API_VERSION, name, module_api_version);
+ if (module_api_version != PYTHON_API_VERSION) {
+ char message[512];
+ PyOS_snprintf(message, sizeof(message),
+ api_version_warning, name,
+ PYTHON_API_VERSION, name,
+ module_api_version);
+ if (PyErr_Warn(PyExc_RuntimeWarning, message))
+ return NULL;
+ }
if (_Py_PackageContext != NULL) {
char *p = strrchr(_Py_PackageContext, '.');
if (p != NULL && strcmp(name, p+1) == 0) {