[libvirt] [PATCH 1/2] python: prefer PyList_SET_ITEM to PyList_SetItem
Martin Kletzander
mkletzan at redhat.com
Tue Nov 12 13:35:39 UTC 2013
On Thu, Nov 07, 2013 at 03:44:22PM +0100, Giuseppe Scrivano wrote:
> The PyList_SET_ITEM macro, differently from PyList_SetItem, doesn't do
> any error checking and overwrites anything that was previously stored
> in the list at the chosen destination position.
>
> PyList_SET_ITEM is usually faster than PyList_SetItem, and since it is
> used only to fill freshly created lists, it is safe to be used here.
>
> Signed-off-by: Giuseppe Scrivano <gscrivan at redhat.com>
> ---
> python/libvirt-override.c | 197 +++++++++++++++++++++-------------------------
> 1 file changed, 90 insertions(+), 107 deletions(-)
>
> diff --git a/python/libvirt-override.c b/python/libvirt-override.c
> index 2e58bf9..83bca94 100644
> --- a/python/libvirt-override.c
> +++ b/python/libvirt-override.c
[...]
> @@ -2575,13 +2569,12 @@ libvirt_virDomainListAllSnapshots(PyObject *self ATTRIBUTE_UNUSED,
> goto cleanup;
>
> for (i = 0; i < c_retval; i++) {
> - if ((pyobj_snap = libvirt_virDomainSnapshotPtrWrap(snaps[i])) == NULL ||
> - PyList_SetItem(py_retval, i, pyobj_snap) < 0) {
> - Py_XDECREF(pyobj_snap);
> + if (!(pyobj_snap = libvirt_virDomainSnapshotPtrWrap(snaps[i]))) {
Not that it's a problem, just note that you're changing the '== NULL'
to '!' here, but not elsewhere...
> Py_DECREF(py_retval);
> py_retval = NULL;
> goto cleanup;
> }
> + PyList_SET_ITEM(py_retval, i, pyobj_snap);
> snaps[i] = NULL;
> }
>
[...]
> @@ -3219,7 +3209,7 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *arg
> }
> py_retval = PyList_New(c_retval);
> for (i = 0; i < c_retval; i++) {
> - PyList_SetItem(py_retval, i,
> + PyList_SET_ITEM(py_retval, i,
> libvirt_longlongWrap((long long) freeMems[i]));
Pre-existing bad indentation.
> }
> VIR_FREE(freeMems);
> @@ -3398,7 +3388,7 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED,
>
> if (names) {
> for (i = 0; i < c_retval; i++) {
> - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
> + PyList_SET_ITEM(py_retval, i, libvirt_constcharPtrWrap(names[i]));
> VIR_FREE(names[i]);
> }
> VIR_FREE(names);
[...]
> @@ -3654,12 +3642,12 @@ libvirt_virStoragePoolGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
> if ((py_retval = PyList_New(4)) == NULL)
> return VIR_PY_NONE;
>
> - PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state));
> - PyList_SetItem(py_retval, 1,
> + PyList_SET_ITEM(py_retval, 0, libvirt_intWrap((int) info.state));
> + PyList_SET_ITEM(py_retval, 1,
> libvirt_longlongWrap((unsigned long long) info.capacity));
> - PyList_SetItem(py_retval, 2,
> + PyList_SET_ITEM(py_retval, 2,
> libvirt_longlongWrap((unsigned long long) info.allocation));
> - PyList_SetItem(py_retval, 3,
> + PyList_SET_ITEM(py_retval, 3,
> libvirt_longlongWrap((unsigned long long) info.available));
> return py_retval;
> }
Indentation is off after your patch in this whole hunk.
> @@ -3685,10 +3673,10 @@ libvirt_virStorageVolGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
>
> if ((py_retval = PyList_New(3)) == NULL)
> return VIR_PY_NONE;
> - PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.type));
> - PyList_SetItem(py_retval, 1,
> + PyList_SET_ITEM(py_retval, 0, libvirt_intWrap((int) info.type));
> + PyList_SET_ITEM(py_retval, 1,
> libvirt_longlongWrap((unsigned long long) info.capacity));
> - PyList_SetItem(py_retval, 2,
> + PyList_SET_ITEM(py_retval, 2,
> libvirt_longlongWrap((unsigned long long) info.allocation));
> return py_retval;
> }
ditto
[...]
... but ACK as-is, because there are more indentation problems,
anyway. So I've prepared a follow-up patch cleaning few bits in this
file.
Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20131112/411ef0ba/attachment-0001.sig>
More information about the libvir-list
mailing list