]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
python: use libvirt_util to avoid raw free
authorEric Blake <eblake@redhat.com>
Thu, 2 Feb 2012 22:45:54 +0000 (15:45 -0700)
committerEric Blake <eblake@redhat.com>
Fri, 3 Feb 2012 17:41:47 +0000 (10:41 -0700)
This patch starts the process of elevating the python binding code
to be on the same level as the rest of libvirt when it comes to
requiring good coding styles.  Statically linking against the
libvirt_util library makes it much easier to write good code,
rather than having to open-code and reinvent things locally.

Done by global search and replace of s/free(/VIR_FREE(/, followed
by hand-inspection of remaining malloc and redundant memset.

* cfg.mk (exclude_file_name_regexp--sc_prohibit_raw_allocation):
Remove python from exemption.
* python/Makefile.am (INCLUDES): Add gnulib and src/util.  Drop
$(top_builddir)/$(subdir), as automake already guarantees that.
(mylibs, myqemulibs): Pull in libvirt_util and gnulib.
(libvirtmod_la_CFLAGS): Catch compiler warnings if configured to
use -Werror.
* python/typewrappers.c (libvirt_charPtrSizeWrap)
(libvirt_charPtrWrap): Convert free to VIR_FREE.
* python/generator.py (print_function_wrapper): Likewise.
* python/libvirt-override.c: Likewise.

cfg.mk
python/Makefile.am
python/generator.py
python/libvirt-override.c
python/typewrappers.c

diff --git a/cfg.mk b/cfg.mk
index f9c155834acd4bbf264bc6b52eb9c6d82f223251..dcf44bb8c0199f7512e2e03722dab5e33e2431f2 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
@@ -744,7 +744,7 @@ exclude_file_name_regexp--sc_prohibit_nonreentrant = \
   ^((po|tests)/|docs/.*py$$|tools/(virsh|console)\.c$$)
 
 exclude_file_name_regexp--sc_prohibit_raw_allocation = \
-  ^(src/util/memory\.[ch]|(examples|python)/.*)$$
+  ^(src/util/memory\.[ch]|examples/.*)$$
 
 exclude_file_name_regexp--sc_prohibit_readlink = ^src/util/util\.c$$
 
index 81b160aea95f8eb0945bd905d1cf4ab7f293f703..9b791d77c626a415ef23729055f75f6870f06b2a 100644 (file)
@@ -7,9 +7,13 @@ SUBDIRS= . tests
 
 INCLUDES = \
        $(PYTHON_INCLUDES) \
+       -I$(top_builddir)/gnulib/lib \
+       -I$(top_srcdir)/gnulib/lib \
+       -I$(top_builddir)/src \
+       -I$(top_srcdir)/src \
+       -I$(top_srcdir)/src/util \
        -I$(top_builddir)/include \
        -I$(top_srcdir)/include \
-       -I$(top_builddir)/$(subdir) \
        $(GETTEXT_CPPFLAGS)
 
 AM_CFLAGS = $(WARN_CFLAGS)
@@ -35,8 +39,14 @@ EXTRA_DIST =                 \
        $(DOCS)
 
 if WITH_PYTHON
-mylibs = $(top_builddir)/src/libvirt.la
-myqemulibs = $(top_builddir)/src/libvirt-qemu.la
+mylibs = \
+       $(top_builddir)/src/libvirt.la \
+       $(top_builddir)/src/libvirt_util.la \
+       $(top_builddir)/gnulib/lib/libgnu.la
+myqemulibs = \
+       $(top_builddir)/src/libvirt-qemu.la \
+       $(top_builddir)/src/libvirt_util.la \
+       $(top_builddir)/gnulib/lib/libgnu.la
 
 all-local: libvirt.py libvirt_qemu.py
 
@@ -46,7 +56,7 @@ libvirtmod_la_SOURCES = libvirt-override.c typewrappers.c
 nodist_libvirtmod_la_SOURCES = libvirt.c libvirt.h
 # Python <= 2.4 header files contain a redundant decl, hence we
 # need extra flags here
-libvirtmod_la_CFLAGS = $(WARN_PYTHON_CFLAGS)
+libvirtmod_la_CFLAGS = $(WARN_CFLAGS) $(WARN_PYTHON_CFLAGS)
 
 libvirtmod_la_LDFLAGS = -module -avoid-version -shared -L$(top_builddir)/src/.libs \
        $(CYGWIN_EXTRA_LDFLAGS)
index 0728519dc816d74e7b6030d6d3e5142749483c49..98072f0a9f98f3098ddce0b297ae5a079e4613ab 100755 (executable)
@@ -580,7 +580,7 @@ def print_function_wrapper(module, name, output, export, include):
     if ret[0] == 'void':
         if file == "python_accessor":
             if args[1][1] == "char *":
-                c_call = "\n    free(%s->%s);\n" % (
+                c_call = "\n    VIR_FREE(%s->%s);\n" % (
                                  args[0][0], args[1][0], args[0][0], args[1][0])
                 c_call = c_call + "    %s->%s = (%s)strdup((const xmlChar *)%s);\n" % (args[0][0],
                                  args[1][0], args[1][1], args[1][0])
index 18849f8c40ce451a9160d1a4533547cde4805012..68e0b5503d59cc7aade82061d543992f2d137a8b 100644 (file)
@@ -4,7 +4,7 @@
  *           entry points where an automatically generated stub is
  *           unpractical
  *
- * Copyright (C) 2005, 2007-2011 Red Hat, Inc.
+ * Copyright (C) 2005, 2007-2012 Red Hat, Inc.
  *
  * Daniel Veillard <veillard@redhat.com>
  */
@@ -21,6 +21,7 @@
 #include "libvirt/virterror.h"
 #include "typewrappers.h"
 #include "libvirt.h"
+#include "memory.h"
 
 #ifndef __CYGWIN__
 extern void initlibvirtmod(void);
@@ -122,7 +123,7 @@ libvirt_virDomainBlockStatsFlags(PyObject *self ATTRIBUTE_UNUSED,
     if (i_retval < 0)
         return VIR_PY_NONE;
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -130,13 +131,13 @@ libvirt_virDomainBlockStatsFlags(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
 
     /* convert to a Python tuple of long objects */
     if ((info = PyDict_New()) == NULL) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
 
@@ -169,7 +170,7 @@ libvirt_virDomainBlockStatsFlags(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             Py_DECREF(info);
             return VIR_PY_NONE;
         }
@@ -178,7 +179,7 @@ libvirt_virDomainBlockStatsFlags(PyObject *self ATTRIBUTE_UNUSED,
         PyDict_SetItem(info, key, val);
     }
 
-    free(params);
+    VIR_FREE(params);
     return(info);
 }
 
@@ -283,13 +284,13 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED,
 
     /* convert to a Python tuple of long objects */
     if ((info = PyTuple_New(2)) == NULL) {
-        free(c_retval);
+        VIR_FREE(c_retval);
         return VIR_PY_NONE;
     }
 
     PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval));
     PyTuple_SetItem(info, 1, PyInt_FromLong((long)nparams));
-    free(c_retval);
+    VIR_FREE(c_retval);
     return(info);
 }
 
@@ -314,9 +315,9 @@ libvirt_virDomainGetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
 
     if (c_retval == NULL)
         return VIR_PY_NONE;
-    free(c_retval);
+    VIR_FREE(c_retval);
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -324,13 +325,13 @@ libvirt_virDomainGetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
 
     /* convert to a Python tuple of long objects */
     if ((info = PyDict_New()) == NULL) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
     for (i = 0 ; i < nparams ; i++) {
@@ -362,7 +363,7 @@ libvirt_virDomainGetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             Py_DECREF(info);
             return VIR_PY_NONE;
         }
@@ -370,7 +371,7 @@ libvirt_virDomainGetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
         key = libvirt_constcharPtrWrap(params[i].field);
         PyDict_SetItem(info, key, val);
     }
