mirror of
https://gitlab.com/libvirt/libvirt-python.git
synced 2025-08-03 08:21:58 +03:00
override: Switch virStreamSend wrapper to use libvirt_charPtrSizeUnwrap
Instead of using a 'z#i' format string to receive byte array, use 'O' and then libvirt_charPtrSizeUnwrap. This lets us hide the Python 3 vs 2 differences in typewrappers.c Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
@ -6920,21 +6920,22 @@ libvirt_virStreamSend(PyObject *self ATTRIBUTE_UNUSED,
|
|||||||
{
|
{
|
||||||
PyObject *py_retval;
|
PyObject *py_retval;
|
||||||
PyObject *pyobj_stream;
|
PyObject *pyobj_stream;
|
||||||
|
PyObject *pyobj_data;
|
||||||
virStreamPtr stream;
|
virStreamPtr stream;
|
||||||
char *data;
|
char *data;
|
||||||
int datalen;
|
Py_ssize_t datalen;
|
||||||
int ret;
|
int ret;
|
||||||
int nbytes;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, (char *) "Oz#i:virStreamRecv",
|
if (!PyArg_ParseTuple(args, (char *) "OO:virStreamRecv",
|
||||||
&pyobj_stream, &data, &datalen, &nbytes)) {
|
&pyobj_stream, &pyobj_data)) {
|
||||||
DEBUG("%s failed to parse tuple\n", __FUNCTION__);
|
DEBUG("%s failed to parse tuple\n", __FUNCTION__);
|
||||||
return VIR_PY_INT_FAIL;
|
return VIR_PY_INT_FAIL;
|
||||||
}
|
}
|
||||||
stream = PyvirStream_Get(pyobj_stream);
|
stream = PyvirStream_Get(pyobj_stream);
|
||||||
|
libvirt_charPtrSizeUnwrap(pyobj_data, &data, &datalen);
|
||||||
|
|
||||||
LIBVIRT_BEGIN_ALLOW_THREADS;
|
LIBVIRT_BEGIN_ALLOW_THREADS;
|
||||||
ret = virStreamSend(stream, data, nbytes);
|
ret = virStreamSend(stream, data, datalen);
|
||||||
LIBVIRT_END_ALLOW_THREADS;
|
LIBVIRT_END_ALLOW_THREADS;
|
||||||
|
|
||||||
DEBUG("StreamSend ret=%d\n", ret);
|
DEBUG("StreamSend ret=%d\n", ret);
|
||||||
|
@ -383,6 +383,33 @@ libvirt_charPtrUnwrap(PyObject *obj, char **str)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int libvirt_charPtrSizeUnwrap(PyObject *obj, char **str, Py_ssize_t *size)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 4
|
||||||
|
int isize;
|
||||||
|
#endif
|
||||||
|
*str = NULL;
|
||||||
|
*size = 0;
|
||||||
|
if (!obj) {
|
||||||
|
PyErr_SetString(PyExc_TypeError, "unexpected type");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION > 2
|
||||||
|
ret = PyBytes_AsStringAndSize(obj, str, size);
|
||||||
|
#else
|
||||||
|
# if PY_MINOR_VERSION <= 4
|
||||||
|
ret = PyString_AsStringAndSize(obj, str, &isize);
|
||||||
|
*size = isize;
|
||||||
|
# else
|
||||||
|
ret = PyString_AsStringAndSize(obj, str, size);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
libvirt_virDomainPtrWrap(virDomainPtr node)
|
libvirt_virDomainPtrWrap(virDomainPtr node)
|
||||||
{
|
{
|
||||||
|
@ -175,6 +175,7 @@ int libvirt_ulonglongUnwrap(PyObject *obj, unsigned long long *val);
|
|||||||
int libvirt_doubleUnwrap(PyObject *obj, double *val);
|
int libvirt_doubleUnwrap(PyObject *obj, double *val);
|
||||||
int libvirt_boolUnwrap(PyObject *obj, bool *val);
|
int libvirt_boolUnwrap(PyObject *obj, bool *val);
|
||||||
int libvirt_charPtrUnwrap(PyObject *obj, char **str);
|
int libvirt_charPtrUnwrap(PyObject *obj, char **str);
|
||||||
|
int libvirt_charPtrSizeUnwrap(PyObject *obj, char **str, Py_ssize_t *size);
|
||||||
PyObject * libvirt_virConnectPtrWrap(virConnectPtr node);
|
PyObject * libvirt_virConnectPtrWrap(virConnectPtr node);
|
||||||
PyObject * libvirt_virDomainPtrWrap(virDomainPtr node);
|
PyObject * libvirt_virDomainPtrWrap(virDomainPtr node);
|
||||||
PyObject * libvirt_virNetworkPtrWrap(virNetworkPtr node);
|
PyObject * libvirt_virNetworkPtrWrap(virNetworkPtr node);
|
||||||
|
Reference in New Issue
Block a user