diff options
author | Daniel Veillard <veillard@redhat.com> | 2011-12-29 16:20:00 +0800 |
---|---|---|
committer | Daniel Veillard <veillard@redhat.com> | 2012-01-06 15:22:25 +0800 |
commit | e03611f8a3d5d2c29327ed000b7527ccfb9dcf50 (patch) | |
tree | 8b73d2556ae9aa60422149eb84d4df88f300194e /libvirt-override.c | |
parent | 6308c47b7b9d2be2c1d9fa3979d0f707ef25df0d (diff) | |
download | libvirt-python-v6-libvirt-0.9.4-23.el6_2.6.tar.gz libvirt-python-v6-libvirt-0.9.4-23.el6_2.6.tar.xz libvirt-python-v6-libvirt-0.9.4-23.el6_2.6.zip |
remove a static limit on max domains in python bindingslibvirt-0.9.4-23.el6_2.8libvirt-0.9.4-23.el6_2.7libvirt-0.9.4-23.el6_2.6libvirt-0.9.4-23.el6_2.5libvirt-0.9.4-23.el6_2.4libvirt-0.9.4-23.el6.9
For https://bugzilla.redhat.com/show_bug.cgi?id=770966
* python/libvirt-override.c: remove the predefined array in the
virConnectListDomainsID binding and call virConnectNumOfDomains
to do a proper allocation
cherry-picked from f0293edc3f2f147e04a837d47288253a9991677a
Diffstat (limited to 'libvirt-override.c')
-rw-r--r-- | libvirt-override.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/libvirt-override.c b/libvirt-override.c index b5823fe..11d17be 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1531,7 +1531,7 @@ static PyObject * libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { PyObject *py_retval; - int ids[500], c_retval, i; + int *ids = NULL, c_retval, i; virConnectPtr conn; PyObject *pyobj_conn; @@ -1541,14 +1541,33 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED, conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); LIBVIRT_BEGIN_ALLOW_THREADS; - c_retval = virConnectListDomains(conn, &ids[0], 500); + c_retval = virConnectNumOfDomains(conn); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; + + if (c_retval) { + ids = malloc(sizeof(*ids) * c_retval); + if (!ids) + return VIR_PY_NONE; + + LIBVIRT_BEGIN_ALLOW_THREADS; + c_retval = virConnectListDomains(conn, ids, c_retval); + LIBVIRT_END_ALLOW_THREADS; + if (c_retval < 0) { + free(ids); + return VIR_PY_NONE; + } + } py_retval = PyList_New(c_retval); - for (i = 0;i < c_retval;i++) { - PyList_SetItem(py_retval, i, libvirt_intWrap(ids[i])); + + if (ids) { + for (i = 0;i < c_retval;i++) { + PyList_SetItem(py_retval, i, libvirt_intWrap(ids[i])); + } + free(ids); } + return(py_retval); } |