From 4ab9fdc0fc73f41d54bab0c9030d9645ac0bf18e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Andriot?= Date: Wed, 25 Sep 2024 20:51:56 +0200 Subject: [PATCH] Fix FTBFS with Python 3.13. This solves issue #26. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: François Andriot --- siplib/siplib.c | 50 +++++++++++++++++++++++++++++++++++++++---------- siplib/tqtlib.c | 2 +- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/siplib/siplib.c b/siplib/siplib.c index f2ac7be..27b9e35 100644 --- a/siplib/siplib.c +++ b/siplib/siplib.c @@ -1691,7 +1691,7 @@ static PyObject *sip_api_call_method(int *isErr, PyObject *method, va_start(va,fmt); if ((args = PyTuple_New(strlen(fmt))) != NULL && buildObject(args,fmt,va) != NULL) - res = PyEval_CallObject(method,args); + res = PyObject_CallObject(method,args); else { res = NULL; @@ -9635,18 +9635,37 @@ static PyObject *parseString_AsEncodedString(PyObject *bytes, PyObject *obj, static int parseBytes_AsCharArray(PyObject *obj, const char **ap, SIP_SSIZE_T *aszp) { + const char *a; + SIP_SSIZE_T asz; + if (obj == Py_None) { - *ap = NULL; - *aszp = 0; + a = NULL; + asz = 0; } else if (PyBytes_Check(obj)) { - *ap = PyBytes_AS_STRING(obj); - *aszp = PyBytes_GET_SIZE(obj); + a = PyBytes_AS_STRING(obj); + asz = PyBytes_GET_SIZE(obj); } - else if (PyObject_AsCharBuffer(obj, ap, aszp) < 0) - return -1; + else + { + Py_buffer view; + + if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) + return -1; + + a = view.buf; + asz = view.len; + + PyBuffer_Release(&view); + } + + if (ap) + *ap = a; + + if (aszp) + *aszp = asz; return 0; } @@ -9665,13 +9684,24 @@ static int parseBytes_AsChar(PyObject *obj, char *ap) chp = PyBytes_AS_STRING(obj); sz = PyBytes_GET_SIZE(obj); } - else if (PyObject_AsCharBuffer(obj, &chp, &sz) < 0) - return -1; + else + { + Py_buffer view; + + if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) + return -1; + + chp = view.buf; + sz = view.len; + + PyBuffer_Release(&view); + } if (sz != 1) return -1; - *ap = *chp; + if (ap) + *ap = *chp; return 0; } diff --git a/siplib/tqtlib.c b/siplib/tqtlib.c index d59c138..1fa8cfa 100644 --- a/siplib/tqtlib.c +++ b/siplib/tqtlib.c @@ -196,7 +196,7 @@ PyObject *sip_api_invoke_slot(const sipSlot *slot, PyObject *sigargs) { PyObject *nsa, *xtype, *xvalue, *xtb, *resobj; - if ((resobj = PyEval_CallObject(sfunc, sa)) != NULL) + if ((resobj = PyObject_CallObject(sfunc, sa)) != NULL) { Py_DECREF(sfunc); Py_XDECREF(sref);