-    free(params);
+    VIR_FREE(params);
     return(info);
 }
 
@@ -396,9 +397,9 @@ libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
 
     if (c_retval == NULL)
         return VIR_PY_NONE;
-    free(c_retval);
+    VIR_FREE(c_retval);
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -406,13 +407,13 @@ libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
 
     /* convert to a Python tuple of long objects */
     if ((info = PyDict_New()) == NULL) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
     for (i = 0 ; i < nparams ; i++) {
@@ -444,7 +445,7 @@ libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             Py_DECREF(info);
             return VIR_PY_NONE;
         }
@@ -452,7 +453,7 @@ libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
         key = libvirt_constcharPtrWrap(params[i].field);
         PyDict_SetItem(info, key, val);
     }
-    free(params);
+    VIR_FREE(params);
     return(info);
 }
 
@@ -477,9 +478,9 @@ libvirt_virDomainSetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
 
     if (c_retval == NULL)
         return VIR_PY_INT_FAIL;
-    free(c_retval);
+    VIR_FREE(c_retval);
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_INT_FAIL;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -487,7 +488,7 @@ libvirt_virDomainSetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
@@ -534,7 +535,7 @@ libvirt_virDomainSetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             return VIR_PY_INT_FAIL;
         }
     }
@@ -543,11 +544,11 @@ libvirt_virDomainSetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
     i_retval = virDomainSetSchedulerParameters(domain, params, nparams);
     LIBVIRT_END_ALLOW_THREADS;
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
-    free(params);
+    VIR_FREE(params);
     return VIR_PY_INT_SUCCESS;
 }
 
