summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@redhat.com>2011-12-29 16:20:00 +0800
committerDaniel Veillard <veillard@redhat.com>2012-01-06 15:22:25 +0800
commite03611f8a3d5d2c29327ed000b7527ccfb9dcf50 (patch)
tree8b73d2556ae9aa60422149eb84d4df88f300194e
parent6308c47b7b9d2be2c1d9fa3979d0f707ef25df0d (diff)
downloadlibvirt-python-v6-libvirt-0.9.4-23.el6_2.4.tar.gz
libvirt-python-v6-libvirt-0.9.4-23.el6_2.4.tar.xz
libvirt-python-v6-libvirt-0.9.4-23.el6_2.4.zip
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
-rw-r--r--libvirt-override.c27
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);
}