[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] PATCH: Switch all remaining code to memory alloc APIs



This patch switches all remaining code over to use the memory allocation
APIs, with exception of virsh which is going to be slightly more complex

It was mostly a straight conversion - there were only a few places which 
weren't checking for failure corecttly - the most notable being sexpr.c.

 bridge.c                  |   18 +++----
 conf.c                    |   51 ++++++++++----------
 iptables.c                |   60 ++++++++++--------------
 lxc_conf.c                |   45 ++++++++----------
 lxc_container.c           |    5 +-
 lxc_driver.c              |   25 ++++------
 openvz_conf.c             |   49 ++++++++-----------
 openvz_driver.c           |    3 -
 proxy_internal.c          |    8 +--
 remote_internal.c         |   85 +++++++++++++++-------------------
 sexpr.c                   |   31 ++++++++----
 storage_backend.c         |   32 ++++++------
 storage_backend_disk.c    |   24 ++++-----
 storage_backend_fs.c      |   56 ++++++++++------------
 storage_backend_iscsi.c   |   30 +++++-------
 storage_backend_logical.c |   20 +++-----
 storage_conf.c            |  114 +++++++++++++++++++++++-----------------------
 storage_driver.c          |    5 --
 xen_internal.c            |   38 +++++++--------
 xen_unified.c             |   23 ++++-----
 xend_internal.c           |    1 
 xmlrpc.c                  |   67 +++++++++++++--------------
 22 files changed, 379 insertions(+), 411 deletions(-)


Regards,
Daniel.

diff -r ff6b92c70738 src/bridge.c
--- a/src/bridge.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/bridge.c	Fri May 30 10:55:44 2008 -0400
@@ -45,6 +45,7 @@
 #include <net/if_arp.h>    /* ARPHRD_ETHER */
 
 #include "internal.h"
+#include "memory.h"
 
 #define MAX_BRIDGE_ID 256
 
@@ -84,8 +85,7 @@
         return err;
     }
 
-    *ctlp = malloc(sizeof(**ctlp));
-    if (!*ctlp) {
+    if (VIR_ALLOC(*ctlp) < 0) {
         close(fd);
         return ENOMEM;
     }
@@ -110,7 +110,7 @@
     close(ctl->fd);
     ctl->fd = 0;
 
-    free(ctl);
+    VIR_FREE(ctl);
 }
 
 /**
@@ -681,7 +681,7 @@
 
     snprintf(delayStr, sizeof(delayStr), "%d", delay);
 
-    if (!(argv = calloc(n + 1, sizeof(*argv))))
+    if (VIR_ALLOC_N(argv, n + 1) < 0)
         goto error;
 
     n = 0;
@@ -706,8 +706,8 @@
     if (argv) {
         n = 0;
         while (argv[n])
-            free(argv[n++]);
-        free(argv);
+            VIR_FREE(argv[n++]);
+        VIR_FREE(argv);
     }
 
     return retval;
@@ -738,7 +738,7 @@
         1 + /* brige name */
         1;  /* value */
 
-    if (!(argv = calloc(n + 1, sizeof(*argv))))
+    if (VIR_ALLOC_N(argv, n + 1) < 0)
         goto error;
 
     n = 0;
@@ -763,8 +763,8 @@
     if (argv) {
         n = 0;
         while (argv[n])
-            free(argv[n++]);
-        free(argv);
+            VIR_FREE(argv[n++]);
+        VIR_FREE(argv);
     }
 
     return retval;
diff -r ff6b92c70738 src/conf.c
--- a/src/conf.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/conf.c	Fri May 30 10:55:44 2008 -0400
@@ -23,6 +23,7 @@
 #include "conf.h"
 #include "util.h"
 #include "c-ctype.h"
+#include "memory.h"
 
 /************************************************************************
  *									*
@@ -138,11 +139,11 @@
         return;
     if (val->type == VIR_CONF_STRING &&
         val->str != NULL)
-        free(val->str);
+        VIR_FREE(val->str);
     if (val->type == VIR_CONF_LIST &&
         val->list != NULL)
         virConfFreeList(val->list);
-    free(val);
+    VIR_FREE(val);
 }
 
 virConfPtr
@@ -150,8 +151,7 @@
 {
     virConfPtr ret;
 
-    ret = calloc(1, sizeof(*ret));
-    if (ret == NULL) {
+    if (VIR_ALLOC(ret) < 0) {
         virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"), 0);
         return(NULL);
     }
@@ -199,8 +199,7 @@
     if ((comm == NULL) && (name == NULL))
         return(NULL);
 
-    ret = calloc(1, sizeof(*ret));
-    if (ret == NULL) {
+    if (VIR_ALLOC(ret) < 0) {
         virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"), 0);
         return(NULL);
     }
@@ -441,7 +440,8 @@
         NEXT;
         SKIP_BLANKS_AND_EOL;
         if ((ctxt->cur < ctxt->end) && (CUR != ']')) {
-            lst = virConfParseValue(ctxt);
+            if ((lst = virConfParseValue(ctxt)) == NULL)
+                return(NULL);
             SKIP_BLANKS_AND_EOL;
         }
         while ((ctxt->cur < ctxt->end) && (CUR != ']')) {
@@ -484,10 +484,10 @@
                      ctxt->line);
         return(NULL);
     }
-    ret = calloc(1, sizeof(*ret));
-    if (ret == NULL) {
+    if (VIR_ALLOC(ret) < 0) {
         virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"), 0);
-            free(str);
+        virConfFreeList(lst);
+        VIR_FREE(str);
         return(NULL);
     }
     ret->type = type;
@@ -618,7 +618,7 @@
     SKIP_BLANKS;
     value = virConfParseValue(ctxt);
     if (value == NULL) {
-        free(name);
+        VIR_FREE(name);
         return(-1);
     }
     SKIP_BLANKS;
@@ -630,15 +630,15 @@
         if (comm == NULL) {
             virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"),
                          ctxt->line);
-            free(name);
+            VIR_FREE(name);
             virConfFreeValue(value);
             return(-1);
         }
     }
     if (virConfAddEntry(ctxt->conf, name, value, comm) == NULL) {
-        free(name);
+        VIR_FREE(name);
         virConfFreeValue(value);
-    free(comm);
+        VIR_FREE(comm);
         return(-1);
     }
     return(0);
@@ -720,7 +720,7 @@
 
     conf = virConfParse(filename, content, len);
 
-    free(content);
+    VIR_FREE(content);
 
     return conf;
 }
@@ -769,14 +769,14 @@
     tmp = conf->entries;
     while (tmp) {
         virConfEntryPtr next;
-        free(tmp->name);
+        VIR_FREE(tmp->name);
         virConfFreeValue(tmp->value);
-        free(tmp->comment);
+        VIR_FREE(tmp->comment);
         next = tmp->next;
-        free(tmp);
+        VIR_FREE(tmp);
         tmp = next;
     }
-    free(conf);
+    VIR_FREE(conf);
     return(0);
 }
 
@@ -834,14 +834,14 @@
     }
 
     if (!cur) {
-        if (!(cur = malloc(sizeof(*cur)))) {
+        if (VIR_ALLOC(cur) < 0) {
             virConfFreeValue(value);
             return (-1);
         }
         cur->comment = NULL;
         if (!(cur->name = strdup(setting))) {
             virConfFreeValue(value);
-            free(cur);
+            VIR_FREE(cur);
             return (-1);
         }
         cur->value = value;
@@ -897,15 +897,16 @@
 
     fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR );
     if (fd < 0) {
+        char *tmp = virBufferContentAndReset(&buf);
         virConfError(NULL, VIR_ERR_WRITE_FAILED, _("failed to open file"), 0);
-        free(virBufferContentAndReset(&buf));
+        VIR_FREE(tmp);
         return -1;
     }
 
     use = virBufferUse(&buf);
     content = virBufferContentAndReset(&buf);
     ret = safewrite(fd, content, use);
-    free(content);
+    VIR_FREE(content);
     close(fd);
     if (ret != (int)use) {
         virConfError(NULL, VIR_ERR_WRITE_FAILED, _("failed to save content"), 0);
@@ -955,11 +956,11 @@
 
     if ((int)use >= *len) {
         *len = (int)use;
-        free(content);
+        VIR_FREE(content);
         return -1;
     }
     memcpy(memory, content, use);
-    free(content);
+    VIR_FREE(content);
     *len = use;
     return use;
 }
diff -r ff6b92c70738 src/iptables.c
--- a/src/iptables.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/iptables.c	Fri May 30 10:55:44 2008 -0400
@@ -45,6 +45,7 @@
 #include "internal.h"
 #include "iptables.h"
 #include "util.h"
+#include "memory.h"
 
 #define qemudLog(level, msg...) fprintf(stderr, msg)
 
@@ -156,7 +157,7 @@
     snprintf(arg, sizeof(arg), "--custom-rules=ipv4:%s:%s", table, path);
 
     if (!stripLine(content, len, arg)) {
-        free(content);
+        VIR_FREE(content);
         return;
     }
 
@@ -171,7 +172,7 @@
         goto write_error;
     }
 
-    free(content);
+    VIR_FREE(content);
 
     return;
 
@@ -181,7 +182,7 @@
              strerror(errno));
     if (f)
         fclose(f);
-    free(content);
+    VIR_FREE(content);
 
 #undef MAX_FILE_LEN
 }
@@ -264,14 +265,14 @@
 static void
 iptRuleFree(iptRule *rule)
 {
-    free(rule->rule);
+    VIR_FREE(rule->rule);
     rule->rule = NULL;
 
     if (rule->argv) {
         int i = 0;
         while (rule->argv[i])
-            free(rule->argv[i++]);
-        free(rule->argv);
+            VIR_FREE(rule->argv[i++]);
+        VIR_FREE(rule->argv);
         rule->argv = NULL;
     }
 }
@@ -282,17 +283,13 @@
                char **argv,
                int command_idx)
 {
-    iptRule *r;
-
-    if (!(r = realloc(rules->rules, sizeof(*r) * (rules->nrules+1)))) {
+    if (VIR_REALLOC_N(rules->rules, rules->nrules+1) < 0) {
         int i = 0;
         while (argv[i])
-            free(argv[i++]);
-        free(argv);
+            VIR_FREE(argv[i++]);
+        VIR_FREE(argv);
         return ENOMEM;
     }
-
-    rules->rules = r;
 
     rules->rules[rules->nrules].rule        = rule;
     rules->rules[rules->nrules].argv        = argv;
@@ -332,23 +329,17 @@
 {
     int i;
 
-    if (rules->table) {
-        free(rules->table);
-        rules->table = NULL;
-    }
+    if (rules->table)
+        VIR_FREE(rules->table);
 
-    if (rules->chain) {
-        free(rules->chain);
-        rules->chain = NULL;
-    }
-
+    if (rules->chain)
+        VIR_FREE(rules->chain);
 
     if (rules->rules) {
         for (i = 0; i < rules->nrules; i++)
             iptRuleFree(&rules->rules[i]);
 
-        free(rules->rules);
-        rules->rules = NULL;
+        VIR_FREE(rules->rules);
 
         rules->nrules = 0;
     }
@@ -358,7 +349,7 @@
     rules->path[0] = '\0';
 #endif /* ENABLE_IPTABLES_LOKKIT */
 
