[libvirt] [PATCH] remove a static limit on max domains in python bindings

Osier Yang jyang at redhat.com
Thu Dec 29 04:36:14 UTC 2011


On 2011年12月29日 09:56, Daniel Veillard wrote:
> * python/libvirt-override.c: remove the predefined array in the
>    virConnectListDomainsID binding and call virConnectNumOfDomains
>    to do a proper allocation
>
> diff --git a/python/libvirt-override.c b/python/libvirt-override.c
> index 8a643a3..2dea16b 100644
> --- a/python/libvirt-override.c
> +++ b/python/libvirt-override.c
> @@ -1616,7 +1616,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;
>
> @@ -1626,14 +1626,34 @@ 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)

Intention problems, should be caused by TAB use.

> +	    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);
>   }
>
> Daniel

ACK with the TAB use replaced by 4 white spaces.

>




More information about the libvir-list mailing list