diff options
author | François Andriot <[email protected]> | 2024-09-25 20:51:56 +0200 |
---|---|---|
committer | François Andriot <[email protected]> | 2024-09-26 09:22:45 +0200 |
commit | 4ab9fdc0fc73f41d54bab0c9030d9645ac0bf18e (patch) | |
tree | 4993e0347fa812686f7fcc2d4a559f4581407e3d | |
parent | dc7ba7a6d7019e4cd4fc2f33fbee4ec53ff8420a (diff) | |
download | sip4-tqt-4ab9fdc0fc73f41d54bab0c9030d9645ac0bf18e.tar.gz sip4-tqt-4ab9fdc0fc73f41d54bab0c9030d9645ac0bf18e.zip |
Fix FTBFS with Python 3.13.
This solves issue #26.
Signed-off-by: François Andriot <[email protected]>
-rw-r--r-- | siplib/siplib.c | 50 | ||||
-rw-r--r-- | 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); |