-    free(rules);
+    VIR_FREE(rules);
 }
 
 static iptRules *
@@ -367,7 +358,7 @@
 {
     iptRules *rules;
 
-    if (!(rules = calloc(1, sizeof (*rules))))
+    if (VIR_ALLOC(rules) < 0)
         return NULL;
 
     if (!(rules->table = strdup(table)))
@@ -404,8 +395,9 @@
     for (len = 1, i = 0; argv[i]; i++)
         len += strlen(argv[i]) + 1;
 
-    if (!(p = ret = (char *)malloc(len)))
+    if (VIR_ALLOC_N(ret, len) < 0)
         return NULL;
+    p = ret;
 
     for (i = 0; argv[i]; i++) {
         if (i != 0)
@@ -441,7 +433,7 @@
 
     va_end(args);
 
-    if (!(argv = calloc(n + 1, sizeof(*argv))))
+    if (VIR_ALLOC_N(argv, n + 1) < 0)
         goto error;
 
     n = 0;
@@ -478,7 +470,7 @@
         goto error;
 
     if (action == REMOVE) {
-        free(argv[command_idx]);
+        VIR_FREE(argv[command_idx]);
         if (!(argv[command_idx] = strdup("--delete")))
             goto error;
     }
@@ -497,13 +489,13 @@
     }
 
  error:
-    free(rule);
+    VIR_FREE(rule);
 
     if (argv) {
         n = 0;
         while (argv[n])
-            free(argv[n++]);
-        free(argv);
+            VIR_FREE(argv[n++]);
+        VIR_FREE(argv);
     }
 
     return retval;
@@ -521,7 +513,7 @@
 {
     iptablesContext *ctx;
 
-    if (!(ctx = calloc(1, sizeof (*ctx))))
+    if (VIR_ALLOC(ctx) < 0)
         return NULL;
 
     if (!(ctx->input_filter = iptRulesNew("filter", "INPUT")))
@@ -555,7 +547,7 @@
         iptRulesFree(ctx->forward_filter);
     if (ctx->nat_postrouting)
         iptRulesFree(ctx->nat_postrouting);
-    free(ctx);
+    VIR_FREE(ctx);
 }
 
 /**
diff -r ff6b92c70738 src/lxc_conf.c
--- a/src/lxc_conf.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/lxc_conf.c	Fri May 30 10:55:44 2008 -0400
@@ -42,7 +42,7 @@
 #include "util.h"
 #include "uuid.h"
 #include "xml.h"
-
+#include "memory.h"
 #include "lxc_conf.h"
 
 /* debug macros */
@@ -183,10 +183,10 @@
         if (virUUIDParse(res, uuid) < 0) {
             lxcError(conn, NULL, VIR_ERR_INTERNAL_ERROR,
                      _("invalid uuid element"));
-            free(res);
+            VIR_FREE(res);
             return(-1);
         }
-        free(res);
+        VIR_FREE(res);
     }
     return(0);
 }
@@ -206,15 +206,14 @@
     res = virXPathNodeSet("/domain/devices/filesystem", contextPtr, &list);
     if (res > 0) {
         for (i = 0; i < res; ++i) {
-            mountObj = calloc(1, sizeof(lxc_mount_t));
-            if (NULL == mountObj) {
+            if (VIR_ALLOC(mountObj) < 0) {
                 lxcError(conn, NULL, VIR_ERR_NO_MEMORY, "mount");
                 goto parse_complete;
             }
 
             rc = lxcParseMountXML(conn, list[i], mountObj);
             if (0 > rc) {
-                free(mountObj);
+                VIR_FREE(mountObj);
                 goto parse_complete;
             }
 
@@ -228,7 +227,7 @@
             }
             prevObj = mountObj;
         }
-        free(list);
+        VIR_FREE(list);
     }
 
     rc = nmounts;
@@ -252,7 +251,7 @@
     if (strlen(res) >= PATH_MAX - 1) {
         lxcError(conn, NULL, VIR_ERR_INTERNAL_ERROR,
                  _("init string too long"));
-        free(res);
+        VIR_FREE(res);
         return(-1);
     }
 
@@ -307,7 +306,7 @@
     xmlChar *xmlProp = NULL;
     lxc_vm_def_t *containerDef;
 
-    if (!(containerDef = calloc(1, sizeof(*containerDef)))) {
+    if (VIR_ALLOC(containerDef) < 0) {
         lxcError(conn, NULL, VIR_ERR_NO_MEMORY, "containerDef");
         return NULL;
     }
@@ -339,8 +338,7 @@
                  _("invalid domain type"));
         goto error;
     }
-    free(xmlProp);
-    xmlProp = NULL;
+    VIR_FREE(xmlProp);
 
     if ((xmlProp = xmlGetProp(rootNodePtr, BAD_CAST "id"))) {
         if (0 > virStrToLong_i((char*)xmlProp, NULL, 10, &(containerDef->id))) {
@@ -351,8 +349,7 @@
     } else {
         containerDef->id = -1;
     }
-    free(xmlProp);
-    xmlProp = NULL;
+    VIR_FREE(xmlProp);
 
     if (lxcParseDomainName(conn, &(containerDef->name), contextPtr) < 0) {
         goto error;
@@ -385,7 +382,7 @@
     return containerDef;
 
  error:
-    free(xmlProp);
+    VIR_FREE(xmlProp);
     xmlXPathFreeContext(contextPtr);
     lxcFreeVMDef(containerDef);
 
@@ -436,7 +433,7 @@
         return vm;
     }
 
-    if (!(vm = calloc(1, sizeof(lxc_vm_t)))) {
+    if (VIR_ALLOC(vm) < 0) {
         lxcError(conn, NULL, VIR_ERR_NO_MEMORY, "vm");
         return NULL;
     }
@@ -529,7 +526,7 @@
         close(fd);
     }
 
-    free(xmlDef);
+    VIR_FREE(xmlDef);
 
     return rc;
 }
@@ -637,7 +634,7 @@
 
     lxcLoadConfig(driver, file, tempPath, xmlData);
 
-    free(xmlData);
+    VIR_FREE(xmlData);
 
 load_complete:
     return rc;
@@ -744,14 +741,14 @@
     curMount = vmdef->mounts;
     while (curMount) {
         nextMount = curMount->next;
-        free(curMount);
+        VIR_FREE(curMount);
         curMount = nextMount;
     }
 
-    free(vmdef->name);
-    free(vmdef->init);
-    free(vmdef->tty);
-    free(vmdef);
+    VIR_FREE(vmdef->name);
+    VIR_FREE(vmdef->init);
+    VIR_FREE(vmdef->tty);
+    VIR_FREE(vmdef);
 }
 
 void lxcFreeVMs(lxc_vm_t *vms)
@@ -769,8 +766,8 @@
 void lxcFreeVM(lxc_vm_t *vm)
 {
     lxcFreeVMDef(vm->def);
-    free(vm->containerTty);
-    free(vm);
+    VIR_FREE(vm->containerTty);
+    VIR_FREE(vm);
 }
 
 lxc_vm_t *lxcFindVMByID(const lxc_driver_t *driver, int id)
diff -r ff6b92c70738 src/lxc_container.c
--- a/src/lxc_container.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/lxc_container.c	Fri May 30 10:55:44 2008 -0400
@@ -35,6 +35,7 @@
 #include "lxc_container.h"
 #include "lxc_conf.h"
 #include "util.h"
+#include "memory.h"
 
 #define DEBUG(fmt,...) VIR_DEBUG(__FILE__, fmt, __VA_ARGS__)
 #define DEBUG0(msg) VIR_DEBUG(__FILE__, "%s", msg)
@@ -54,8 +55,8 @@
     char* execString;
     size_t execStringLen = strlen(vmDef->init) + 1 + 5;
 