@@ -574,9 +575,9 @@ libvirt_virDomainSetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
 
     if (c_retval == NULL)
         return VIR_PY_INT_FAIL;
-    free(c_retval);
+    VIR_FREE(c_retval);
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_INT_FAIL;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -584,7 +585,7 @@ libvirt_virDomainSetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
@@ -631,7 +632,7 @@ libvirt_virDomainSetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             return VIR_PY_INT_FAIL;
         }
     }
@@ -640,11 +641,11 @@ libvirt_virDomainSetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
     i_retval = virDomainSetSchedulerParametersFlags(domain, params, nparams, flags);
     LIBVIRT_END_ALLOW_THREADS;
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
-    free(params);
+    VIR_FREE(params);
     return VIR_PY_INT_SUCCESS;
 }
 
@@ -672,7 +673,7 @@ libvirt_virDomainSetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
     if (i_retval < 0)
         return VIR_PY_INT_FAIL;
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_INT_FAIL;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -680,7 +681,7 @@ libvirt_virDomainSetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
@@ -727,7 +728,7 @@ libvirt_virDomainSetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             return VIR_PY_INT_FAIL;
         }
     }
@@ -736,11 +737,11 @@ libvirt_virDomainSetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
     i_retval = virDomainSetBlkioParameters(domain, params, nparams, flags);
     LIBVIRT_END_ALLOW_THREADS;
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
-    free(params);
+    VIR_FREE(params);
     return VIR_PY_INT_SUCCESS;
 }
 
@@ -766,7 +767,7 @@ libvirt_virDomainGetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
     if (i_retval < 0)
         return VIR_PY_NONE;
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -774,13 +775,13 @@ libvirt_virDomainGetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
 
     /* convert to a Python tuple of long objects */
     if ((info = PyDict_New()) == NULL) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
     for (i = 0 ; i < nparams ; i++) {
@@ -812,7 +813,7 @@ libvirt_virDomainGetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             Py_DECREF(info);
             return VIR_PY_NONE;
         }
@@ -820,7 +821,7 @@ libvirt_virDomainGetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
         key = libvirt_constcharPtrWrap(params[i].field);
         PyDict_SetItem(info, key, val);
     }
-    free(params);
+    VIR_FREE(params);
     return(info);
 }
 
@@ -847,7 +848,7 @@ libvirt_virDomainSetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
     if (i_retval < 0)
         return VIR_PY_INT_FAIL;
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_INT_FAIL;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -855,7 +856,7 @@ libvirt_virDomainSetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
@@ -902,7 +903,7 @@ libvirt_virDomainSetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             return VIR_PY_INT_FAIL;
         }
     }
@@ -911,11 +912,11 @@ libvirt_virDomainSetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
     i_retval = virDomainSetMemoryParameters(domain, params, nparams, flags);
     LIBVIRT_END_ALLOW_THREADS;
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
-    free(params);
+    VIR_FREE(params);
     return VIR_PY_INT_SUCCESS;
 }
 
