diff --git a/src/calibre/devices/libusb/libusb.c b/src/calibre/devices/libusb/libusb.c index 219034cc17..bd159ec73d 100644 --- a/src/calibre/devices/libusb/libusb.c +++ b/src/calibre/devices/libusb/libusb.c @@ -125,44 +125,31 @@ static PyMethodDef libusb_methods[] = { {NULL, NULL, 0, NULL} }; -static struct PyModuleDef libusb_module = { - /* m_base */ PyModuleDef_HEAD_INIT, - /* m_name */ "libusb", - /* m_doc */ libusb_doc, - /* m_size */ -1, - /* m_methods */ libusb_methods, - /* m_slots */ 0, - /* m_traverse */ 0, - /* m_clear */ 0, - /* m_free */ 0, -}; -CALIBRE_MODINIT_FUNC PyInit_libusb(void) { - PyObject *m; - +static int +exec_module(PyObject *m) { // We deliberately use the default context. This is the context used by // libmtp and we want to ensure that the busnum/devnum numbers are the same // here and for libmtp. - if(libusb_init(NULL) != 0) { - return NULL; - } + if(libusb_init(NULL) != 0) return -1; Error = PyErr_NewException("libusb.Error", NULL, NULL); - if (Error == NULL) { - return NULL; - } - + if (Error == NULL) return -1; cache = PyDict_New(); - if (cache == NULL) { - return NULL; - } - - m = PyModule_Create(&libusb_module); - if (m == NULL) { - return NULL; - } + if (cache == NULL) return -1; PyModule_AddObject(m, "Error", Error); PyModule_AddObject(m, "cache", cache); - - return m; + return 0; } + +static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} }; + +static struct PyModuleDef module_def = { + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "libusb", + .m_doc = libusb_doc, + .m_methods = libusb_methods, + .m_slots = slots, +}; + +CALIBRE_MODINIT_FUNC PyInit_libusb(void) { return PyModuleDef_Init(&module_def); } diff --git a/src/calibre/devices/mtp/unix/libmtp.c b/src/calibre/devices/mtp/unix/libmtp.c index 16bebea987..df653c67bd 100644 --- a/src/calibre/devices/mtp/unix/libmtp.c +++ b/src/calibre/devices/mtp/unix/libmtp.c @@ -711,34 +711,13 @@ static PyMethodDef libmtp_methods[] = { {NULL, NULL, 0, NULL} }; - - -static struct PyModuleDef libmtp_module = { - /* m_base */ PyModuleDef_HEAD_INIT, - /* m_name */ "libmtp", - /* m_doc */ libmtp_doc, - /* m_size */ -1, - /* m_methods */ libmtp_methods, - /* m_slots */ 0, - /* m_traverse */ 0, - /* m_clear */ 0, - /* m_free */ 0, -}; -CALIBRE_MODINIT_FUNC PyInit_libmtp(void) { +static int +exec_module(PyObject *m) { DeviceType.tp_new = PyType_GenericNew; - if (PyType_Ready(&DeviceType) < 0) { - return NULL; - } - - PyObject *m = PyModule_Create(&libmtp_module); - if (m == NULL) { - return NULL; - } + if (PyType_Ready(&DeviceType) < 0) return -1; MTPError = PyErr_NewException("libmtp.MTPError", NULL, NULL); - if (MTPError == NULL) { - return NULL; - } + if (MTPError == NULL) return -1; PyModule_AddObject(m, "MTPError", MTPError); // Redirect stdout to get rid of the annoying message about mtpz. Really, @@ -769,5 +748,17 @@ CALIBRE_MODINIT_FUNC PyInit_libmtp(void) { PyModule_AddIntMacro(m, LIBMTP_DEBUG_DATA); PyModule_AddIntMacro(m, LIBMTP_DEBUG_ALL); - return m; + return 0; } + +static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} }; + +static struct PyModuleDef module_def = { + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "libmtp", + .m_doc = libmtp_doc, + .m_methods = libmtp_methods, + .m_slots = slots, +}; + +CALIBRE_MODINIT_FUNC PyInit_libmtp(void) { return PyModuleDef_Init(&module_def); } diff --git a/src/calibre/devices/mtp/windows/wpd.cpp b/src/calibre/devices/mtp/windows/wpd.cpp index 77297c1c8f..44d4cd3931 100644 --- a/src/calibre/devices/mtp/windows/wpd.cpp +++ b/src/calibre/devices/mtp/windows/wpd.cpp @@ -183,50 +183,36 @@ static PyMethodDef wpd_methods[] = { {NULL, NULL, 0, NULL} }; -static struct PyModuleDef wpd_module = { - /* m_base */ PyModuleDef_HEAD_INIT, - /* m_name */ "wpd", - /* m_doc */ wpd_doc, - /* m_size */ -1, - /* m_methods */ wpd_methods, - /* m_slots */ 0, - /* m_traverse */ 0, - /* m_clear */ 0, - /* m_free */ 0, -}; - -CALIBRE_MODINIT_FUNC PyInit_wpd(void) { - PyObject *m; - +static int +exec_module(PyObject *m) { wpd::DeviceType.tp_new = PyType_GenericNew; - if (PyType_Ready(&wpd::DeviceType) < 0) - return NULL; - - m = PyModule_Create(&wpd_module); - if (m == NULL) { - return NULL; - } + if (PyType_Ready(&wpd::DeviceType) < 0) return -1; WPDError = PyErr_NewException("wpd.WPDError", NULL, NULL); - if (WPDError == NULL) { - return NULL; - } + if (WPDError == NULL) return -1; PyModule_AddObject(m, "WPDError", WPDError); NoWPD = PyErr_NewException("wpd.NoWPD", NULL, NULL); - if (NoWPD == NULL) { - return NULL; - } + if (NoWPD == NULL) return -1; PyModule_AddObject(m, "NoWPD", NoWPD); WPDFileBusy = PyErr_NewException("wpd.WPDFileBusy", NULL, NULL); - if (WPDFileBusy == NULL) { - return NULL; - } + if (WPDFileBusy == NULL) return -1; PyModule_AddObject(m, "WPDFileBusy", WPDFileBusy); Py_INCREF(&DeviceType); PyModule_AddObject(m, "Device", (PyObject *)&DeviceType); - - return m; + return 0; +} + +static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} }; + +static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT}; + +CALIBRE_MODINIT_FUNC PyInit_wpd(void) { + module_def.m_name = "wpd"; + module_def.m_slots = slots; + module_def.m_doc = wpd_doc; + module_def.m_methods = wpd_methods; + return PyModuleDef_Init(&module_def); } diff --git a/src/calibre/devices/usbobserver/usbobserver.c b/src/calibre/devices/usbobserver/usbobserver.c index 39c4d18a82..89f23c4a59 100644 --- a/src/calibre/devices/usbobserver/usbobserver.c +++ b/src/calibre/devices/usbobserver/usbobserver.c @@ -460,21 +460,17 @@ static PyMethodDef usbobserver_methods[] = { {NULL, NULL, 0, NULL} }; +static int +exec_module(PyObject *module) { return 0; } -static struct PyModuleDef usbobserver_module = { - /* m_base */ PyModuleDef_HEAD_INIT, - /* m_name */ "usbobserver", - /* m_doc */ usbobserver_doc, - /* m_size */ -1, - /* m_methods */ usbobserver_methods, - /* m_slots */ 0, - /* m_traverse */ 0, - /* m_clear */ 0, - /* m_free */ 0, +static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} }; + +static struct PyModuleDef module_def = { + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "usbobserver", + .m_doc = usbobserver_doc, + .m_methods = usbobserver_methods, + .m_slots = slots, }; -CALIBRE_MODINIT_FUNC PyInit_usbobserver(void) { - PyObject *m = NULL; - m = PyModule_Create(&usbobserver_module); - return m; -} +CALIBRE_MODINIT_FUNC PyInit_usbobserver(void) { return PyModuleDef_Init(&module_def); } diff --git a/src/calibre/utils/cocoa_wrapper.c b/src/calibre/utils/cocoa_wrapper.c index 612911f06c..ee95403959 100644 --- a/src/calibre/utils/cocoa_wrapper.c +++ b/src/calibre/utils/cocoa_wrapper.c @@ -101,22 +101,16 @@ static PyMethodDef module_methods[] = { {NULL, NULL, 0, NULL} /* Sentinel */ }; +static int +exec_module(PyObject *module) { return 0; } -static struct PyModuleDef cocoa_module = { - /* m_base */ PyModuleDef_HEAD_INIT, - /* m_name */ "cocoa", - /* m_doc */ "", - /* m_size */ -1, - /* m_methods */ module_methods, - /* m_slots */ 0, - /* m_traverse */ 0, - /* m_clear */ 0, - /* m_free */ 0, +static PyModuleDef_Slot slots[] = { {Py_mod_exec, exec_module}, {0, NULL} }; + +static struct PyModuleDef module_def = { + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "cocoa", + .m_methods = module_methods, + .m_slots = slots, }; -CALIBRE_MODINIT_FUNC PyInit_cocoa(void) { - PyObject *m = PyModule_Create(&cocoa_module); - if (m == NULL) { - return NULL; - } - return m; -} + +CALIBRE_MODINIT_FUNC PyInit_cocoa(void) { return PyModuleDef_Init(&module_def); } diff --git a/src/calibre/utils/fonts/winfonts.cpp b/src/calibre/utils/fonts/winfonts.cpp index 3f2103b8c1..3eb0d122a8 100644 --- a/src/calibre/utils/fonts/winfonts.cpp +++ b/src/calibre/utils/fonts/winfonts.cpp @@ -234,27 +234,8 @@ static PyMethodDef winfonts_methods[] = { {NULL, NULL, 0, NULL} }; - - -static struct PyModuleDef winfonts_module = { - /* m_base */ PyModuleDef_HEAD_INIT, - /* m_name */ "winfonts", - /* m_doc */ winfonts_doc, - /* m_size */ -1, - /* m_methods */ winfonts_methods, - /* m_slots */ 0, - /* m_traverse */ 0, - /* m_clear */ 0, - /* m_free */ 0, -}; - -CALIBRE_MODINIT_FUNC PyInit_winfonts(void) { - PyObject *m; - m = PyModule_Create(&winfonts_module); - if (m == NULL) { - return NULL; - } - +static int +exec_module(PyObject *m) { PyModule_AddIntMacro(m, FW_DONTCARE); PyModule_AddIntMacro(m, FW_THIN); PyModule_AddIntMacro(m, FW_EXTRALIGHT); @@ -271,5 +252,17 @@ CALIBRE_MODINIT_FUNC PyInit_winfonts(void) { PyModule_AddIntMacro(m, FW_HEAVY); PyModule_AddIntMacro(m, FW_BLACK); - return m; + return 0; +} + +static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} }; + +static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT}; + +CALIBRE_MODINIT_FUNC PyInit_winfonts(void) { + module_def.m_name = "winfonts"; + module_def.m_slots = slots; + module_def.m_doc = winfonts_doc; + module_def.m_methods = winfonts_methods; + return PyModuleDef_Init(&module_def); } diff --git a/src/calibre/utils/windows/winsapi.cpp b/src/calibre/utils/windows/winsapi.cpp index 7c6d5d7c05..d67c974fcf 100644 --- a/src/calibre/utils/windows/winsapi.cpp +++ b/src/calibre/utils/windows/winsapi.cpp @@ -506,10 +506,9 @@ exec_module(PyObject *m) { static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} }; -static struct PyModuleDef module_def = {0}; +static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT}; CALIBRE_MODINIT_FUNC PyInit_winsapi(void) { - module_def.m_base = PyModuleDef_HEAD_INIT; module_def.m_name = "winsapi"; module_def.m_doc = "SAPI wrapper"; module_def.m_methods = winsapi_methods; diff --git a/src/calibre/utils/windows/winutil.cpp b/src/calibre/utils/windows/winutil.cpp index c2f9a5db0b..ff81b18232 100644 --- a/src/calibre/utils/windows/winutil.cpp +++ b/src/calibre/utils/windows/winutil.cpp @@ -1395,10 +1395,9 @@ exec_module(PyObject *m) { static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} }; -static struct PyModuleDef module_def = {0}; +static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT}; CALIBRE_MODINIT_FUNC PyInit_winutil(void) { - module_def.m_base = PyModuleDef_HEAD_INIT; module_def.m_name = "winutil"; module_def.m_doc = winutil_doc; module_def.m_methods = winutil_methods;