-    if (NULL == (execString = calloc(execStringLen, sizeof(char)))) {
-       lxcError(NULL, NULL, VIR_ERR_NO_MEMORY,
+    if (VIR_ALLOC_N(execString, execStringLen) < 0) {
+        lxcError(NULL, NULL, VIR_ERR_NO_MEMORY,
                  _("failed to calloc memory for init string: %s"),
                  strerror(errno));
         goto error_out;
diff -r ff6b92c70738 src/lxc_driver.c
--- a/src/lxc_driver.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/lxc_driver.c	Fri May 30 10:55:44 2008 -0400
@@ -42,6 +42,7 @@
 #include "driver.h"
 #include "internal.h"
 #include "util.h"
+#include "memory.h"
 
 /* debug macros */
 #define DEBUG(fmt,...) VIR_DEBUG(__FILE__, fmt, __VA_ARGS__)
@@ -85,8 +86,7 @@
     char *stack;
     int childStatus;
 
-    stack = malloc(getpagesize() * 4);
-    if(!stack) {
+    if (VIR_ALLOC_N(stack, getpagesize() * 4) < 0) {
         DEBUG0("Unable to allocate stack");
         rc = -1;
         goto check_complete;
@@ -102,7 +102,7 @@
         waitpid(cpid, &childStatus, 0);
     }
 
-    free(stack);
+    VIR_FREE(stack);
 
 check_complete:
     return rc;
@@ -263,7 +263,7 @@
 
  cleanup:
     for (i = 0 ; i < numDoms ; i++) {
-        free(names[i]);
+        VIR_FREE(names[i]);
     }
 
     return -1;
@@ -398,16 +398,15 @@
     int rc = -1;
     int flags;
     int stacksize = getpagesize() * 4;
-    void *stack, *stacktop;
+    char *stack, *stacktop;
 
     /* allocate a stack for the container */
-    stack = malloc(stacksize);
-    if (!stack) {
+    if (VIR_ALLOC_N(stack, stacksize) < 0) {
         lxcError(conn, NULL, VIR_ERR_NO_MEMORY,
                  _("unable to allocate container stack"));
         goto error_exit;
     }
-    stacktop = (char*)stack + stacksize;
+    stacktop = stack + stacksize;
 
     flags = CLONE_NEWPID|CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWUSER|CLONE_NEWIPC|SIGCHLD;
 
@@ -572,8 +571,7 @@
         goto cleanup;
     }
 
-    *ttyName = malloc(sizeof(char) * (strlen(tempTtyName) + 1));
-    if (NULL == ttyName) {
+    if (VIR_ALLOC_N(*ttyName, strlen(tempTtyName) + 1) < 0) {
         lxcError(conn, NULL, VIR_ERR_NO_MEMORY,
                  _("unable to allocate container name string"));
         goto cleanup;
@@ -1034,8 +1032,7 @@
         return -1;
     }
 
-    lxc_driver = calloc(1, sizeof(lxc_driver_t));
-    if (NULL == lxc_driver) {
+    if (VIR_ALLOC(lxc_driver) < 0) {
         return -1;
     }
 
@@ -1062,8 +1059,8 @@
 
 static void lxcFreeDriver(lxc_driver_t *driver)
 {
-    free(driver->configDir);
-    free(driver);
+    VIR_FREE(driver->configDir);
+    VIR_FREE(driver);
 }
 
 static int lxcShutdown(void)
diff -r ff6b92c70738 src/openvz_conf.c
--- a/src/openvz_conf.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/openvz_conf.c	Fri May 30 10:55:44 2008 -0400
@@ -53,6 +53,7 @@
 #include "openvz_conf.h"
 #include "uuid.h"
 #include "buf.h"
+#include "memory.h"
 
 #include <string.h>
 
@@ -152,23 +153,22 @@
             struct ovz_quota *prev = quota;
 
             quota = quota->next;
-            free(prev);
+            VIR_FREE(prev);
         }
         while (ip) {
             struct ovz_ip *prev = ip;
 
             ip = ip->next;
-            free(prev);
+            VIR_FREE(prev);
         }
         while (ns) {
             struct ovz_ns *prev = ns;
 
             ns = ns->next;
-            free(prev);
+            VIR_FREE(prev);
         }
 
-        free(def);
-        def = NULL;
+        VIR_FREE(def);
     }
 }
 
@@ -201,8 +201,7 @@
     }
     if (vms) {
         openvzFreeVMDef(vm->vmdef);
-        free(vm);
-        vm = NULL;
+        VIR_FREE(vm);
     }
 }
 
@@ -217,8 +216,7 @@
     if (driver->vms)
         for(next = driver->vms->next; driver->vms; driver->vms = next)
             openvzFreeVM(driver, driver->vms, 0);
-    free(driver);
-    driver = NULL;
+    VIR_FREE(driver);
 }
 
 struct openvz_vm *
@@ -247,7 +245,7 @@
         return vm;
     }
 