@@ -941,7 +942,7 @@ libvirt_virDomainGetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
     if (i_retval < 0)
         return VIR_PY_NONE;
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -949,13 +950,13 @@ libvirt_virDomainGetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (i_retval < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
 
     /* convert to a Python tuple of long objects */
     if ((info = PyDict_New()) == NULL) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
     for (i = 0 ; i < nparams ; i++) {
@@ -987,7 +988,7 @@ libvirt_virDomainGetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             Py_DECREF(info);
             return VIR_PY_NONE;
         }
@@ -995,7 +996,7 @@ libvirt_virDomainGetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
         key = libvirt_constcharPtrWrap(params[i].field);
         PyDict_SetItem(info, key, val);
     }
-    free(params);
+    VIR_FREE(params);
     return(info);
 }
 
@@ -1028,11 +1029,12 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED,
     if (i_retval < 0)
         return VIR_PY_NONE;
 
-    if ((cpuinfo = malloc(sizeof(*cpuinfo)*dominfo.nrVirtCpu)) == NULL)
+    if (VIR_ALLOC_N(cpuinfo, dominfo.nrVirtCpu) < 0)
         return VIR_PY_NONE;
 
     cpumaplen = VIR_CPU_MAPLEN(VIR_NODEINFO_MAXCPUS(nodeinfo));
-    if ((cpumap = malloc(dominfo.nrVirtCpu * cpumaplen)) == NULL)
+    if (xalloc_oversized(dominfo.nrVirtCpu, cpumaplen) ||
+        VIR_ALLOC_N(cpumap, dominfo.nrVirtCpu * cpumaplen) < 0)
         goto cleanup;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -1074,14 +1076,14 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED,
     PyTuple_SetItem(pyretval, 0, pycpuinfo);
     PyTuple_SetItem(pyretval, 1, pycpumap);
 
-    free(cpuinfo);
-    free(cpumap);
+    VIR_FREE(cpuinfo);
+    VIR_FREE(cpumap);
 
     return(pyretval);
 
  cleanup:
