summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrançois Andriot <[email protected]>2024-09-25 20:51:56 +0200
committerFrançois Andriot <[email protected]>2024-09-26 09:22:45 +0200
commit4ab9fdc0fc73f41d54bab0c9030d9645ac0bf18e (patch)
tree4993e0347fa812686f7fcc2d4a559f4581407e3d
parentdc7ba7a6d7019e4cd4fc2f33fbee4ec53ff8420a (diff)
downloadsip4-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.c50
-rw-r--r--siplib/tqtlib.c2
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);