From ccfe12e4f33ba29bd000f90799b359900604ae96 Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Wed, 13 Mar 2019 00:36:42 -0400 Subject: [PATCH] Port winutil plugin to build on python2/python3 --- src/calibre/utils/windows/winutil.c | 38 +++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/calibre/utils/windows/winutil.c b/src/calibre/utils/windows/winutil.c index a68cf22307..ffb511fcb4 100644 --- a/src/calibre/utils/windows/winutil.c +++ b/src/calibre/utils/windows/winutil.c @@ -387,8 +387,9 @@ winutil_strftime(PyObject *self, PyObject *args) return NULL; } +static char winutil_doc[] = "Defines utility methods to interface with windows."; -static PyMethodDef WinutilMethods[] = { +static PyMethodDef winutil_methods[] = { {"special_folder_path", winutil_folder_path, METH_VARARGS, "special_folder_path(csidl_id) -> path\n\n" "Get paths to common system folders. " @@ -461,13 +462,33 @@ be a unicode string. Returns unicode strings." {NULL, NULL, 0, NULL} }; -CALIBRE_MODINIT_FUNC -initwinutil(void) { +#if PY_MAJOR_VERSION >= 3 +#define INITERROR return NULL +#define INITMODULE PyModule_Create(&winutil_module) +static struct PyModuleDef winutil_module = { + /* m_base */ PyModuleDef_HEAD_INIT, + /* m_name */ "winutil", + /* m_doc */ winutil_doc, + /* m_size */ -1, + /* m_methods */ winutil_methods, + /* m_slots */ 0, + /* m_traverse */ 0, + /* m_clear */ 0, + /* m_free */ 0, +}; +CALIBRE_MODINIT_FUNC PyInit_winutil(void) { +#else +#define INITERROR return +#define INITMODULE Py_InitModule3("winutil", winutil_methods, winutil_doc) +CALIBRE_MODINIT_FUNC initwinutil(void) { +#endif + PyObject *m; - m = Py_InitModule3("winutil", WinutilMethods, - "Defines utility methods to interface with windows." - ); - if (m == NULL) return; + m = INITMODULE; + + if (m == NULL) { + INITERROR; + } PyModule_AddIntConstant(m, "CSIDL_ADMINTOOLS", CSIDL_ADMINTOOLS); PyModule_AddIntConstant(m, "CSIDL_APPDATA", CSIDL_APPDATA); @@ -491,4 +512,7 @@ initwinutil(void) { PyModule_AddIntConstant(m, "CSIDL_STARTUP", CSIDL_STARTUP); PyModule_AddIntConstant(m, "CSIDL_COMMON_STARTUP", CSIDL_COMMON_STARTUP); +#if PY_MAJOR_VERSION >= 3 + return m; +#endif }