From 5e5cc54b5a633d3c6c0469283b2f26dbdde7908f Mon Sep 17 00:00:00 2001 From: Frank Crawford Date: Sun, 2 Jan 2022 18:44:57 +1100 Subject: [PATCH] Added patch for Python3.11 as per bpo-39573. --- src/_librsyncmodule.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/_librsyncmodule.c b/src/_librsyncmodule.c index a46567fc4..158104d2e 100644 --- a/src/_librsyncmodule.c +++ b/src/_librsyncmodule.c @@ -25,6 +25,16 @@ #include #define RSM_JOB_BLOCKSIZE 65536 +/* ----------------------------------------------------------------------- * + * Update for Python 3.11 - Contributed by Victor Stinner in bpo-39573. + * Compatibility macro for older Python versions. + * ----------------------------------------------------------------------- */ +#if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_TYPE) +static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) +{ ob->ob_type = type; } +#define Py_SET_TYPE(ob, type) _Py_SET_TYPE((PyObject*)(ob), type) +#endif + static PyObject *librsyncError; /* Sets python error string from result */ @@ -540,8 +550,9 @@ PyMODINIT_FUNC PyInit__librsync(void) { PyObject *m, *d; - Py_TYPE(&_librsync_SigMakerType) = &PyType_Type; - Py_TYPE(&_librsync_DeltaMakerType) = &PyType_Type; + /* Update for Python 3.11 - bpo-39573. */ + Py_SET_TYPE(&_librsync_SigMakerType, &PyType_Type); + Py_SET_TYPE(&_librsync_DeltaMakerType, &PyType_Type); static struct PyModuleDef librsync_def = { PyModuleDef_HEAD_INIT, "_librsync", "RSync Lib", -1, _librsyncMethods, }; m = PyModule_Create(&librsync_def);