-    if (!(vm = calloc(1, sizeof(*vm)))) {
+    if (VIR_ALLOC(vm) < 0) {
         openvzFreeVMDef(def);
         error(conn, VIR_ERR_NO_MEMORY, "vm");
         return NULL;
@@ -299,7 +297,7 @@
     struct ovz_ip *ovzIp;
     struct ovz_ns *ovzNs;
 
-    if (!(def = calloc(1, sizeof(*def)))) {
+    if (VIR_ALLOC(def) < 0) {
         error(conn, VIR_ERR_NO_MEMORY, "xmlXPathContext");
         return NULL;
     }
@@ -328,8 +326,7 @@
         error(conn, VIR_ERR_INTERNAL_ERROR, _("invalid domain type attribute"));
         goto bail_out;
     }
-    free(prop);
-    prop = NULL;
+    VIR_FREE(prop);
 
     /* Extract domain name */
     obj = xmlXPathEval(BAD_CAST "string(/domain/name[1])", ctxt);
@@ -396,7 +393,7 @@
         error(conn, VIR_ERR_INTERNAL_ERROR, errorMessage);
         goto bail_out;
     }
-    if (!(ovzIp = calloc(1, sizeof(*ovzIp)))) {
+    if (VIR_ALLOC(ovzIp) < 0) {
         openvzLog(OPENVZ_ERR,
                   _("Failed to Create Memory for 'ovz_ip' structure"));
         goto bail_out;
@@ -478,7 +475,7 @@
         error(conn, VIR_ERR_INTERNAL_ERROR, errorMessage);
         goto bail_out;
     }
-    if (!(ovzNs = calloc(1, sizeof(*ovzNs)))) {
+    if (VIR_ALLOC(ovzNs) < 0) {
         openvzLog(OPENVZ_ERR,
                   _("Failed to Create Memory for 'ovz_ns' structure"));
         goto bail_out;
@@ -509,7 +506,7 @@
     return def;
 
  bail_out:
-    free(prop);
+    VIR_FREE(prop);
     xmlXPathFreeObject(obj);
     xmlXPathFreeContext(ctxt);
     openvzFreeVMDef(def);
@@ -539,8 +536,7 @@
     }
     pnext = &vm;
     while(!feof(fp)) {
-        *pnext = calloc(1, sizeof(**pnext));
-        if(!*pnext) {
+        if (VIR_ALLOC(*pnext) < 0) {
             error(conn, VIR_ERR_INTERNAL_ERROR, _("calloc failed"));
             goto error;
         }
@@ -568,8 +564,7 @@
             (*pnext)->vpsid = -1;
         }
 
-        vmdef = calloc(1, sizeof(*vmdef));
-        if(!vmdef) {
+        if (VIR_ALLOC(vmdef) < 0) {
             error(conn, VIR_ERR_INTERNAL_ERROR, _("calloc failed"));
             goto error;
         }
@@ -581,7 +576,7 @@
         if(ret == -1) {
             error(conn, VIR_ERR_INTERNAL_ERROR,
                   _("UUID in config file malformed"));
-            free(vmdef);
+            VIR_FREE(vmdef);
             goto error;
         }
 
@@ -594,8 +589,8 @@
         struct openvz_vm *next;
 
         next = vm->next;
-        free(vm->vmdef);
-        free(vm);
+        VIR_FREE(vm->vmdef);
+        VIR_FREE(vm);
         vm = next;
     }
     return NULL;
@@ -656,7 +651,7 @@
     if (conf_dir == NULL)
         return -1;
     sprintf(conf_file, "%s/%d.conf", conf_dir, vpsid);
-    free(conf_dir);
+    VIR_FREE(conf_dir);
 
     fd = open(conf_file, O_RDWR);
     if(fd == -1)
@@ -697,7 +692,7 @@
     if (conf_dir == NULL)
         return -1;
     sprintf(conf_file, "%s/%d.conf", conf_dir, vpsid);
-    free(conf_dir);
+    VIR_FREE(conf_dir);
 
     if (openvzGetVPSUUID(vpsid, uuidstr))
         return -1;
@@ -741,7 +736,7 @@
 
     dp = opendir(conf_dir);
     if(dp == NULL) {
-        free(conf_dir);
+        VIR_FREE(conf_dir);
         return 0;
     }
 
@@ -753,7 +748,7 @@
             openvzSetUUID(vpsid);
     }
     closedir(dp);
-    free(conf_dir);
+    VIR_FREE(conf_dir);
     return 0;
 }
 
diff -r ff6b92c70738 src/openvz_driver.c
--- a/src/openvz_driver.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/openvz_driver.c	Fri May 30 10:55:44 2008 -0400
@@ -49,8 +49,7 @@
 #include <stdio.h>
 #include <sys/wait.h>
 
-#include "libvirt/virterror.h"
-
+#include "internal.h"
 #include "openvz_driver.h"
 #include "event.h"
 #include "buf.h"
diff -r ff6b92c70738 src/proxy_internal.c
--- a/src/proxy_internal.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/proxy_internal.c	Fri May 30 10:55:44 2008 -0400
@@ -28,6 +28,7 @@
 #include "proxy_internal.h"
 #include "util.h"
 #include "xen_unified.h"
+#include "memory.h"
 
 #define STANDALONE
 
@@ -992,8 +993,7 @@
     }
 
     xmllen = ans.len - sizeof (virProxyPacket);
-    xml = malloc (xmllen+1);
-    if (!xml) {
+    if (VIR_ALLOC_N(xml, xmllen+1) < 0) {
         virProxyError (conn, VIR_ERR_NO_MEMORY, __FUNCTION__);
         return NULL;
     }
@@ -1044,7 +1044,7 @@
         return (NULL);
     }
     xmllen = ans.len - sizeof(virProxyPacket);
-    if (!(xml = malloc(xmllen+1))) {
+    if (VIR_ALLOC_N(xml, xmllen+1) < 0) {
         virProxyError(domain->conn, VIR_ERR_NO_MEMORY, __FUNCTION__);
         return NULL;
     }
@@ -1097,7 +1097,7 @@
         return (NULL);
     }
     oslen = ans.len - sizeof(virProxyPacket);
-    if (!(ostype = malloc(oslen+1))) {
+    if (VIR_ALLOC_N(ostype, oslen+1) < 0) {
         virProxyError(domain->conn, VIR_ERR_NO_MEMORY, __FUNCTION__);
         return NULL;
     }
diff -r ff6b92c70738 src/remote_internal.c
--- a/src/remote_internal.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/remote_internal.c	Fri May 30 10:55:44 2008 -0400
@@ -71,6 +71,7 @@
 #include "qparams.h"
 #include "remote_internal.h"
 #include "remote_protocol.h"
+#include "memory.h"
 
 #define DEBUG(fmt,...) VIR_DEBUG(__FILE__, fmt,__VA_ARGS__)
 #define DEBUG0(msg) VIR_DEBUG(__FILE__, "%s", msg)
@@ -638,8 +639,7 @@
 
         // Generate the final command argv[] array.
         //   ssh -p $port [-l $username] $hostname $netcat -U $sockname [NULL]
-        cmd_argv = malloc (nr_args * sizeof (*cmd_argv));
-        if (cmd_argv == NULL) {
+        if (VIR_ALLOC_N(cmd_argv, nr_args) < 0) {
             error (conn, VIR_ERR_SYSTEM_ERROR, strerror (errno));
             goto failed;
         }
@@ -702,8 +702,7 @@
 
             // Run the external process.
             if (!cmd_argv) {
-                cmd_argv = malloc (2 * sizeof (*cmd_argv));
-                if (cmd_argv == NULL) {
+                if (VIR_ALLOC_N(cmd_argv, 2) < 0) {
                     error (conn, VIR_ERR_SYSTEM_ERROR, strerror (errno));
                     goto failed;
                 }
@@ -811,8 +810,7 @@
     if (inside_daemon)
         return VIR_DRV_OPEN_DECLINED;
 
-    priv = calloc (1, sizeof(*priv));
-    if (!priv) {
+    if (VIR_ALLOC(priv) < 0) {
         error (conn, VIR_ERR_NO_MEMORY, _("struct private_data"));
         return VIR_DRV_OPEN_ERROR;
     }
@@ -856,7 +854,7 @@
     ret = doRemoteOpen(conn, priv, uri, auth, rflags);
     if (ret != VIR_DRV_OPEN_SUCCESS) {
         conn->privateData = NULL;
-        free(priv);
+        VIR_FREE(priv);
     } else {
         priv->magic = MAGIC;
         conn->privateData = priv;
@@ -2268,9 +2266,7 @@
 
     /* Serialise the scheduler parameters. */
     args.params.params_len = nparams;
-    args.params.params_val = malloc (sizeof (*args.params.params_val)
-                                     * nparams);
-    if (args.params.params_val == NULL) {
+    if (VIR_ALLOC_N(args.params.params_val, nparams) < 0) {
         error (domain->conn, VIR_ERR_RPC, _("out of memory allocating array"));
         return -1;
     }
@@ -2400,9 +2396,9 @@
          * use the UNIX transport. This handles Xen driver
          * which doesn't have its own impl of the network APIs.
          */
-        struct private_data *priv = calloc (1, sizeof(*priv));
+        struct private_data *priv;
         int ret, rflags = 0;
-        if (!priv) {
+        if (VIR_ALLOC(priv) < 0) {
             error (conn, VIR_ERR_NO_MEMORY, _("struct private_data"));
             return VIR_DRV_OPEN_ERROR;
         }
@@ -2415,7 +2411,7 @@
         ret = doRemoteOpen(conn, priv, uri, auth, rflags);
         if (ret != VIR_DRV_OPEN_SUCCESS) {
             conn->networkPrivateData = NULL;
-            free(priv);
+            VIR_FREE(priv);
         } else {
             priv->magic = MAGIC;
             priv->localUses = 1;
@@ -2434,7 +2430,7 @@
         priv->localUses--;
         if (!priv->localUses) {
             ret = doRemoteClose(conn, priv);
-            free(priv);
+            VIR_FREE(priv);
             conn->networkPrivateData = NULL;
         }
     }
@@ -2806,9 +2802,9 @@
          * use the UNIX transport. This handles Xen driver
          * which doesn't have its own impl of the network APIs.
          */
-        struct private_data *priv = calloc (1, sizeof(struct private_data));
+        struct private_data *priv;
         int ret, rflags = 0;
-        if (!priv) {
+        if (VIR_ALLOC(priv) < 0) {
             error (NULL, VIR_ERR_NO_MEMORY, _("struct private_data"));
             return VIR_DRV_OPEN_ERROR;
         }
@@ -2821,7 +2817,7 @@
         ret = doRemoteOpen(conn, priv, uri, auth, rflags);
         if (ret != VIR_DRV_OPEN_SUCCESS) {
             conn->storagePrivateData = NULL;
-            free(priv);
+            VIR_FREE(priv);
         } else {
             priv->magic = MAGIC;
             priv->localUses = 1;
@@ -2840,7 +2836,7 @@
         priv->localUses--;
         if (!priv->localUses) {
             ret = doRemoteClose(conn, priv);
-            free(priv);
+            VIR_FREE(priv);
             conn->storagePrivateData = NULL;
         }
     }
@@ -3559,7 +3555,7 @@
             mech = authtype + 5;
 
         if (remoteAuthSASL(conn, priv, in_open, auth, mech) < 0) {
-            free(ret.types.types_val);
+            VIR_FREE(ret.types.types_val);
             return -1;
         }
         break;
@@ -3569,7 +3565,7 @@
 #if HAVE_POLKIT
     case REMOTE_AUTH_POLKIT:
         if (remoteAuthPolkit(conn, priv, in_open, auth) < 0) {
-            free(ret.types.types_val);
+            VIR_FREE(ret.types.types_val);
             return -1;
         }
         break;
@@ -3585,11 +3581,11 @@
                          NULL, NULL, NULL, 0, 0,
                          _("unsupported authentication type %d"),
                          ret.types.types_val[0]);
-        free(ret.types.types_val);
-        return -1;
-    }
-
-    free(ret.types.types_val);
+        VIR_FREE(ret.types.types_val);
+        return -1;
+    }
+
+    VIR_FREE(ret.types.types_val);
 
     return 0;
 }
@@ -3618,8 +3614,7 @@
         return NULL;
     }
 
-    addr = malloc(strlen(host) + 1 + strlen(port) + 1);
-    if (!addr) {
+    if (VIR_ALLOC_N(addr, strlen(host) + 1 + strlen(port) + 1) < 0) {
         __virRaiseError (NULL, NULL, NULL, VIR_FROM_REMOTE,
                          VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
                          NULL, NULL, NULL, 0, 0,
@@ -3712,9 +3707,9 @@
  */
 static sasl_callback_t *remoteAuthMakeCallbacks(int *credtype, int ncredtype)
 {
-    sasl_callback_t *cbs = calloc(ncredtype+1, sizeof (*cbs));
+    sasl_callback_t *cbs;
     int i, n;
-    if (!cbs) {
+    if (VIR_ALLOC_N(cbs, ncredtype+1) < 0) {
         return NULL;
     }
 
@@ -3749,14 +3744,13 @@
     for (ninteract = 0 ; interact[ninteract].id != 0 ; ninteract++)
         ; /* empty */
 
-    *cred = calloc(ninteract, sizeof(*cred));
-    if (!*cred)
+    if (VIR_ALLOC_N(*cred, ninteract) < 0)
         return -1;
 
     for (ninteract = 0 ; interact[ninteract].id != 0 ; ninteract++) {
         (*cred)[ninteract].type = remoteAuthCredSASL2Vir(interact[ninteract].id);
         if (!(*cred)[ninteract].type) {
-            free(*cred);
+            VIR_FREE(*cred);
             return -1;
         }
         if (interact[ninteract].challenge)
@@ -3775,8 +3769,8 @@
 {
     int i;
     for (i = 0 ; i < ncred ; i++)
-        free(cred[i].result);
-    free(cred);
+        VIR_FREE(cred[i].result);
+    VIR_FREE(cred);
 }
 
 
@@ -3944,7 +3938,7 @@
                              NULL, NULL, NULL, 0, 0,
                              _("SASL mechanism %s not supported by server"),
                              wantmech);
-            free(iret.mechlist);
+            VIR_FREE(iret.mechlist);
             goto cleanup;
         }
         mechlist = wantmech;
@@ -3963,7 +3957,7 @@
                          VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
                          _("Failed to start SASL negotiation: %d (%s)"),
                          err, sasl_errdetail(saslconn));
-        free(iret.mechlist);
+        VIR_FREE(iret.mechlist);
         goto cleanup;
     }
 
@@ -3980,7 +3974,7 @@
                              VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR,
                              NULL, NULL, NULL, 0, 0,
                              "%s", _("Failed to make auth credentials"));
-            free(iret.mechlist);
+            VIR_FREE(iret.mechlist);
             goto cleanup;
         }
         /* Run the authentication callback */
@@ -3998,7 +3992,7 @@
                          0, 0, "%s", msg);
         goto cleanup;
     }
-    free(iret.mechlist);
+    VIR_FREE(iret.mechlist);
 
     if (clientoutlen > REMOTE_AUTH_SASL_DATA_MAX) {
         __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
@@ -4077,8 +4071,7 @@
         }
 
         if (serverin) {
-            free(serverin);
-            serverin = NULL;
+            VIR_FREE(serverin);
         }
         DEBUG("Client step result %d. Data %d bytes %p", err, clientoutlen, clientout);
 
@@ -4110,7 +4103,7 @@
 
         /* This server call shows complete, and earlier client step was OK */
         if (complete && err == SASL_OK) {
-            free(serverin);
+            VIR_FREE(serverin);
             break;
         }
     }
@@ -4140,11 +4133,11 @@
     ret = 0;
 
  cleanup:
-    free(localAddr);
-    free(remoteAddr);
-    free(serverin);
-
-    free(saslcb);
+    VIR_FREE(localAddr);
+    VIR_FREE(remoteAddr);
+    VIR_FREE(serverin);
+
+    VIR_FREE(saslcb);
     remoteAuthFreeCredentials(cred, ncred);
     if (ret != 0 && saslconn)
         sasl_dispose(&saslconn);
diff -r ff6b92c70738 src/sexpr.c
--- a/src/sexpr.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/sexpr.c	Fri May 30 10:55:44 2008 -0400
@@ -21,6 +21,7 @@
 #include "internal.h"
 #include "sexpr.h"
 #include "util.h"
+#include "memory.h"
 
 /**
  * virSexprError:
@@ -55,8 +56,7 @@
 {
     struct sexpr *ret;
 
-    ret = (struct sexpr *) malloc(sizeof(*ret));
-    if (ret == NULL) {
+    if (VIR_ALLOC(ret) < 0) {
         virSexprError(VIR_ERR_NO_MEMORY, _("failed to allocate a node"));
         return (NULL);
     }
@@ -85,13 +85,13 @@
             sexpr_free(sexpr->u.s.cdr);
             break;
         case SEXPR_VALUE:
-            free(sexpr->u.value);
+            VIR_FREE(sexpr->u.value);
             break;
         case SEXPR_NIL:
             break;
     }
 
-    free(sexpr);
+    VIR_FREE(sexpr);
 
     errno = serrno;
 }
@@ -171,16 +171,23 @@
  *
  * Internal operation appending a value at the end of an existing list
  */
-static void
+static int
 append(struct sexpr *lst, const struct sexpr *value)
 {
+    struct sexpr *nil = sexpr_nil();
+
+    if (nil == NULL)
+        return -1;
+
     while (lst->kind != SEXPR_NIL) {
         lst = lst->u.s.cdr;
     }
 
     lst->kind = SEXPR_CONS;
     lst->u.s.car = (struct sexpr *) value;
-    lst->u.s.cdr = sexpr_nil();
+    lst->u.s.cdr = nil;
+
+    return 0;
 }
 
 /**
@@ -198,7 +205,8 @@
         return (NULL);
     if (value == NULL)
         return (lst);
-    append(lst, value);
+    if (append(lst, value) < 0)
+        return (NULL);
     return (lst);
 }
 
@@ -318,8 +326,11 @@
 
             tmp = _string2sexpr(ptr, &tmp_len);
             if (tmp == NULL)
-                return NULL;
-            append(ret, tmp);
+                goto error;
+            if (append(ret, tmp) < 0) {
+                sexpr_free(tmp);
+                goto error;
+            }
 #if 0
             if (0) {
                 char buf[4096];
@@ -351,6 +362,7 @@
             if (ret->u.value == NULL) {
                 virSexprError(VIR_ERR_NO_MEMORY,
                               _("failed to copy a string"));
+                goto error;
             }
 
             if (*ptr == '\'')
@@ -367,6 +379,7 @@
             if (ret->u.value == NULL) {
                 virSexprError(VIR_ERR_NO_MEMORY,
                               _("failed to copy a string"));
+                goto error;
             }
         }
 
diff -r ff6b92c70738 src/storage_backend.c
--- a/src/storage_backend.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/storage_backend.c	Fri May 30 10:55:44 2008 -0400
@@ -50,6 +50,7 @@
 #endif
 
 #include "util.h"
+#include "memory.h"
 
 #include "storage_backend.h"
 #include "storage_backend_fs.h"
@@ -237,8 +238,7 @@
     vol->target.perms.uid = sb.st_uid;
     vol->target.perms.gid = sb.st_gid;
 
-    free(vol->target.perms.label);
-    vol->target.perms.label = NULL;
+    VIR_FREE(vol->target.perms.label);
 
 #if HAVE_SELINUX
     if (fgetfilecon(fd, &filecon) == -1) {
@@ -310,9 +310,8 @@
         if (dent->d_name[0] == '.')
             continue;
 
-        stablepath = malloc(strlen(pool->def->target.path) +
-                            1 + strlen(dent->d_name) + 1);
-        if (stablepath == NULL) {
+        if (VIR_ALLOC_N(stablepath, strlen(pool->def->target.path) +
+                        1 + strlen(dent->d_name) + 1) < 0) {
             virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("path"));
             closedir(dh);
             return NULL;
@@ -327,7 +326,7 @@
             return stablepath;
         }
 
-        free(stablepath);
+        VIR_FREE(stablepath);
     }
 
     closedir(dh);
@@ -365,7 +364,7 @@
     char **groups;
 
     /* Compile all regular expressions */
-    if ((reg = calloc(nregex, sizeof(*reg))) == NULL) {
+    if (VIR_ALLOC_N(reg, nregex) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("regex"));
         return -1;
     }
@@ -379,7 +378,7 @@
                                   _("Failed to compile regex %s"), error);
             for (j = 0 ; j <= i ; j++)
                 regfree(&reg[j]);
-            free(reg);
+            VIR_FREE(reg);
             return -1;
         }
 
