1
0
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:
Daniel P. Berrange
2013-12-09 14:53:34 +00:00
parent e6551e60ce
commit d40861012c
3 changed files with 34 additions and 5 deletions

View File

@ -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);

View File

@ -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)
{ {

View File

@ -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);