Do the absolute minimal amount of modifications to eradicate
Py_FatalError() from module initialization functions. The importing
mechanism already checks for PyErr_Occurred() after module importation
and it Does The Right Thing.
Unfortunately, the following either were not compiled or tested by the
regression suite, due to issues with my development platform:
almodule.c
cdmodule.c
mpzmodule.c
puremodule.c
timingmodule.c
diff --git a/Modules/errnomodule.c b/Modules/errnomodule.c
index 8607ea2..b47feb6 100644
--- a/Modules/errnomodule.c
+++ b/Modules/errnomodule.c
@@ -35,17 +35,14 @@
static void
_inscode(PyObject *d, PyObject *de, char *name, int code)
{
- PyObject *u;
- PyObject *v;
+ PyObject *u = PyString_FromString(name);
+ PyObject *v = PyInt_FromLong((long) code);
- u = PyString_FromString(name);
- v = PyInt_FromLong((long) code);
-
- if (!u || !v) {
- /* Don't bother reporting this error */
- PyErr_Clear();
- }
- else {
+ /* Don't bother checking for errors; they'll be caught at the end
+ * of the module initialization function by the caller of
+ * initerrno().
+ */
+ if (u && v) {
/* insert in modules dict */
PyDict_SetItem(d, u, v);
/* insert in errorcode dict */
@@ -76,8 +73,8 @@
m = Py_InitModule3("errno", errno_methods, errno__doc__);
d = PyModule_GetDict(m);
de = PyDict_New();
- if (de == NULL || PyDict_SetItemString(d, "errorcode", de))
- Py_FatalError("can't initialize errno module");
+ if (!d || !de || PyDict_SetItemString(d, "errorcode", de) < 0)
+ return;
/* Macro so I don't have to edit each and every line below... */
#define inscode(d, ds, de, name, code, comment) _inscode(d, de, name, code)