@@ -390,12 +389,12 @@
     }
 
     /* Storage for matched variables */
-    if ((groups = calloc(totgroups, sizeof(*groups))) == NULL) {
+    if (VIR_ALLOC_N(groups, totgroups) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                               "%s", _("regex groups"));
         goto cleanup;
     }
-    if ((vars = calloc(maxvars+1, sizeof(*vars))) == NULL) {
+    if (VIR_ALLOC_N(vars, maxvars+1) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                               "%s", _("regex groups"));
         goto cleanup;
@@ -445,7 +444,7 @@
 
                     /* Release matches & restart to matching the first regex */
                     for (j = 0 ; j < totgroups ; j++) {
-                        free(groups[j]);
+                        VIR_FREE(groups[j]);
                         groups[j] = NULL;
                     }
                     maxReg = 0;
@@ -460,15 +459,15 @@
  cleanup:
     if (groups) {
         for (j = 0 ; j < totgroups ; j++)
-            free(groups[j]);
-        free(groups);
+            VIR_FREE(groups[j]);
+        VIR_FREE(groups);
     }
-    free(vars);
+    VIR_FREE(vars);
 
     for (i = 0 ; i < nregex ; i++)
         regfree(&reg[i]);
 
-    free(reg);
+    VIR_FREE(reg);
 
     if (list)
         fclose(list);
@@ -534,8 +533,7 @@
     if (n_columns == 0)
         return -1;
 
-    if (n_columns > SIZE_MAX / sizeof *v
-        || (v = malloc (n_columns * sizeof *v)) == NULL) {
+    if (VIR_ALLOC_N(v, n_columns) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                               "%s", _("n_columns too large"));
         return -1;
diff -r ff6b92c70738 src/storage_backend_disk.c
--- a/src/storage_backend_disk.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/storage_backend_disk.c	Fri May 30 10:55:44 2008 -0400
@@ -26,6 +26,7 @@
 #include "internal.h"
 #include "storage_backend_disk.h"
 #include "util.h"
+#include "memory.h"
 
 enum {
     VIR_STORAGE_POOL_DISK_DOS = 0,
@@ -174,7 +175,7 @@
     char *tmp, *devpath;
 
     if (vol == NULL) {
-        if ((vol = calloc(1, sizeof(virStorageVolDef))) == NULL) {
+        if (VIR_ALLOC(vol) < 0) {
             virStorageReportError(conn, VIR_ERR_NO_MEMORY, _("volume"));
             return -1;
         }
@@ -211,8 +212,7 @@
             return -1;
 
         if (devpath != vol->target.path)
-            free(devpath);
-        devpath = NULL;
+            VIR_FREE(devpath);
     }
 
     if (vol->key == NULL) {
@@ -224,8 +224,7 @@
     }
 
     if (vol->source.extents == NULL) {
-        if ((vol->source.extents =
-             calloc(1, sizeof(*(vol->source.extents)))) == NULL) {
+        if (VIR_ALLOC(vol->source.extents) < 0) {
             virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                                   _("volume extents"));
             return -1;
@@ -275,16 +274,15 @@
                                     virStoragePoolObjPtr pool,
                                     char **const groups)
 {
-    virStoragePoolSourceDeviceExtentPtr tmp;
     virStoragePoolSourceDevicePtr dev = &pool->def->source.devices[0];
 
-    if ((tmp = realloc(dev->freeExtents,
-                       sizeof(*tmp) * (dev->nfreeExtent+1))) == NULL)
+    if (VIR_REALLOC_N(dev->freeExtents,
+                      dev->nfreeExtent + 1) < 0)
         return -1;
-    dev->freeExtents = tmp;
 
     memset(dev->freeExtents +
-           dev->nfreeExtent, 0, sizeof(*tmp));
+           dev->nfreeExtent, 0,
+           sizeof(dev->freeExtents[0]));
 
     if (virStrToLong_ull(groups[3], NULL, 10,
                          &dev->freeExtents[dev->nfreeExtent].start) < 0)
@@ -388,9 +386,8 @@
 virStorageBackendDiskRefreshPool(virConnectPtr conn,
                                  virStoragePoolObjPtr pool)
 {
-    free(pool->def->source.devices[0].freeExtents);
+    VIR_FREE(pool->def->source.devices[0].freeExtents);
     pool->def->source.devices[0].nfreeExtent = 0;
-    pool->def->source.devices[0].freeExtents = NULL;
 
     return virStorageBackendDiskReadPartitions(conn, pool, NULL);
 }
@@ -476,9 +473,8 @@
         return -1;
 
     /* Blow away free extent info, as we're about to re-populate it */
-    free(pool->def->source.devices[0].freeExtents);
+    VIR_FREE(pool->def->source.devices[0].freeExtents);
     pool->def->source.devices[0].nfreeExtent = 0;
-    pool->def->source.devices[0].freeExtents = NULL;
 
     /* Fetch actual extent info */
     if (virStorageBackendDiskReadPartitions(conn, pool, vol) < 0)
diff -r ff6b92c70738 src/storage_backend_fs.c
--- a/src/storage_backend_fs.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/storage_backend_fs.c	Fri May 30 10:55:44 2008 -0400
@@ -40,8 +40,7 @@
 #include "storage_backend_fs.h"
 #include "storage_conf.h"
 #include "util.h"
-#include "config.h"
-
+#include "memory.h"
 
 enum {
     VIR_STORAGE_POOL_FS_AUTO = 0,
@@ -530,25 +529,27 @@
     }
 
     if (pool->def->type == VIR_STORAGE_POOL_NETFS) {
-        src = malloc(strlen(pool->def->source.host.name) +
-                     1 + strlen(pool->def->source.dir) + 1);
+        if (VIR_ALLOC_N(src, strlen(pool->def->source.host.name) +
+                        1 + strlen(pool->def->source.dir) + 1) < 0) {
+            virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("source"));
+            return -1;
+        }
         strcpy(src, pool->def->source.host.name);
         strcat(src, ":");
         strcat(src, pool->def->source.dir);
     } else {
-        src = strdup(pool->def->source.devices[0].path);
-    }
-    if (src == NULL) {
-        virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("source"));
-        return -1;
+        if ((src = strdup(pool->def->source.devices[0].path)) == NULL) {
+            virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("source"));
+            return -1;
+        }
     }
     mntargv[3] = src;
 
     if (virRun(conn, (char**)mntargv, NULL) < 0) {
-        free(src);
+        VIR_FREE(src);
         return -1;
     }
-    free(src);
+    VIR_FREE(src);
     return 0;
 }
 
@@ -679,8 +680,7 @@
         virStorageVolDefPtr vol;
         int ret;
 
-        vol = calloc(1, sizeof(virStorageVolDef));
-        if (vol == NULL) {
+        if (VIR_ALLOC(vol) < 0) {
             virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                                   "%s", _("volume"));
             goto cleanup;
@@ -688,18 +688,17 @@
 
         vol->name = strdup(ent->d_name);
         if (vol->name == NULL) {
-            free(vol);
+            VIR_FREE(vol);
             virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                                   "%s", _("volume name"));
             goto cleanup;
         }
 
         vol->target.format = VIR_STORAGE_VOL_RAW; /* Real value is filled in during probe */
-        vol->target.path = malloc(strlen(pool->def->target.path) +
-                                  1 + strlen(vol->name) + 1);
-        if (vol->target.path == NULL) {
-            free(vol->target.path);
-            free(vol);
+        if (VIR_ALLOC_N(vol->target.path, strlen(pool->def->target.path) +
+                        1 + strlen(vol->name) + 1) < 0) {
+            VIR_FREE(vol->target.path);
+            VIR_FREE(vol);
             virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                                   "%s", _("volume name"));
             goto cleanup;
@@ -708,19 +707,19 @@
         strcat(vol->target.path, "/");
         strcat(vol->target.path, vol->name);
         if ((vol->key = strdup(vol->target.path)) == NULL) {
-            free(vol->name);
-            free(vol->target.path);
-            free(vol);
+            VIR_FREE(vol->name);
+            VIR_FREE(vol->target.path);
+            VIR_FREE(vol);
             virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                                   "%s", _("volume key"));
             goto cleanup;
         }
 
         if ((ret = virStorageBackendProbeFile(conn, vol) < 0)) {
-            free(vol->key);
-            free(vol->name);
-            free(vol->target.path);
-            free(vol);
+            VIR_FREE(vol->key);
+            VIR_FREE(vol->name);
+            VIR_FREE(vol->target.path);
+            VIR_FREE(vol);
             if (ret == -1)
                 goto cleanup;
             else
@@ -821,9 +820,8 @@
 {
     int fd;
 
-    vol->target.path = malloc(strlen(pool->def->target.path) +
-                              1 + strlen(vol->name) + 1);
-    if (vol->target.path == NULL) {
+    if (VIR_ALLOC_N(vol->target.path, strlen(pool->def->target.path) +
+                    1 + strlen(vol->name) + 1) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("target"));
         return -1;
     }
diff -r ff6b92c70738 src/storage_backend_iscsi.c
--- a/src/storage_backend_iscsi.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/storage_backend_iscsi.c	Fri May 30 10:55:44 2008 -0400
@@ -37,6 +37,7 @@
 #include "internal.h"
 #include "storage_backend_iscsi.h"
 #include "util.h"
+#include "memory.h"
 
 static int
 virStorageBackendISCSITargetIP(virConnectPtr conn,
@@ -253,7 +254,7 @@
 
     snprintf(lunid, sizeof(lunid)-1, "lun-%s", groups[3]);
 
-    if ((vol = calloc(1, sizeof(virStorageVolDef))) == NULL) {
+    if (VIR_ALLOC(vol) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("volume"));
         goto cleanup;
     }
@@ -263,14 +264,13 @@
         goto cleanup;
     }
 
-    if ((devpath = malloc(5 + strlen(dev) + 1)) == NULL) {
+    if (VIR_ALLOC_N(devpath, 5 + strlen(dev) + 1) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("devpath"));
         goto cleanup;
     }
     strcpy(devpath, "/dev/");
     strcat(devpath, dev);
-    free(dev);
-    dev = NULL;
+    VIR_FREE(dev);
     /* It can take a little while between logging into the ISCSI
      * server and udev creating the /dev nodes, so if we get ENOENT
      * we must retry a few times - they should eventually appear.
@@ -303,8 +303,7 @@
         goto cleanup;
 
     if (devpath != vol->target.path)
-        free(devpath);
-    devpath = NULL;
+        VIR_FREE(devpath);
 
     if (virStorageBackendUpdateVolInfoFD(conn, vol, fd, 1) < 0)
         goto cleanup;
@@ -330,9 +329,9 @@
 
  cleanup:
     if (fd != -1) close(fd);
-    free(devpath);
+    VIR_FREE(devpath);
     virStorageVolDefFree(vol);
-    free(dev);
+    VIR_FREE(dev);
     return -1;
 }
 
@@ -422,8 +421,7 @@
                                        ipaddr, sizeof(ipaddr)) < 0)
         return NULL;
 
-    portal = malloc(strlen(ipaddr) + 1 + 4 + 2 + 1);
-    if (portal == NULL) {
+    if (VIR_ALLOC_N(portal, strlen(ipaddr) + 1 + 4 + 2 + 1) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("portal"));
         return NULL;
     }
@@ -457,10 +455,10 @@
     if ((portal = virStorageBackendISCSIPortal(conn, pool)) == NULL)
         return -1;
     if (virStorageBackendISCSILogin(conn, pool, portal) < 0) {
-        free(portal);
+        VIR_FREE(portal);
         return -1;
     }
-    free(portal);
+    VIR_FREE(portal);
     return 0;
 }
 
@@ -478,12 +476,12 @@
         goto cleanup;
     if (virStorageBackendISCSIFindLUNs(conn, pool, session) < 0)
         goto cleanup;
-    free(session);
+    VIR_FREE(session);
 
     return 0;
 
  cleanup:
-    free(session);
+    VIR_FREE(session);
     return -1;
 }
 
@@ -498,10 +496,10 @@
         return -1;
 
     if (virStorageBackendISCSILogout(conn, pool, portal) < 0) {
-        free(portal);
+        VIR_FREE(portal);
         return -1;
     }
-    free(portal);
+    VIR_FREE(portal);
 
     return 0;
 }
diff -r ff6b92c70738 src/storage_backend_logical.c
--- a/src/storage_backend_logical.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/storage_backend_logical.c	Fri May 30 10:55:44 2008 -0400
@@ -35,7 +35,7 @@
 #include "storage_backend_logical.h"
 #include "storage_conf.h"
 #include "util.h"
-
+#include "memory.h"
 
 #define PV_BLANK_SECTOR_SIZE 512
 
@@ -97,7 +97,6 @@
                                 void *data)
 {
     virStorageVolDefPtr vol = NULL;
-    virStorageVolSourceExtentPtr tmp;
     unsigned long long offset, size, length;
 
     /* See if we're only looking for a specific volume */
@@ -113,7 +112,7 @@
 
     /* Or a completely new volume */
     if (vol == NULL) {
-        if ((vol = calloc(1, sizeof(*vol))) == NULL) {
+        if (VIR_ALLOC(vol) < 0) {
             virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("volume"));
             return -1;
         }
@@ -129,8 +128,8 @@
     }
 
     if (vol->target.path == NULL) {
-        if ((vol->target.path = malloc(strlen(pool->def->target.path) +
-                                       1 + strlen(vol->name) + 1)) == NULL) {
+        if (VIR_ALLOC_N(vol->target.path, strlen(pool->def->target.path) +
+                        1 + strlen(vol->name) + 1) < 0) {
             virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("volume"));
             return -1;
         }
@@ -150,12 +149,11 @@
 
 
     /* Finally fill in extents information */
-    if ((tmp = realloc(vol->source.extents, sizeof(*tmp)
-                       * (vol->source.nextent + 1))) == NULL) {
+    if (VIR_REALLOC_N(vol->source.extents,
+                      vol->source.nextent + 1) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("extents"));
         return -1;
     }
-    vol->source.extents = tmp;
 
     if ((vol->source.extents[vol->source.nextent].path =
          strdup(groups[2])) == NULL) {
@@ -266,7 +264,7 @@
     memset(zeros, 0, sizeof(zeros));
 
     /* XXX multiple pvs */
-    if ((vgargv = malloc(sizeof(char*) * (1))) == NULL) {
+    if (VIR_ALLOC_N(vgargv, 1) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("command line"));
         return -1;
     }
@@ -318,12 +316,12 @@
     if (virRun(conn, (char**)vgargv, NULL) < 0)
         goto cleanup;
 
-    free(vgargv);
+    VIR_FREE(vgargv);
 
     return 0;
 
  cleanup:
-    free(vgargv);
+    VIR_FREE(vgargv);
     return -1;
 }
 
diff -r ff6b92c70738 src/storage_conf.c
--- a/src/storage_conf.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/storage_conf.c	Fri May 30 10:55:44 2008 -0400
@@ -45,6 +45,7 @@
 #include "uuid.h"
 #include "buf.h"
 #include "util.h"
+#include "memory.h"
 
 #define virStorageLog(msg...) fprintf(stderr, msg)
 
@@ -70,40 +71,40 @@
 void
 virStorageVolDefFree(virStorageVolDefPtr def) {
     int i;
-    free(def->name);
-    free(def->key);
+    VIR_FREE(def->name);
+    VIR_FREE(def->key);
 
     for (i = 0 ; i < def->source.nextent ; i++) {
-        free(def->source.extents[i].path);
+        VIR_FREE(def->source.extents[i].path);
     }
-    free(def->source.extents);
+    VIR_FREE(def->source.extents);
 
-    free(def->target.path);
-    free(def->target.perms.label);
-    free(def);
+    VIR_FREE(def->target.path);
+    VIR_FREE(def->target.perms.label);
+    VIR_FREE(def);
 }
 
 void
 virStoragePoolDefFree(virStoragePoolDefPtr def) {
     int i;
 
-    free(def->name);
-    free(def->source.host.name);
+    VIR_FREE(def->name);
+    VIR_FREE(def->source.host.name);
     for (i = 0 ; i < def->source.ndevice ; i++) {
-        free(def->source.devices[i].freeExtents);
-        free(def->source.devices[i].path);
+        VIR_FREE(def->source.devices[i].freeExtents);
+        VIR_FREE(def->source.devices[i].path);
     }
-    free(def->source.devices);
-    free(def->source.dir);
+    VIR_FREE(def->source.devices);
+    VIR_FREE(def->source.dir);
 
     if (def->source.authType == VIR_STORAGE_POOL_AUTH_CHAP) {
-        free(def->source.auth.chap.login);
-        free(def->source.auth.chap.passwd);
+        VIR_FREE(def->source.auth.chap.login);
+        VIR_FREE(def->source.auth.chap.passwd);
     }
 
-    free(def->target.path);
-    free(def->target.perms.label);
-    free(def);
+    VIR_FREE(def->target.path);
+    VIR_FREE(def->target.perms.label);
+    VIR_FREE(def);
 }
 
 
@@ -114,9 +115,9 @@
     if (obj->newDef)
         virStoragePoolDefFree(obj->newDef);
 
-    free(obj->configFile);
-    free(obj->autostartLink);
-    free(obj);
+    VIR_FREE(obj->configFile);
+    VIR_FREE(obj->autostartLink);
+    VIR_FREE(obj);
 }
 
 void
@@ -225,8 +226,11 @@
     char *uuid = NULL;
     char *authType = NULL;
 
-    if ((ret = calloc(1, sizeof(virStoragePoolDef))) == NULL)
+    if (VIR_ALLOC(ret) < 0) {
+        virStorageReportError(conn, VIR_ERR_NO_MEMORY,
+                              "%s", _("cannot allocate storage pool"));
         return NULL;
+    }
 
     if (STRNEQ((const char *)root->name, "pool")) {
         virStorageReportError(conn, VIR_ERR_XML_ERROR,
@@ -263,17 +267,16 @@
                                   "%s", _("malformed uuid element"));
             goto cleanup;
         }
-        free(uuid);
-        uuid = NULL;
+        VIR_FREE(uuid);
     }
 
     if (options->formatFromString) {
         char *format = virXPathString("string(/pool/source/format/@type)", ctxt);
         if ((ret->source.format = (options->formatFromString)(conn, format)) < 0) {
-            free(format);
+            VIR_FREE(format);
             goto cleanup;
         }
-        free(format);
+        VIR_FREE(format);
     }
 
     if (options->flags & VIR_STORAGE_BACKEND_POOL_SOURCE_HOST) {
@@ -292,22 +295,22 @@
                                   "%s", _("cannot extract source devices"));
             goto cleanup;
         }
-        if ((ret->source.devices = calloc(nsource, sizeof(*ret->source.devices))) == NULL) {
-            free(nodeset);
+        if (VIR_ALLOC_N(ret->source.devices, nsource) < 0) {
+            VIR_FREE(nodeset);
             virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("device"));
             goto cleanup;
         }
         for (i = 0 ; i < nsource ; i++) {
             xmlChar *path = xmlGetProp(nodeset[i], BAD_CAST "path");
             if (path == NULL) {
-                free(nodeset);
+                VIR_FREE(nodeset);
                 virStorageReportError(conn, VIR_ERR_XML_ERROR,
                                       "%s", _("missing source device path"));
                 goto cleanup;
             }
             ret->source.devices[i].path = (char *)path;
         }
-        free(nodeset);
+        VIR_FREE(nodeset);
         ret->source.ndevice = nsource;
     }
     if (options->flags & VIR_STORAGE_BACKEND_POOL_SOURCE_DIR) {
@@ -329,12 +332,10 @@
             virStorageReportError(conn, VIR_ERR_XML_ERROR,
                                   _("unknown auth type '%s'"),
                                   (const char *)authType);
-            free(authType);
-            authType = NULL;
+            VIR_FREE(authType);
             goto cleanup;
         }