-    free(cpuinfo);
-    free(cpumap);
+    VIR_FREE(cpuinfo);
+    VIR_FREE(cpumap);
     /* NB, Py_DECREF is a badly defined macro, so we require
      * braces here to avoid 'ambiguous else' warnings from
      * the compiler.
@@ -1117,9 +1119,8 @@ libvirt_virDomainPinVcpu(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_INT_FAIL;
 
     cpumaplen = VIR_CPU_MAPLEN(VIR_NODEINFO_MAXCPUS(nodeinfo));
-    if ((cpumap = malloc(cpumaplen)) == NULL)
+    if (VIR_ALLOC_N(cpumap, cpumaplen) < 0)
         return VIR_PY_INT_FAIL;
-    memset(cpumap, 0, cpumaplen);
 
     truth = PyBool_FromLong(1);
     for (i = 0 ; i < VIR_NODEINFO_MAXCPUS(nodeinfo) ; i++) {
@@ -1134,7 +1135,7 @@ libvirt_virDomainPinVcpu(PyObject *self ATTRIBUTE_UNUSED,
     i_retval = virDomainPinVcpu(domain, vcpu, cpumap, cpumaplen);
     LIBVIRT_END_ALLOW_THREADS;
     Py_DECREF(truth);
-    free(cpumap);
+    VIR_FREE(cpumap);
 
     if (i_retval < 0)
         return VIR_PY_INT_FAIL;
@@ -1165,9 +1166,8 @@ libvirt_virDomainPinVcpuFlags(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_INT_FAIL;
 
     cpumaplen = VIR_CPU_MAPLEN(VIR_NODEINFO_MAXCPUS(nodeinfo));
-    if ((cpumap = malloc(cpumaplen)) == NULL)
+    if (VIR_ALLOC_N(cpumap, cpumaplen) < 0)
         return VIR_PY_INT_FAIL;
-    memset(cpumap, 0, cpumaplen);
 
     truth = PyBool_FromLong(1);
     for (i = 0 ; i < VIR_NODEINFO_MAXCPUS(nodeinfo) ; i++) {
@@ -1182,7 +1182,7 @@ libvirt_virDomainPinVcpuFlags(PyObject *self ATTRIBUTE_UNUSED,
     i_retval = virDomainPinVcpuFlags(domain, vcpu, cpumap, cpumaplen, flags);
     LIBVIRT_END_ALLOW_THREADS;
     Py_DECREF(truth);
-    free(cpumap);
+    VIR_FREE(cpumap);
 
     if (i_retval < 0)
         return VIR_PY_INT_FAIL;
@@ -1220,9 +1220,9 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     cpumaplen = VIR_CPU_MAPLEN(VIR_NODEINFO_MAXCPUS(nodeinfo));
-    if ((cpumaps = malloc(dominfo.nrVirtCpu * cpumaplen)) == NULL)
+    if (xalloc_oversized(dominfo.nrVirtCpu, cpumaplen) ||
+        VIR_ALLOC_N(cpumaps, dominfo.nrVirtCpu * cpumaplen) < 0)
         goto cleanup;
-    memset(cpumaps, 0, dominfo.nrVirtCpu * cpumaplen);
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
     i_retval = virDomainGetVcpuPinInfo(domain, dominfo.nrVirtCpu,
@@ -1246,12 +1246,12 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED,
         PyList_SetItem(pycpumaps, vcpu, mapinfo);
     }
 
-    free(cpumaps);
+    VIR_FREE(cpumaps);
 
     return pycpumaps;
 
 cleanup:
-    free(cpumaps);
+    VIR_FREE(cpumaps);
 
     if (pycpumaps) { Py_DECREF(pycpumaps);}
 
@@ -1504,8 +1504,7 @@ libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
     auth.ncredtype = PyList_Size(pycredtype);
     if (auth.ncredtype) {
         int i;
-        auth.credtype = malloc(sizeof(*auth.credtype) * auth.ncredtype);
-        if (auth.credtype == NULL)
+        if (VIR_ALLOC_N(auth.credtype, auth.ncredtype) < 0)
             return VIR_PY_NONE;
         for (i = 0 ; i < auth.ncredtype ; i++) {
             PyObject *val;
@@ -1520,7 +1519,7 @@ libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
 
     c_retval = virConnectOpenAuth(name, &auth, flags);
     LIBVIRT_END_ALLOW_THREADS;
-    free(auth.credtype);
+    VIR_FREE(auth.credtype);
     py_retval = libvirt_virConnectPtrWrap((virConnectPtr) c_retval);
     return(py_retval);
 }
@@ -1632,15 +1631,14 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        ids = malloc(sizeof(*ids) * c_retval);
-        if (!ids)
+        if (VIR_ALLOC_N(ids, c_retval) < 0)
             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);
+            VIR_FREE(ids);
             return VIR_PY_NONE;
         }
     }
@@ -1650,7 +1648,7 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED,
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_intWrap(ids[i]));
         }
-        free(ids);
+        VIR_FREE(ids);
     }
 
     return(py_retval);
@@ -1677,14 +1675,13 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListDefinedDomains(conn, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -1693,9 +1690,9 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -1722,14 +1719,13 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virDomainSnapshotListNames(dom, names, c_retval, flags);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -1738,9 +1734,9 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -1767,14 +1763,13 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virDomainSnapshotListChildrenNames(snap, names, c_retval, flags);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -1783,9 +1778,9 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -2047,14 +2042,13 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListNetworks(conn, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -2063,9 +2057,9 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -2093,14 +2087,13 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListDefinedNetworks(conn, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -2109,9 +2102,9 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -2255,8 +2248,7 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *arg
         return VIR_PY_NONE;
 
     conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn);
-    freeMems = malloc(maxCells * sizeof(*freeMems));
-    if (freeMems == NULL)
+    if (VIR_ALLOC_N(freeMems, maxCells) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -2264,7 +2256,7 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *arg
     LIBVIRT_END_ALLOW_THREADS;
 
     if (c_retval < 0) {
-        free(freeMems);
+        VIR_FREE(freeMems);
         return VIR_PY_NONE;
     }
     py_retval = PyList_New(c_retval);
@@ -2272,7 +2264,7 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *arg
         PyList_SetItem(py_retval, i,
                 libvirt_longlongWrap((long long) freeMems[i]));
     }
-    free(freeMems);
+    VIR_FREE(freeMems);
     return(py_retval);
 }
 
@@ -2298,19 +2290,19 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
         return VIR_PY_NONE;
 
     if (nparams) {
-        if (!(stats = malloc(sizeof(*stats) * nparams)))
+        if (VIR_ALLOC_N(stats, nparams) < 0)
             return VIR_PY_NONE;
 
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virNodeGetCPUStats(conn, cpuNum, stats, &nparams, flags);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(stats);
+            VIR_FREE(stats);
             return VIR_PY_NONE;
         }
     }
     if (!(ret = PyDict_New())) {
-        free(stats);
+        VIR_FREE(stats);
         return VIR_PY_NONE;
     }
     for (i = 0; i < nparams; i++) {
@@ -2319,7 +2311,7 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
                        libvirt_ulonglongWrap(stats[i].value));
     }
 
-    free(stats);
+    VIR_FREE(stats);
     return ret;
 }
 
@@ -2345,19 +2337,19 @@ libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
         return VIR_PY_NONE;
 
     if (nparams) {
-        if (!(stats = malloc(sizeof(*stats) * nparams)))
+        if (VIR_ALLOC_N(stats, nparams) < 0)
             return VIR_PY_NONE;
 
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virNodeGetMemoryStats(conn, cellNum, stats, &nparams, flags);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(stats);
+            VIR_FREE(stats);
             return VIR_PY_NONE;
         }
     }
     if (!(ret = PyDict_New())) {
-        free(stats);
+        VIR_FREE(stats);
         return VIR_PY_NONE;
     }
     for (i = 0; i < nparams; i++) {
@@ -2366,7 +2358,7 @@ libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
                        libvirt_ulonglongWrap(stats[i].value));
     }
 
-    free(stats);
+    VIR_FREE(stats);
     return ret;
 }
 
@@ -2391,14 +2383,13 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListStoragePools(conn, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -2406,8 +2397,8 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED,
     if (py_retval == NULL) {
         if (names) {
             for (i = 0;i < c_retval;i++)
-                free(names[i]);
-            free(names);
+                VIR_FREE(names[i]);
+            VIR_FREE(names);
         }
         return VIR_PY_NONE;
     }
@@ -2415,9 +2406,9 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -2445,14 +2436,13 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListDefinedStoragePools(conn, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -2460,8 +2450,8 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED,
     if (py_retval == NULL) {
         if (names) {
             for (i = 0;i < c_retval;i++)
-                free(names[i]);
-            free(names);
+                VIR_FREE(names[i]);
+            VIR_FREE(names);
         }
         return VIR_PY_NONE;
     }
@@ -2469,9 +2459,9 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -2499,14 +2489,13 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virStoragePoolListVolumes(pool, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -2514,8 +2503,8 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED,
     if (py_retval == NULL) {
         if (names) {
             for (i = 0;i < c_retval;i++)
-                free(names[i]);
-            free(names);
+                VIR_FREE(names[i]);
+            VIR_FREE(names);
         }
         return VIR_PY_NONE;
     }
@@ -2523,9 +2512,9 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -2712,14 +2701,13 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virNodeListDevices(conn, cap, names, c_retval, flags);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -2728,9 +2716,9 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -2756,14 +2744,13 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virNodeDeviceListCaps(dev, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -2772,9 +2759,9 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -2876,14 +2863,13 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        uuids = malloc(sizeof(*uuids) * c_retval);
-        if (!uuids)
+        if (VIR_ALLOC_N(uuids, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListSecrets(conn, uuids, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(uuids);
+            VIR_FREE(uuids);
             return VIR_PY_NONE;
         }
     }
@@ -2892,9 +2878,9 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED,
     if (uuids) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i]));
-            free(uuids[i]);
+            VIR_FREE(uuids[i]);
         }
-        free(uuids);
+        VIR_FREE(uuids);
     }
 
     return py_retval;
@@ -2923,8 +2909,7 @@ libvirt_virSecretGetValue(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     py_retval = PyString_FromStringAndSize((const char *)c_retval, size);
-    memset(c_retval, 0, size);
-    free(c_retval);
+    VIR_FREE(c_retval);
 
     return py_retval;
 }
@@ -3050,14 +3035,13 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        uuids = malloc(sizeof(*uuids) * c_retval);
-        if (!uuids)
+        if (VIR_ALLOC_N(uuids, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListNWFilters(conn, uuids, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(uuids);
+            VIR_FREE(uuids);
             return VIR_PY_NONE;
         }
     }
@@ -3066,9 +3050,9 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED,
     if (uuids) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i]));
-            free(uuids[i]);
+            VIR_FREE(uuids[i]);
         }
-        free(uuids);
+        VIR_FREE(uuids);
     }
 
     return py_retval;
@@ -3095,14 +3079,13 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListInterfaces(conn, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -3110,8 +3093,8 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED,
     if (py_retval == NULL) {
         if (names) {
             for (i = 0;i < c_retval;i++)
-                free(names[i]);
-            free(names);
+                VIR_FREE(names[i]);
+            VIR_FREE(names);
         }
         return VIR_PY_NONE;
     }
@@ -3119,9 +3102,9 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -3150,14 +3133,13 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED,
         return VIR_PY_NONE;
 
     if (c_retval) {
-        names = malloc(sizeof(*names) * c_retval);
-        if (!names)
+        if (VIR_ALLOC_N(names, c_retval) < 0)
             return VIR_PY_NONE;
         LIBVIRT_BEGIN_ALLOW_THREADS;
         c_retval = virConnectListDefinedInterfaces(conn, names, c_retval);
         LIBVIRT_END_ALLOW_THREADS;
         if (c_retval < 0) {
-            free(names);
+            VIR_FREE(names);
             return VIR_PY_NONE;
         }
     }
@@ -3165,8 +3147,8 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED,
     if (py_retval == NULL) {
         if (names) {
             for (i = 0;i < c_retval;i++)
-                free(names[i]);
-            free(names);
+                VIR_FREE(names[i]);
+            VIR_FREE(names);
         }
         return VIR_PY_NONE;
     }
@@ -3174,9 +3156,9 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED,
     if (names) {
         for (i = 0;i < c_retval;i++) {
             PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
-            free(names[i]);
+            VIR_FREE(names[i]);
         }
-        free(names);
+        VIR_FREE(names);
     }
 
     return(py_retval);
@@ -3204,13 +3186,13 @@ libvirt_virConnectBaselineCPU(PyObject *self ATTRIBUTE_UNUSED,
         int i;
 
         ncpus = PyList_Size(list);
-        if ((xmlcpus = malloc(ncpus * sizeof(*xmlcpus))) == NULL)
+        if (VIR_ALLOC_N(xmlcpus, ncpus) < 0)
             return VIR_PY_INT_FAIL;
 
         for (i = 0; i < ncpus; i++) {
             xmlcpus[i] = PyString_AsString(PyList_GetItem(list, i));
             if (xmlcpus[i] == NULL) {
-                free(xmlcpus);
+                VIR_FREE(xmlcpus);
                 return VIR_PY_INT_FAIL;
             }
         }
@@ -3220,13 +3202,13 @@ libvirt_virConnectBaselineCPU(PyObject *self ATTRIBUTE_UNUSED,
     base_cpu = virConnectBaselineCPU(conn, xmlcpus, ncpus, flags);
     LIBVIRT_END_ALLOW_THREADS;
 
-    free(xmlcpus);
+    VIR_FREE(xmlcpus);
 
     if (base_cpu == NULL)
         return VIR_PY_INT_FAIL;
 
     pybase_cpu = PyString_FromString(base_cpu);
-    free(base_cpu);
+    VIR_FREE(base_cpu);
 
     if (pybase_cpu == NULL)
         return VIR_PY_INT_FAIL;
@@ -3332,7 +3314,7 @@ libvirt_virDomainSetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
     if (c_ret < 0)
         return VIR_PY_INT_FAIL;
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_INT_FAIL;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -3340,7 +3322,7 @@ libvirt_virDomainSetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (c_ret < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
@@ -3384,7 +3366,7 @@ libvirt_virDomainSetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             return VIR_PY_INT_FAIL;
         }
     }
@@ -3394,11 +3376,11 @@ libvirt_virDomainSetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (c_ret < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_INT_FAIL;
     }
 
-    free(params);
+    VIR_FREE(params);
     return VIR_PY_INT_SUCCESS;
 }
 
@@ -3426,7 +3408,7 @@ libvirt_virDomainGetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
     if (c_ret < 0)
         return VIR_PY_NONE;
 
-    if ((params = malloc(sizeof(*params)*nparams)) == NULL)
+    if (VIR_ALLOC_N(params, nparams) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -3434,13 +3416,13 @@ libvirt_virDomainGetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (c_ret < 0) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
 
     /* convert to a Python tuple of long objects */
     if ((pyreply = PyDict_New()) == NULL) {
-        free(params);
+        VIR_FREE(params);
         return VIR_PY_NONE;
     }
     for (i = 0 ; i < nparams ; i++) {
@@ -3472,7 +3454,7 @@ libvirt_virDomainGetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
             break;
 
         default:
-            free(params);
+            VIR_FREE(params);
             Py_DECREF(pyreply);
             return VIR_PY_NONE;
         }
@@ -3480,7 +3462,7 @@ libvirt_virDomainGetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
         key = libvirt_constcharPtrWrap(params[i].field);
         PyDict_SetItem(pyreply, key, val);
     }
-    free(params);
+    VIR_FREE(params);
     return(pyreply);
 }
 
@@ -3508,7 +3490,7 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED,
     ndisks = count;
 
     if (ndisks) {
-        if (!(disks = malloc(sizeof(*disks) * ndisks)))
+        if (VIR_ALLOC_N(disks, ndisks) < 0)
             return VIR_PY_NONE;
 
         LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -3531,8 +3513,8 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED,
 cleanup:
     if (disks) {
         for (i = 0; i < count; i++)
-            free(disks[i].disk);
-        free(disks);
+            VIR_FREE(disks[i].disk);
+        VIR_FREE(disks);
     }
     return py_retval;
 }
@@ -4974,7 +4956,7 @@ libvirt_virStreamRecv(PyObject *self ATTRIBUTE_UNUSED,
     }
     stream = PyvirStream_Get(pyobj_stream);
 
-    if ((buf = malloc(nbytes+1 > 0 ? nbytes+1 : 1)) == NULL)
+    if (VIR_ALLOC_N(buf, nbytes+1 > 0 ? nbytes+1 : 1) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -5109,7 +5091,7 @@ libvirt_virDomainBlockPeek(PyObject *self ATTRIBUTE_UNUSED,
 
     domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
 
-    if ((buf = malloc(size)) == NULL)
+    if (VIR_ALLOC_N(buf, size) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -5122,7 +5104,7 @@ libvirt_virDomainBlockPeek(PyObject *self ATTRIBUTE_UNUSED,
     py_retval = PyString_FromStringAndSize(buf, size);
 
 cleanup:
-    free(buf);
+    VIR_FREE(buf);
     return py_retval;
 }
 
@@ -5144,7 +5126,7 @@ libvirt_virDomainMemoryPeek(PyObject *self ATTRIBUTE_UNUSED,
 
     domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
 
-    if ((buf = malloc(size)) == NULL)
+    if (VIR_ALLOC_N(buf, size) < 0)
         return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
@@ -5157,7 +5139,7 @@ libvirt_virDomainMemoryPeek(PyObject *self ATTRIBUTE_UNUSED,
     py_retval = PyString_FromStringAndSize(buf, size);
 
 cleanup:
-    free(buf);
+    VIR_FREE(buf);
     return py_retval;
 }
 
index 9021ce3796f9d9555e8bcffe2291541c719a3225..3f200b38af33b78d60f23fac225f3e151c217218 100644 (file)
@@ -2,7 +2,7 @@
  * types.c: converter functions between the internal representation
  *          and the Python objects
  *
- * Copyright (C) 2005, 2007 Red Hat, Inc.
+ * Copyright (C) 2005, 2007, 2012 Red Hat, Inc.
  *
  * Daniel Veillard <veillard@redhat.com>
  */
@@ -16,6 +16,8 @@
 
 #include "typewrappers.h"
 
+#include "memory.h"
+
 #ifndef Py_CAPSULE_H
 typedef void(*PyCapsule_Destructor)(void *, void *);
 #endif
@@ -86,7 +88,7 @@ libvirt_charPtrSizeWrap(char *str, Py_ssize_t size)
         return (Py_None);
     }
     ret = PyString_FromStringAndSize(str, size);
-    free(str);
+    VIR_FREE(str);
     return (ret);
 }
 
@@ -100,7 +102,7 @@ libvirt_charPtrWrap(char *str)
         return (Py_None);
     }
     ret = PyString_FromString(str);
-    free(str);
+    VIR_FREE(str);
     return (ret);
 }