-        free(authType);
-        authType = NULL;
+        VIR_FREE(authType);
     }
 
     if (ret->source.authType == VIR_STORAGE_POOL_AUTH_CHAP) {
@@ -354,7 +355,7 @@
     return ret;
 
  cleanup:
-    free(uuid);
+    VIR_FREE(uuid);
     xmlFree(type);
     virStoragePoolDefFree(ret);
     return NULL;
@@ -649,8 +650,11 @@
     if (options == NULL)
         return NULL;
 
-    if ((ret = calloc(1, sizeof(virStorageVolDef))) == NULL)
+    if (VIR_ALLOC(ret) < 0) {
+        virStorageReportError(conn, VIR_ERR_NO_MEMORY,
+                              "%s", _("cannot allocate storage vol"));
         return NULL;
+    }
 
     if (STRNEQ((const char *)root->name, "volume")) {
         virStorageReportError(conn, VIR_ERR_XML_ERROR,
@@ -677,20 +681,16 @@
     }
     if (virStorageSize(conn, unit, capacity, &ret->capacity) < 0)
         goto cleanup;
-    free(capacity);
-    capacity = NULL;
-    free(unit);
-    unit = NULL;
+    VIR_FREE(capacity);
+    VIR_FREE(unit);
 
     allocation = virXPathString("string(/volume/allocation)", ctxt);
     if (allocation) {
         unit = virXPathString("string(/volume/allocation/@unit)", ctxt);
         if (virStorageSize(conn, unit, allocation, &ret->allocation) < 0)
             goto cleanup;
-        free(allocation);
-        allocation = NULL;
-        free(unit);
-        unit = NULL;
+        VIR_FREE(allocation);
+        VIR_FREE(unit);
     } else {
         ret->allocation = ret->capacity;
     }
@@ -699,10 +699,10 @@
     if (options->formatFromString) {
         char *format = virXPathString("string(/volume/target/format/@type)", ctxt);
         if ((ret->target.format = (options->formatFromString)(conn, format)) < 0) {
-            free(format);
+            VIR_FREE(format);
             goto cleanup;
         }
-        free(format);
+        VIR_FREE(format);
     }
 
     if (virStorageVolDefParsePerms(conn, ctxt, &ret->target.perms) < 0)
@@ -711,9 +711,9 @@
     return ret;
 
  cleanup:
-    free(allocation);
-    free(capacity);
-    free(unit);
+    VIR_FREE(allocation);
+    VIR_FREE(capacity);
+    VIR_FREE(unit);
     virStorageVolDefFree(ret);
     return NULL;
 }
@@ -772,6 +772,7 @@
                        virStorageVolDefPtr def) {
     virStorageBackendVolOptionsPtr options;
     virBuffer buf = VIR_BUFFER_INITIALIZER;
+    char *tmp;
 
     options = virStorageBackendVolOptionsForType(pool->type);
     if (options == NULL)
@@ -849,7 +850,8 @@
  no_memory:
     virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("xml"));
  cleanup:
-    free(virBufferContentAndReset(&buf));
+    tmp = virBufferContentAndReset(&buf);
+    VIR_FREE(tmp);
     return NULL;
 }
 
@@ -955,7 +957,7 @@
         return pool;
     }
 
-    if (!(pool = calloc(1, sizeof(virStoragePoolObj)))) {
+    if (VIR_ALLOC(pool) < 0) {
         virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                               "%s", _("pool"));
         return NULL;
@@ -1063,7 +1065,7 @@
 
         virStoragePoolObjLoad(driver, entry->d_name, path, xml, autostartLink);
 
-        free(xml);
+        VIR_FREE(xml);
     }
 
     closedir(dir);
@@ -1108,15 +1110,13 @@
             virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
                                   "%s", _("cannot construct "
                                           "autostart link path"));
-            free(pool->configFile);
-            pool->configFile = NULL;
+            VIR_FREE(pool->configFile);
             return -1;
         }
         if (!(pool->autostartLink = strdup(path))) {
             virStorageReportError(conn, VIR_ERR_NO_MEMORY,
                                   "%s", _("config file"));
-            free(pool->configFile);
-            pool->configFile = NULL;
+            VIR_FREE(pool->configFile);
             return -1;
         }
     }
@@ -1157,7 +1157,7 @@
     if (fd != -1)
         close(fd);
 
-    free(xml);
+    VIR_FREE(xml);
 
     return ret;
 }
diff -r ff6b92c70738 src/storage_driver.c
--- a/src/storage_driver.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/storage_driver.c	Fri May 30 10:55:44 2008 -0400
@@ -37,7 +37,7 @@
 #include "util.h"
 #include "storage_driver.h"
 #include "storage_conf.h"
-
+#include "memory.h"
 #include "storage_backend.h"
 
 #define storageLog(msg...) fprintf(stderr, msg)
@@ -104,9 +104,8 @@
     char *base = NULL;
     char driverConf[PATH_MAX];
 
-    if (!(driverState = calloc(1, sizeof(virStorageDriverState)))) {
+    if (VIR_ALLOC(driverState) < 0)
         return -1;
-    }
 
     if (!uid) {
         if ((base = strdup (SYSCONF_DIR "/libvirt")) == NULL)
diff -r ff6b92c70738 src/xen_internal.c
--- a/src/xen_internal.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/xen_internal.c	Fri May 30 10:55:44 2008 -0400
@@ -48,6 +48,7 @@
 
 #include "buf.h"
 #include "capabilities.h"
+#include "memory.h"
 
 #define DEBUG(fmt,...) VIR_DEBUG(__FILE__, fmt, __VA_ARGS__)
 #define DEBUG0(msg) VIR_DEBUG(__FILE__, "%s", msg)
@@ -223,17 +224,17 @@
 
 #define XEN_GETDOMAININFOLIST_ALLOC(domlist, size)                      \
     (hypervisor_version < 2 ?                                           \
-     ((domlist.v0 = malloc(sizeof(*domlist.v0)*(size))) != NULL) :      \
+     (VIR_ALLOC_N(domlist.v0, (size)) == 0) :                           \
      (dom_interface_version < 5 ?                                       \
-      ((domlist.v2 = malloc(sizeof(*domlist.v2)*(size))) != NULL) :     \
-      ((domlist.v2d5 = malloc(sizeof(*domlist.v2d5)*(size))) != NULL)))
+      (VIR_ALLOC_N(domlist.v2, (size)) == 0) :                          \
+      (VIR_ALLOC_N(domlist.v2d5, (size)) == 0)))
 
-#define XEN_GETDOMAININFOLIST_FREE(domlist)        \
-    (hypervisor_version < 2 ?                      \
-     free(domlist.v0) :                            \
-     (dom_interface_version < 5 ?                  \
-      free(domlist.v2) :                           \
-      free(domlist.v2d5)))
+#define XEN_GETDOMAININFOLIST_FREE(domlist)            \
+    (hypervisor_version < 2 ?                          \
+     VIR_FREE(domlist.v0) :                            \
+     (dom_interface_version < 5 ?                      \
+      VIR_FREE(domlist.v2) :                           \
+      VIR_FREE(domlist.v2d5)))
 
 #define XEN_GETDOMAININFOLIST_CLEAR(domlist, size)            \
     (hypervisor_version < 2 ?                                 \
@@ -796,8 +797,7 @@
 {
     char *msg_s;
 
-    msg_s = malloc (strlen (msg) + 10);
-    if (msg_s) {
+    if (VIR_ALLOC_N(msg_s, strlen (msg) + 10) == 0) {
         strcpy (msg_s, msg);
         strcat (msg_s, ": %s");
     }
@@ -1659,8 +1659,7 @@
         /* The allocated memory to cpumap must be 'sizeof(uint64_t)' byte *
          * for Xen, and also nr_cpus must be 'sizeof(uint64_t) * 8'       */
         if (maplen < 8) {
-            new = calloc(1, sizeof(uint64_t));
-            if (!new) {
+            if (VIR_ALLOC_N(new, sizeof(uint64_t)) < 0) {
                 virXenErrorFunc(NULL, VIR_ERR_NO_MEMORY, __FUNCTION__,
                                 "allocating private data", 0);
                 return (-1);
@@ -1683,7 +1682,7 @@
             op.u.setvcpumapd5.cpumap.nr_cpus = nr_cpus;
         }
         ret = xenHypervisorDoV2Dom(handle, &op);
-        free(new);
+        VIR_FREE(new);
 
         if (unlock_pages(cpumap, maplen) < 0) {
             virXenError(NULL, VIR_ERR_XEN_CALL, " release", maplen);
@@ -1985,8 +1984,7 @@
      */
     hypervisor_version = 2;
 
-    ipt = malloc(sizeof(*ipt));
-    if (ipt == NULL){
+    if (VIR_ALLOC(ipt) < 0) {
         virXenError(NULL, VIR_ERR_NO_MEMORY, __FUNCTION__, 0);
         return(-1);
     }
@@ -2053,13 +2051,13 @@
     virXenError(NULL, VIR_ERR_XEN_CALL, " ioctl ", IOCTL_PRIVCMD_HYPERCALL);
     close(fd);
     in_init = 0;
-    free(ipt);
+    VIR_FREE(ipt);
     return(-1);
 
  done:
     close(fd);
     in_init = 0;
-    free(ipt);
+    VIR_FREE(ipt);
     return(0);
 }
 
@@ -2647,7 +2645,7 @@
     ret = virGetDomain(conn, name, XEN_GETDOMAININFO_UUID(dominfo));
     if (ret)
         ret->id = id;
-    free(name);
+    VIR_FREE(name);
     return ret;
 }
 
@@ -2714,7 +2712,7 @@
     ret = virGetDomain(conn, name, uuid);
     if (ret)
         ret->id = id;
-    free(name);
+    VIR_FREE(name);
     return ret;
 }
 #endif
diff -r ff6b92c70738 src/xen_unified.c
--- a/src/xen_unified.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/xen_unified.c	Fri May 30 10:55:44 2008 -0400
@@ -40,6 +40,7 @@
 #include "xm_internal.h"
 #include "xml.h"
 #include "util.h"
+#include "memory.h"
 
 #define DEBUG(fmt,...) VIR_DEBUG(__FILE__, fmt,__VA_ARGS__)
 #define DEBUG0(msg) VIR_DEBUG(__FILE__, "%s", msg)
@@ -172,15 +173,12 @@
     if (xenUnifiedNodeGetInfo(dom->conn, &nodeinfo) < 0)
         return(NULL);
 
-    cpulist = calloc(nb_cpu, sizeof(*cpulist));
-    if (cpulist == NULL)
+    if (VIR_ALLOC_N(cpulist, nb_cpu) < 0)
         goto done;
-    cpuinfo = malloc(sizeof(*cpuinfo) * nb_vcpu);
-    if (cpuinfo == NULL)
+    if (VIR_ALLOC_N(cpuinfo, nb_vcpu) < 0)
         goto done;
     cpumaplen = VIR_CPU_MAPLEN(VIR_NODEINFO_MAXCPUS(nodeinfo));
-    cpumap = (unsigned char *) calloc(nb_vcpu, cpumaplen);
-    if (cpumap == NULL)
+    if (VIR_ALLOC_N(cpumap, nb_vcpu * cpumaplen) < 0)
         goto done;
 
     if ((ncpus = xenUnifiedDomainGetVcpus(dom, cpuinfo, nb_vcpu,
@@ -202,9 +200,9 @@
     }
 
 done:
-    free(cpulist);
-    free(cpumap);
-    free(cpuinfo);
+    VIR_FREE(cpulist);
+    VIR_FREE(cpumap);
+    VIR_FREE(cpuinfo);
     return(res);
 }
 
@@ -262,8 +260,7 @@
         return VIR_DRV_OPEN_DECLINED;
 
     /* Allocate per-connection private data. */
-    priv = calloc (1, sizeof *priv);
-    if (!priv) {
+    if (VIR_ALLOC(priv) < 0) {
         xenUnifiedError (NULL, VIR_ERR_NO_MEMORY, "allocating private data");
         return VIR_DRV_OPEN_ERROR;
     }
@@ -342,7 +339,7 @@
     DEBUG0("Failed to activate a mandatory sub-driver");
     for (i = 0 ; i < XEN_UNIFIED_NR_DRIVERS ; i++)
         if (priv->opened[i]) drivers[i]->close(conn);
-    free(priv);
+    VIR_FREE(priv);
     return VIR_DRV_OPEN_ERROR;
 }
 
@@ -961,7 +958,7 @@
             char *cpus, *res;
             cpus = xenDomainUsedCpus(dom);
             res = xenDaemonDomainDumpXML(dom, flags, cpus);
-                free(cpus);
+            VIR_FREE(cpus);
             return(res);
         }
         if (priv->opened[XEN_UNIFIED_PROXY_OFFSET])
diff -r ff6b92c70738 src/xend_internal.c
--- a/src/xend_internal.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/xend_internal.c	Fri May 30 10:55:44 2008 -0400
@@ -24,7 +24,6 @@
 #include <stdbool.h>
 #include <math.h>
 #include <stdarg.h>
-#include <malloc.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #include <arpa/inet.h>
diff -r ff6b92c70738 src/xmlrpc.c
--- a/src/xmlrpc.c	Fri May 30 10:36:42 2008 -0400
+++ b/src/xmlrpc.c	Fri May 30 10:55:44 2008 -0400
@@ -12,6 +12,7 @@
 
 #include "xmlrpc.h"
 #include "internal.h"
+#include "memory.h"
 
 #include <libxml/nanohttp.h>
 
@@ -47,9 +48,8 @@
 
 static xmlRpcValuePtr xmlRpcValueNew(xmlRpcValueType type)
 {
-    xmlRpcValuePtr ret = malloc(sizeof(*ret));
-
-    if (!ret)
+    xmlRpcValuePtr ret = NULL;
+    if (VIR_ALLOC(ret) < 0)
         xmlRpcError(VIR_ERR_NO_MEMORY, _("allocate value"), sizeof(*ret));
     else
         ret->kind = type;
@@ -115,7 +115,7 @@
 
     if (ret && value)
         ret->value.integer = atoi(value);
-    free(value);
+    VIR_FREE(value);
     return ret;
 }
 
@@ -130,7 +130,7 @@
         ret->value.boolean = true;
     else
         ret->value.boolean = false;
-    free(value);
+    VIR_FREE(value);
     return ret;
 }
 
@@ -141,7 +141,7 @@
 
     if (ret && value)
         ret->value.real = atof(value);
-    free(value);
+    VIR_FREE(value);
     return ret;
 }
 
@@ -158,11 +158,10 @@
     for (cur = xmlFirstElement(node); cur; cur = xmlNextElement(cur))
         n_elements += 1;
 
-    elems = malloc(n_elements * sizeof(*elems));
-    if (!elems) {
+    if (VIR_ALLOC_N(elems, n_elements) < 0) {
         xmlRpcError(VIR_ERR_NO_MEMORY, _("allocate value array"),
                     n_elements * sizeof(*elems));
-        free(ret);
+        VIR_FREE(ret);
         return NULL;
     }
     n_elements = 0;
@@ -179,10 +178,10 @@
 
 static xmlRpcValueDictElementPtr xmlRpcValueUnmarshalDictElement(xmlNodePtr node)
 {
-    xmlRpcValueDictElementPtr ret = malloc(sizeof(*ret));
+    xmlRpcValueDictElementPtr ret;
     xmlNodePtr cur;
 
-    if (!ret) {
+    if (VIR_ALLOC(ret) < 0) {
         xmlRpcError(VIR_ERR_NO_MEMORY, _("allocate dict"), sizeof(*ret));
         return NULL;
     }
@@ -195,10 +194,10 @@
             ret->value = xmlRpcValueUnmarshal(cur);
         } else {
             xmlRpcError(VIR_ERR_XML_ERROR, _("unexpected dict node"), 0);
-            free(ret->name);
+            VIR_FREE(ret->name);
             if (ret->value)
                 xmlRpcValueFree(ret->value);
-            free(ret);
+            VIR_FREE(ret);
             return NULL;
         }
     }
@@ -283,26 +282,26 @@
     case XML_RPC_ARRAY:
         for (i = 0; i < value->value.array.n_elements; i++)
             xmlRpcValueFree(value->value.array.elements[i]);
-        free(value->value.array.elements);
+        VIR_FREE(value->value.array.elements);
         break;
     case XML_RPC_STRUCT:
         next = value->value.dict.root;
         while (next) {
             cur = next;
             next = next->next;
-            free(cur->name);
+            VIR_FREE(cur->name);
             xmlRpcValueFree(cur->value);
-            free(cur);
+            VIR_FREE(cur);
         }
         break;
     case XML_RPC_STRING:
-        free(value->value.string);
+        VIR_FREE(value->value.string);
         break;
     default:
         break;
     }
 
-    free(value);
+    VIR_FREE(value);
 }
 
 void xmlRpcValueMarshal(xmlRpcValuePtr value, virBufferPtr buf, int indent)
@@ -436,15 +435,14 @@
         }
 
         len = xmlNanoHTTPContentLength(cxt);
-        response = malloc(len + 1);
-        if (response == NULL) {
+        if (VIR_ALLOC_N(response, len + 1) < 0) {
                 xmlRpcError(VIR_ERR_NO_MEMORY, _("allocate response"), len);
                 goto error;
         }
         ret = xmlNanoHTTPRead(cxt, response, len);
         if (ret != len) {
                 errno = EINVAL;
-                free(response);
+                VIR_FREE(response);
                 response = NULL;
                 xmlRpcError(VIR_ERR_POST_FAILED, _("read response"), 0);
         }
@@ -455,7 +453,7 @@
         serrno = errno;
         if (cxt) {
                 xmlNanoHTTPClose(cxt);
-                free(contentType);
+                VIR_FREE(contentType);
         }
         errno = serrno;
 
@@ -477,7 +475,7 @@
         if (value->value.array.elements[i]->kind == XML_RPC_STRING)
             size += strlen(value->value.array.elements[i]->value.string) + 1;
 
-    if (!(ptr = malloc(size))) {
+    if (VIR_ALLOC_N(ptr, size) < 0) {
         xmlRpcError(VIR_ERR_NO_MEMORY, _("allocate string array"), size);
         return NULL;
     }
@@ -507,7 +505,7 @@
     int i;
 
     *argc = strlen(fmt);
-    if (!(argv = malloc(sizeof(*argv) * *argc))) {
+    if (VIR_ALLOC_N(argv, *argc) < 0) {
         xmlRpcError(VIR_ERR_NO_MEMORY, _("read response"), sizeof(*argv) * *argc);
         return NULL;
     }
@@ -552,7 +550,7 @@
     for (i = 0; i < argc; i++)
         xmlRpcValueFree(argv[i]);
 
-    free(argv);
+    VIR_FREE(argv);
 }
 
 int xmlRpcCall(xmlRpcContextPtr context, const char *method,
@@ -589,7 +587,7 @@
 
     content = virBufferContentAndReset(&buf);
     ret = xmlRpcCallRaw(context->uri, content);
-    free(content);
+    VIR_FREE(content);
 
     if (!ret)
         return -1;
@@ -597,7 +595,7 @@
     xml = xmlReadDoc((const xmlChar *)ret, "response.xml", NULL,
                      XML_PARSE_NOENT | XML_PARSE_NONET |
                      XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
-    free(ret);
+    VIR_FREE(ret);
 
     if (xml == NULL) {
         errno = EINVAL;
@@ -659,13 +657,14 @@
 
 xmlRpcContextPtr xmlRpcContextNew(const char *uri)
 {
-    xmlRpcContextPtr ret = malloc(sizeof(*ret));
+    xmlRpcContextPtr ret = NULL;
 
-    if (ret) {
+    if (VIR_ALLOC(ret) < 0) {
+        xmlRpcError(VIR_ERR_NO_MEMORY, _("allocate new context"), sizeof(*ret));
+    } else {
         ret->uri = strdup(uri);
         ret->faultMessage = NULL;
-    } else
-        xmlRpcError(VIR_ERR_NO_MEMORY, _("allocate new context"), sizeof(*ret));
+    }
 
     return ret;
 }
@@ -673,9 +672,9 @@
 void xmlRpcContextFree(xmlRpcContextPtr context)
 {
     if (context) {
-        free(context->uri);
-        free(context->faultMessage);
-        free(context);
+        VIR_FREE(context->uri);
+        VIR_FREE(context->faultMessage);
+        VIR_FREE(context);
     }
 }
 

-- 
|: Red Hat, Engineering, Boston   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]