提交 895d0fdf 编写于 作者: D Daniel P. Berrange

Convert to use new memory allocation APIs

上级 e8a0db81
Thu May 29 15:17:00 EST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/conf.c, src/conf.h, src/qemu_conf.c, src/qemu_driver.c,
src/test.c, src/util.c, src/xend_internal.c, src/xm_internal.c,
src/xml.c, tests/virshtest.c: Switch over to using new memory
allocation APIs.
Thu May 29 14:46:00 EST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/memory.h, src/memory.c, tests/testutils.c: Pass allocation
......
......@@ -105,7 +105,6 @@ virConfError(virConfPtr conf ATTRIBUTE_UNUSED,
* Structures allocations and deallocations *
* *
************************************************************************/
static void virConfFreeValue(virConfValuePtr val);
/**
* virConfFreeList:
......@@ -132,8 +131,8 @@ virConfFreeList(virConfValuePtr list)
*
* Free a value
*/
static void
virConfFreeValue(virConfValuePtr val)
void
__virConfFreeValue(virConfValuePtr val)
{
if (val == NULL)
return;
......
......@@ -70,6 +70,7 @@ virConfPtr __virConfReadFile (const char *filename);
virConfPtr __virConfReadMem (const char *memory,
int len);
int __virConfFree (virConfPtr conf);
void __virConfFreeValue (virConfValuePtr val);
virConfValuePtr __virConfGetValue (virConfPtr conf,
const char *setting);
......@@ -82,14 +83,15 @@ int __virConfWriteMem (char *memory,
int *len,
virConfPtr conf);
#define virConfNew() (__virConfNew())
#define virConfReadFile(f) (__virConfReadFile((f)))
#define virConfReadMem(m,l) (__virConfReadMem((m),(l)))
#define virConfFree(c) (__virConfFree((c)))
#define virConfGetValue(c,s) (__virConfGetValue((c),(s)))
#define virConfSetValue(c,s,v) (__virConfSetValue((c),(s),(v)))
#define virConfWriteFile(f,c) (__virConfWriteFile((f),(c)))
#define virConfWriteMem(m,l,c) (__virConfWriteMem((m),(l),(c)))
#define virConfNew() __virConfNew()
#define virConfReadFile(f) __virConfReadFile((f))
#define virConfReadMem(m,l) __virConfReadMem((m),(l))
#define virConfFree(c) __virConfFree((c))
#define virConfFreeValue(v) __virConfFreeValue((v))
#define virConfGetValue(c,s) __virConfGetValue((c),(s))
#define virConfSetValue(c,s,v) __virConfSetValue((c),(s),(v))
#define virConfWriteFile(f,c) __virConfWriteFile((f),(c))
#define virConfWriteMem(m,l,c) __virConfWriteMem((m),(l),(c))
#ifdef __cplusplus
}
......
......@@ -121,7 +121,7 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
p = virConfGetValue (conf, "vnc_tls_x509_cert_dir");
CHECK_TYPE ("vnc_tls_x509_cert_dir", VIR_CONF_STRING);
if (p && p->str) {
free(driver->vncTLSx509certdir);
VIR_FREE(driver->vncTLSx509certdir);
if (!(driver->vncTLSx509certdir = strdup(p->str))) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate vncTLSx509certdir"));
......@@ -219,42 +219,42 @@ void qemudFreeVMDef(struct qemud_vm_def *def) {
while (disk) {
struct qemud_vm_disk_def *prev = disk;
disk = disk->next;
free(prev);
VIR_FREE(prev);
}
while (net) {
struct qemud_vm_net_def *prev = net;
net = net->next;
free(prev);
VIR_FREE(prev);
}
while (input) {
struct qemud_vm_input_def *prev = input;
input = input->next;
free(prev);
VIR_FREE(prev);
}
while (serial) {
struct qemud_vm_chr_def *prev = serial;
serial = serial->next;
free(prev);
VIR_FREE(prev);
}
while (parallel) {
struct qemud_vm_chr_def *prev = parallel;
parallel = parallel->next;
free(prev);
VIR_FREE(prev);
}
while (sound) {
struct qemud_vm_sound_def *prev = sound;
sound = sound->next;
free(prev);
VIR_FREE(prev);
}
xmlFree(def->keymap);
free(def);
VIR_FREE(def);
}
void qemudFreeVM(struct qemud_vm *vm) {
qemudFreeVMDef(vm->def);
if (vm->newDef)
qemudFreeVMDef(vm->newDef);
free(vm);
VIR_FREE(vm);
}
......@@ -1417,8 +1417,8 @@ static int qemudParseCharXMLDevices(virConnectPtr conn,
}
for (i = 0; i < obj->nodesetval->nodeNr; i++) {
struct qemud_vm_chr_def *chr = calloc(1, sizeof(*chr));
if (!chr) {
struct qemud_vm_chr_def *chr;
if (VIR_ALLOC(chr) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s",
_("failed to allocate space for char device"));
......@@ -1426,7 +1426,7 @@ static int qemudParseCharXMLDevices(virConnectPtr conn,
}
if (qemudParseCharXML(conn, chr, i, obj->nodesetval->nodeTab[i]) < 0) {
free(chr);
VIR_FREE(chr);
goto cleanup;
}
if (ndevs)
......@@ -1619,7 +1619,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
int i;
struct qemud_vm_def *def;
if (!(def = calloc(1, sizeof(*def)))) {
if (VIR_ALLOC(def) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for xmlXPathContext"));
return NULL;
......@@ -1659,8 +1659,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
"%s", _("invalid domain type attribute"));
goto error;
}
free(prop);
prop = NULL;
VIR_FREE(prop);
/* Extract domain name */
......@@ -2032,14 +2031,14 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
if ((obj != NULL) && (obj->type == XPATH_NODESET) &&
(obj->nodesetval != NULL) && (obj->nodesetval->nodeNr >= 0)) {
for (i = 0; i < obj->nodesetval->nodeNr; i++) {
struct qemud_vm_disk_def *disk = calloc(1, sizeof(*disk));
if (!disk) {
struct qemud_vm_disk_def *disk;
if (VIR_ALLOC(disk) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for disk string"));
goto error;
}
if (qemudParseDiskXML(conn, disk, obj->nodesetval->nodeTab[i]) < 0) {
free(disk);
VIR_FREE(disk);
goto error;
}
def->ndisks++;
......@@ -2082,8 +2081,8 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
obj = xmlXPathEval(BAD_CAST "/domain/devices/console", ctxt);
if ((obj != NULL) && (obj->type == XPATH_NODESET) &&
(obj->nodesetval != NULL) && (obj->nodesetval->nodeNr == 1)) {
struct qemud_vm_chr_def *chr = calloc(1, sizeof(*chr));
if (!chr) {
struct qemud_vm_chr_def *chr;
if (VIR_ALLOC(chr) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s",
_("failed to allocate space for char device"));
......@@ -2091,7 +2090,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
}
if (qemudParseCharXML(conn, chr, 0, obj->nodesetval->nodeTab[0]) < 0) {
free(chr);
VIR_FREE(chr);
goto error;
}
def->nserials = 1;
......@@ -2107,14 +2106,14 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
(obj->nodesetval != NULL) && (obj->nodesetval->nodeNr >= 0)) {
struct qemud_vm_net_def *prev = NULL;
for (i = 0; i < obj->nodesetval->nodeNr; i++) {
struct qemud_vm_net_def *net = calloc(1, sizeof(*net));
if (!net) {
struct qemud_vm_net_def *net;
if (VIR_ALLOC(net) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for net string"));
goto error;
}
if (qemudParseInterfaceXML(conn, net, obj->nodesetval->nodeTab[i]) < 0) {
free(net);
VIR_FREE(net);
goto error;
}
def->nnets++;
......@@ -2135,20 +2134,20 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
(obj->nodesetval != NULL) && (obj->nodesetval->nodeNr >= 0)) {
struct qemud_vm_input_def *prev = NULL;
for (i = 0; i < obj->nodesetval->nodeNr; i++) {
struct qemud_vm_input_def *input = calloc(1, sizeof(*input));
if (!input) {
struct qemud_vm_input_def *input;
if (VIR_ALLOC(input) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for input string"));
goto error;
}
if (qemudParseInputXML(conn, def, input, obj->nodesetval->nodeTab[i]) < 0) {
free(input);
VIR_FREE(input);
goto error;
}
/* Mouse + PS/2 is implicit with graphics, so don't store it */
if (input->bus == QEMU_INPUT_BUS_PS2 &&
input->type == QEMU_INPUT_TYPE_MOUSE) {
free(input);
VIR_FREE(input);
continue;
}
def->ninputs++;
......@@ -2170,17 +2169,17 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
struct qemud_vm_sound_def *prev = NULL;
for (i = 0; i < obj->nodesetval->nodeNr; i++) {
struct qemud_vm_sound_def *sound = calloc(1, sizeof(*sound));
struct qemud_vm_sound_def *sound;
struct qemud_vm_sound_def *check = def->sounds;
int collision = 0;
if (!sound) {
if (VIR_ALLOC(sound) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for sound dev"));
goto error;
}
if (qemudParseSoundXML(conn, sound,
obj->nodesetval->nodeTab[i]) < 0) {
free(sound);
VIR_FREE(sound);
goto error;
}
......@@ -2193,7 +2192,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
check = check->next;
}
if (collision) {
free(sound);
VIR_FREE(sound);
continue;
}
......@@ -2222,8 +2221,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
}
if (!hasPS2mouse) {
input = calloc(1, sizeof(*input));
if (!input) {
if (VIR_ALLOC(input) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for input string"));
goto error;
......@@ -2241,7 +2239,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
return def;
error:
free(prop);
VIR_FREE(prop);
xmlXPathFreeObject(obj);
xmlXPathFreeContext(ctxt);
qemudFreeVMDef(def);
......@@ -2263,7 +2261,6 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
char *retval = NULL;
int err;
int tapfd = -1;
int *tapfds;
if (net->type == QEMUD_NET_NETWORK) {
if (!(network = qemudFindNetworkByName(driver, net->dst.network.name))) {
......@@ -2320,10 +2317,9 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
if (!(retval = strdup(tapfdstr)))
goto no_memory;
if (!(tapfds = realloc(vm->tapfds, sizeof(*tapfds) * (vm->ntapfds+2))))
if (VIR_ALLOC_N(vm->tapfds, vm->ntapfds+2) < 0)
goto no_memory;
vm->tapfds = tapfds;
vm->tapfds[vm->ntapfds++] = tapfd;
vm->tapfds[vm->ntapfds] = -1;
......@@ -2333,7 +2329,7 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for tapfds string"));
error:
free(retval);
VIR_FREE(retval);
if (tapfd != -1)
close(tapfd);
return NULL;
......@@ -2830,14 +2826,14 @@ int qemudBuildCommandLine(virConnectPtr conn,
/* Add sound hardware */
if (sound) {
int size = 100;
char *modstr = calloc(1, size+1);
if (!modstr)
char *modstr;
if (VIR_ALLOC_N(modstr, size+1) < 0)
goto no_memory;
while(sound && size > 0) {
const char *model = qemudSoundModelToString(sound->model);
if (!model) {
free(modstr);
VIR_FREE(modstr);
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
"%s", _("invalid sound model"));
goto error;
......@@ -2869,14 +2865,14 @@ int qemudBuildCommandLine(virConnectPtr conn,
if (vm->tapfds) {
for (i = 0; vm->tapfds[i] != -1; i++)
close(vm->tapfds[i]);
free(vm->tapfds);
VIR_FREE(vm->tapfds);
vm->tapfds = NULL;
vm->ntapfds = 0;
}
if (qargv) {
for (i = 0 ; i < qargc ; i++)
free((qargv)[i]);
free(qargv);
VIR_FREE((qargv)[i]);
VIR_FREE(qargv);
}
return -1;
......@@ -2928,7 +2924,7 @@ static int qemudSaveConfig(virConnectPtr conn,
if (fd != -1)
close(fd);
free(xml);
VIR_FREE(xml);
return ret;
}
......@@ -2940,13 +2936,18 @@ qemudParseVMDeviceDef(virConnectPtr conn,
{
xmlDocPtr xml;
xmlNodePtr node;
struct qemud_vm_device_def *dev = calloc(1, sizeof(*dev));
struct qemud_vm_device_def *dev;
if (VIR_ALLOC(dev) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, NULL);
return NULL;
}
if (!(xml = xmlReadDoc(BAD_CAST xmlStr, "device.xml", NULL,
XML_PARSE_NOENT | XML_PARSE_NONET |
XML_PARSE_NOERROR | XML_PARSE_NOWARNING))) {
qemudReportError(conn, NULL, NULL, VIR_ERR_XML_ERROR, NULL);
return NULL;
goto error;
}
node = xmlDocGetRootElement(xml);
......@@ -2979,7 +2980,7 @@ qemudParseVMDeviceDef(virConnectPtr conn,
error:
if (xml) xmlFreeDoc(xml);
free(dev);
VIR_FREE(dev);
return NULL;
}
......@@ -3027,7 +3028,7 @@ qemudAssignVMDef(virConnectPtr conn,
return vm;
}
if (!(vm = calloc(1, sizeof(*vm)))) {
if (VIR_ALLOC(vm) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for vm string"));
return NULL;
......@@ -3155,7 +3156,7 @@ static int qemudSaveNetworkConfig(virConnectPtr conn,
cleanup:
free(xml);
VIR_FREE(xml);
return ret;
}
......@@ -3164,17 +3165,17 @@ void qemudFreeNetworkDef(struct qemud_network_def *def) {
struct qemud_dhcp_range_def *range = def->ranges;
while (range) {
struct qemud_dhcp_range_def *next = range->next;
free(range);
VIR_FREE(range);
range = next;
}
free(def);
VIR_FREE(def);
}
void qemudFreeNetwork(struct qemud_network *network) {
qemudFreeNetworkDef(network->def);
if (network->newDef)
qemudFreeNetworkDef(network->newDef);
free(network);
VIR_FREE(network);
}
static int qemudParseBridgeXML(struct qemud_driver *driver ATTRIBUTE_UNUSED,
......@@ -3227,7 +3228,7 @@ static int qemudParseDhcpRangesXML(virConnectPtr conn,
continue;
}
if (!(range = calloc(1, sizeof(*range)))) {
if (VIR_ALLOC(range) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for range string"));
return 0;
......@@ -3247,7 +3248,7 @@ static int qemudParseDhcpRangesXML(virConnectPtr conn,
def->ranges = range;
def->nranges++;
} else {
free(range);
VIR_FREE(range);
}
xmlFree(start);
......@@ -3318,7 +3319,7 @@ static struct qemud_network_def *qemudParseNetworkXML(virConnectPtr conn,
xmlXPathObjectPtr obj = NULL, tmp = NULL;
struct qemud_network_def *def;
if (!(def = calloc(1, sizeof(*def)))) {
if (VIR_ALLOC(def) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for network_def string"));
return NULL;
......@@ -3492,7 +3493,7 @@ qemudAssignNetworkDef(virConnectPtr conn,
return network;
}
if (!(network = calloc(1, sizeof(*network)))) {
if (VIR_ALLOC(network) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for network string"));
return NULL;
......@@ -3703,7 +3704,7 @@ int qemudScanConfigDir(struct qemud_driver *driver,
else
qemudLoadNetworkConfig(driver, entry->d_name, path, xml, autostartLink);
free(xml);
VIR_FREE(xml);
}
closedir(dir);
......@@ -3839,7 +3840,7 @@ char *qemudGenerateXML(virConnectPtr conn,
const struct qemud_vm_input_def *input;
const struct qemud_vm_sound_def *sound;
const struct qemud_vm_chr_def *chr;
const char *type = NULL;
const char *type = NULL, *tmp;
int n, allones = 1;
if (!(type = qemudVirtTypeToString(def->virtType))) {
......@@ -3876,7 +3877,7 @@ char *qemudGenerateXML(virConnectPtr conn,
goto cleanup;
}
virBufferVSprintf(&buf, " <vcpu cpuset='%s'>%d</vcpu>\n", cpumask, def->vcpus);
free(cpumask);
VIR_FREE(cpumask);
}
if (def->os.bootloader[0])
......@@ -4116,7 +4117,8 @@ char *qemudGenerateXML(virConnectPtr conn,
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to generate XML: out of memory"));
cleanup:
free(virBufferContentAndReset(&buf));
tmp = virBufferContentAndReset(&buf);
VIR_FREE(tmp);
return NULL;
}
......@@ -4127,6 +4129,7 @@ char *qemudGenerateNetworkXML(virConnectPtr conn,
struct qemud_network_def *def) {
virBuffer buf = VIR_BUFFER_INITIALIZER;
unsigned char *uuid;
char *tmp;
char uuidstr[VIR_UUID_STRING_BUFLEN];
virBufferAddLit(&buf, "<network>\n");
......@@ -4191,7 +4194,8 @@ char *qemudGenerateNetworkXML(virConnectPtr conn,
no_memory:
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to generate XML: out of memory"));
free(virBufferContentAndReset(&buf));
tmp = virBufferContentAndReset(&buf);
VIR_FREE(tmp);
return NULL;
}
......
......@@ -178,9 +178,8 @@ qemudStartup(void) {
char *base = NULL;
char driverConf[PATH_MAX];
if (!(qemu_driver = calloc(1, sizeof(*qemu_driver)))) {
if (VIR_ALLOC(qemu_driver) < 0)
return -1;
}
/* Don't have a dom0 so start from 1 */
qemu_driver->nextvmid = 1;
......@@ -228,8 +227,7 @@ qemudStartup(void) {
base) == -1)
goto out_of_memory;
free(base);
base = NULL;
VIR_FREE(base);
if ((qemu_driver->caps = qemudCapsInit()) == NULL)
goto out_of_memory;
......@@ -255,9 +253,8 @@ qemudStartup(void) {
out_of_memory:
qemudLog (QEMUD_ERR,
"%s", _("qemudStartup: out of memory"));
free (base);
free(qemu_driver);
qemu_driver = NULL;
VIR_FREE(base);
VIR_FREE(qemu_driver);
return -1;
}
......@@ -360,19 +357,18 @@ qemudShutdown(void) {
qemu_driver->nactivenetworks = 0;
qemu_driver->ninactivenetworks = 0;
free(qemu_driver->configDir);
free(qemu_driver->autostartDir);
free(qemu_driver->networkConfigDir);
free(qemu_driver->networkAutostartDir);
free(qemu_driver->vncTLSx509certdir);
VIR_FREE(qemu_driver->configDir);
VIR_FREE(qemu_driver->autostartDir);
VIR_FREE(qemu_driver->networkConfigDir);
VIR_FREE(qemu_driver->networkAutostartDir);
VIR_FREE(qemu_driver->vncTLSx509certdir);
if (qemu_driver->brctl)
brShutdown(qemu_driver->brctl);
if (qemu_driver->iptables)
iptablesContextFree(qemu_driver->iptables);
free(qemu_driver);
qemu_driver = NULL;
VIR_FREE(qemu_driver);
return 0;
}
......@@ -701,13 +697,13 @@ qemudDetectVcpuPIDs(virConnectPtr conn,
if (lastVcpu != (vm->def->vcpus - 1))
goto error;
free(qemucpus);
VIR_FREE(qemucpus);
return 0;
error:
VIR_FREE(vm->vcpupids);
vm->vcpupids = 0;
free(qemucpus);
vm->nvcpupids = 0;
VIR_FREE(qemucpus);
/* Explicitly return success, not error. Older KVM does
not have vCPU -> Thread mapping info and we don't
......@@ -756,7 +752,7 @@ qemudInitCpus(virConnectPtr conn,
"%s", _("resume operation failed"));
return -1;
}
free(info);
VIR_FREE(info);
return 0;
}
......@@ -905,16 +901,15 @@ static int qemudStartVMDaemon(virConnectPtr conn,
}
for (i = 0 ; argv[i] ; i++)
free(argv[i]);
free(argv);
VIR_FREE(argv[i]);
VIR_FREE(argv);
if (vm->tapfds) {
for (i = 0; vm->tapfds[i] != -1; i++) {
close(vm->tapfds[i]);
vm->tapfds[i] = -1;
}
free(vm->tapfds);
vm->tapfds = NULL;
VIR_FREE(vm->tapfds);
vm->ntapfds = 0;
}
......@@ -1005,8 +1000,7 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
vm->pid = -1;
vm->id = -1;
vm->state = VIR_DOMAIN_SHUTOFF;
free(vm->vcpupids);
vm->vcpupids = NULL;
VIR_FREE(vm->vcpupids);
vm->nvcpupids = 0;
if (vm->newDef) {
......@@ -1058,7 +1052,7 @@ qemudBuildDnsmasqArgv(virConnectPtr conn,
(2 * network->def->nranges) + /* --dhcp-range 10.0.0.2,10.0.0.254 */
1; /* NULL */
if (!(*argv = calloc(len, sizeof(**argv))))
if (VIR_ALLOC_N(*argv, len) < 0)
goto no_memory;
#define APPEND_ARG(v, n, s) do { \
......@@ -1126,8 +1120,8 @@ qemudBuildDnsmasqArgv(virConnectPtr conn,
no_memory:
if (argv) {
for (i = 0; (*argv)[i]; i++)
free((*argv)[i]);
free(*argv);
VIR_FREE((*argv)[i]);
VIR_FREE(*argv);
}
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for dnsmasq argv"));
......@@ -1155,8 +1149,8 @@ dhcpStartDhcpDaemon(virConnectPtr conn,
ret = virExecNonBlock(conn, argv, &network->dnsmasqPid, -1, NULL, NULL);
for (i = 0; argv[i]; i++)
free(argv[i]);
free(argv);
VIR_FREE(argv[i]);
VIR_FREE(argv);
return ret;
}
......@@ -1625,7 +1619,6 @@ qemudMonitorCommand (const struct qemud_driver *driver ATTRIBUTE_UNUSED,
for (;;) {
char data[1024];
int got = read(vm->monitor, data, sizeof(data));
char *b;
if (got == 0)
goto error;
......@@ -1636,10 +1629,9 @@ qemudMonitorCommand (const struct qemud_driver *driver ATTRIBUTE_UNUSED,
break;
goto error;
}
if (!(b = realloc(buf, size+got+1)))
if (VIR_REALLOC_N(buf, size+got+1) < 0)
goto error;
buf = b;
memmove(buf+size, data, got);
buf[size+got] = '\0';
size += got;
......@@ -1673,7 +1665,7 @@ qemudMonitorCommand (const struct qemud_driver *driver ATTRIBUTE_UNUSED,
if (safewrite(vm->logfile, buf, strlen(buf)) < 0)
qemudLog(QEMUD_WARN, _("Unable to log VM console data: %s"),
strerror(errno));
free(buf);
VIR_FREE(buf);
}
return -1;
}
......@@ -2017,7 +2009,7 @@ static int qemudDomainSuspend(virDomainPtr dom) {
}
vm->state = VIR_DOMAIN_PAUSED;
qemudDebug("Reply %s", info);
free(info);
VIR_FREE(info);
return 0;
}
......@@ -2045,7 +2037,7 @@ static int qemudDomainResume(virDomainPtr dom) {
}
vm->state = VIR_DOMAIN_RUNNING;
qemudDebug("Reply %s", info);
free(info);
VIR_FREE(info);
return 0;
}
......@@ -2229,7 +2221,7 @@ static char *qemudEscape(const char *in, int shell)
}
}
if ((out = (char *)malloc(len + 1)) == NULL)
if (VIR_ALLOC_N(out, len + 1) < 0)
return NULL;
for (i = j = 0; in[i] != '\0'; i++) {
......@@ -2338,7 +2330,7 @@ static int qemudDomainSave(virDomainPtr dom,
if ((fd = open(path, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR)) < 0) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
_("failed to create '%s'"), path);
free(xml);
VIR_FREE(xml);
return -1;
}
......@@ -2346,7 +2338,7 @@ static int qemudDomainSave(virDomainPtr dom,
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("failed to write save header"));
close(fd);
free(xml);
VIR_FREE(xml);
return -1;
}
......@@ -2354,12 +2346,12 @@ static int qemudDomainSave(virDomainPtr dom,
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("failed to write xml"));
close(fd);
free(xml);
VIR_FREE(xml);
return -1;
}
close(fd);
free(xml);
VIR_FREE(xml);
/* Migrate to file */
safe_path = qemudEscapeShellArg(path);
......@@ -2373,7 +2365,7 @@ static int qemudDomainSave(virDomainPtr dom,
"\"", safe_path) == -1) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("out of memory"));
free(safe_path);
VIR_FREE(safe_path);
return -1;
}
free(safe_path);
......@@ -2381,12 +2373,12 @@ static int qemudDomainSave(virDomainPtr dom,
if (qemudMonitorCommand(driver, vm, command, &info) < 0) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("migrate operation failed"));
free(command);
VIR_FREE(command);
return -1;
}
free(info);
free(command);
VIR_FREE(info);
VIR_FREE(command);
/* Shut it down */
qemudShutdownVMDaemon(dom->conn, driver, vm);
......@@ -2621,7 +2613,7 @@ static int qemudDomainRestore(virConnectPtr conn,
return -1;
}
if ((xml = (char *)malloc(header.xml_len)) == NULL) {
if (VIR_ALLOC_N(xml, header.xml_len) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("out of memory"));
close(fd);
......@@ -2632,7 +2624,7 @@ static int qemudDomainRestore(virConnectPtr conn,
qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("failed to read XML"));
close(fd);
free(xml);
VIR_FREE(xml);
return -1;
}
......@@ -2641,10 +2633,10 @@ static int qemudDomainRestore(virConnectPtr conn,
qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("failed to parse XML"));
close(fd);
free(xml);
VIR_FREE(xml);
return -1;
}
free(xml);
VIR_FREE(xml);
/* Ensure the name and UUID don't already exist in an active VM */
vm = qemudFindVMByUUID(driver, def->uuid);
......@@ -2687,7 +2679,7 @@ static int qemudDomainRestore(virConnectPtr conn,
"%s", _("failed to resume domain"));
return -1;
}
free(info);
VIR_FREE(info);
vm->state = VIR_DOMAIN_RUNNING;
}
......@@ -2729,7 +2721,7 @@ static int qemudListDefinedDomains(virConnectPtr conn,
cleanup:
for (i = 0 ; i < got ; i++)
free(names[i]);
VIR_FREE(names[i]);
return -1;
}
......@@ -2829,10 +2821,10 @@ static int qemudDomainChangeCDROM(virDomainPtr dom,
safe_path) == -1) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("out of memory"));
free(safe_path);
VIR_FREE(safe_path);
return -1;
}
free(safe_path);
VIR_FREE(safe_path);
} else if (asprintf(&cmd, "eject cdrom") == -1) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
......@@ -2843,11 +2835,11 @@ static int qemudDomainChangeCDROM(virDomainPtr dom,
if (qemudMonitorCommand(driver, vm, cmd, &reply) < 0) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("cannot change cdrom media"));
free(cmd);
VIR_FREE(cmd);
return -1;
}
free(reply);
free(cmd);
VIR_FREE(reply);
VIR_FREE(cmd);
strcpy(olddisk->src, newdisk->src);
olddisk->type = newdisk->type;
return 0;
......@@ -2880,7 +2872,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
if (dev->type != QEMUD_DEVICE_DISK || dev->data.disk.device != QEMUD_DISK_CDROM) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
"%s", _("only CDROM disk devices can be attached"));
free(dev);
VIR_FREE(dev);
return -1;
}
......@@ -2895,16 +2887,16 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
if (!disk) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
"%s", _("CDROM not attached, cannot change media"));
free(dev);
VIR_FREE(dev);
return -1;
}
if (qemudDomainChangeCDROM(dom, vm, disk, &dev->data.disk) < 0) {
free(dev);
VIR_FREE(dev);
return -1;
}
free(dev);
VIR_FREE(dev);
return 0;
}
......@@ -3242,7 +3234,7 @@ static int qemudListNetworks(virConnectPtr conn, char **const names, int nnames)
cleanup:
for (i = 0 ; i < got ; i++)
free(names[i]);
VIR_FREE(names[i]);
return -1;
}
......@@ -3270,7 +3262,7 @@ static int qemudListDefinedNetworks(virConnectPtr conn, char **const names, int
cleanup:
for (i = 0 ; i < got ; i++)
free(names[i]);
VIR_FREE(names[i]);
return -1;
}
......
......@@ -45,6 +45,7 @@
#include "util.h"
#include "uuid.h"
#include "capabilities.h"
#include "memory.h"
/* Flags that determine the action to take on a shutdown or crash of a domain
*/
......@@ -275,7 +276,7 @@ static int testLoadDomain(virConnectPtr conn,
testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("domain uuid"));
goto error;
}
free(str);
VIR_FREE(str);
ret = virXPathLong("string(/domain/memory[1])", ctxt, &l);
......@@ -309,30 +310,30 @@ static int testLoadDomain(virConnectPtr conn,
if (str != NULL) {
if (!(onReboot = testRestartStringToFlag(str))) {
testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("domain reboot behaviour"));
free(str);
VIR_FREE(str);
goto error;
}
free(str);
VIR_FREE(str);
}
str = virXPathString("string(/domain/on_poweroff[1])", ctxt);
if (str != NULL) {
if (!(onPoweroff = testRestartStringToFlag(str))) {
testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("domain poweroff behaviour"));
free(str);
VIR_FREE(str);
goto error;
}
free(str);
VIR_FREE(str);
}
str = virXPathString("string(/domain/on_crash[1])", ctxt);
if (str != NULL) {
if (!(onCrash = testRestartStringToFlag(str))) {
testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("domain crash behaviour"));
free(str);
VIR_FREE(str);
goto error;
}
free(str);
VIR_FREE(str);
}
for (i = 0 ; i < MAX_DOMAINS ; i++) {
......@@ -348,7 +349,7 @@ static int testLoadDomain(virConnectPtr conn,
privconn->domains[handle].id = domid;
strncpy(privconn->domains[handle].name, name, sizeof(privconn->domains[handle].name)-1);
privconn->domains[handle].name[sizeof(privconn->domains[handle].name)-1] = '\0';
free(name);
VIR_FREE(name);
name = NULL;
if (memory > maxMem)
......@@ -371,7 +372,7 @@ static int testLoadDomain(virConnectPtr conn,
error:
xmlXPathFreeContext(ctxt);
free(name);
VIR_FREE(name);
return (-1);
}
......@@ -464,7 +465,7 @@ static int testLoadNetwork(virConnectPtr conn,
testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("network uuid"));
goto error;
}
free(str);
VIR_FREE(str);
forward = virXPathBoolean("count(/network/forward) != 0", ctxt);
......@@ -512,10 +513,10 @@ static int testLoadNetwork(virConnectPtr conn,
privconn->networks[handle].name[sizeof(privconn->networks[handle].name)-1] = '\0';
strncpy(privconn->networks[handle].bridge, bridge ? bridge : name, sizeof(privconn->networks[handle].bridge)-1);
privconn->networks[handle].bridge[sizeof(privconn->networks[handle].bridge)-1] = '\0';
free(name);
VIR_FREE(name);
name = NULL;
if (bridge) {
free(bridge);
VIR_FREE(bridge);
bridge = NULL;
}
......@@ -524,32 +525,32 @@ static int testLoadNetwork(virConnectPtr conn,
if (forwardDev) {
strncpy(privconn->networks[handle].forwardDev, forwardDev, sizeof(privconn->networks[handle].forwardDev)-1);
privconn->networks[handle].forwardDev[sizeof(privconn->networks[handle].forwardDev)-1] = '\0';
free(forwardDev);
VIR_FREE(forwardDev);
}
strncpy(privconn->networks[handle].ipAddress, ipaddress, sizeof(privconn->networks[handle].ipAddress)-1);
privconn->networks[handle].ipAddress[sizeof(privconn->networks[handle].ipAddress)-1] = '\0';
free(ipaddress);
VIR_FREE(ipaddress);
strncpy(privconn->networks[handle].ipNetmask, ipnetmask, sizeof(privconn->networks[handle].ipNetmask)-1);
privconn->networks[handle].ipNetmask[sizeof(privconn->networks[handle].ipNetmask)-1] = '\0';
free(ipnetmask);
VIR_FREE(ipnetmask);
strncpy(privconn->networks[handle].dhcpStart, dhcpstart, sizeof(privconn->networks[handle].dhcpStart)-1);
privconn->networks[handle].dhcpStart[sizeof(privconn->networks[handle].dhcpStart)-1] = '\0';
free(dhcpstart);
VIR_FREE(dhcpstart);
strncpy(privconn->networks[handle].dhcpEnd, dhcpend, sizeof(privconn->networks[handle].dhcpEnd)-1);
privconn->networks[handle].dhcpEnd[sizeof(privconn->networks[handle].dhcpEnd)-1] = '\0';
free(dhcpend);
VIR_FREE(dhcpend);
xmlXPathFreeContext(ctxt);
return (handle);
error:
xmlXPathFreeContext(ctxt);
free (forwardDev);
free(ipaddress);
free(ipnetmask);
free(dhcpstart);
free(dhcpend);
free(name);
VIR_FREE (forwardDev);
VIR_FREE(ipaddress);
VIR_FREE(ipnetmask);
VIR_FREE(dhcpstart);
VIR_FREE(dhcpend);
VIR_FREE(name);
return (-1);
}
......@@ -601,8 +602,8 @@ static int testLoadNetworkFromFile(virConnectPtr conn,
static int testOpenDefault(virConnectPtr conn) {
int u;
struct timeval tv;
testConnPtr privconn = malloc(sizeof(*privconn));
if (!privconn) {
testConnPtr privconn;
if (VIR_ALLOC(privconn) < 0) {
testError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, "testConn");
return VIR_DRV_OPEN_ERROR;
}
......@@ -677,7 +678,9 @@ static char *testBuildFilename(const char *relativeTo,
offset = strrchr(relativeTo, '/');
if ((baseLen = (offset-relativeTo+1))) {
char *absFile = malloc(baseLen + strlen(filename) + 1);
char *absFile;
if (VIR_ALLOC_N(absFile, baseLen + strlen(filename) + 1) < 0)
return NULL;
strncpy(absFile, relativeTo, baseLen);
absFile[baseLen] = '\0';
strcat(absFile, filename);
......@@ -697,8 +700,8 @@ static int testOpenFromFile(virConnectPtr conn,
xmlNodePtr *domains, *networks = NULL;
xmlXPathContextPtr ctxt = NULL;
virNodeInfoPtr nodeInfo;
testConnPtr privconn = calloc(1, sizeof(*privconn));
if (!privconn) {
testConnPtr privconn;
if (VIR_ALLOC(privconn) < 0) {
testError(NULL, NULL, NULL, VIR_ERR_NO_MEMORY, "testConn");
return VIR_DRV_OPEN_ERROR;
}
......@@ -794,7 +797,7 @@ static int testOpenFromFile(virConnectPtr conn,
if (str != NULL) {
strncpy(nodeInfo->model, str, sizeof(nodeInfo->model)-1);
nodeInfo->model[sizeof(nodeInfo->model)-1] = '\0';
free(str);
VIR_FREE(str);
}
ret = virXPathLong("string(/node/memory[1])", ctxt, &l);
......@@ -815,21 +818,21 @@ static int testOpenFromFile(virConnectPtr conn,
xmlChar *domFile = xmlGetProp(domains[i], BAD_CAST "file");
char *absFile = testBuildFilename(file, (const char *)domFile);
int domid = privconn->nextDomID++, handle;
free(domFile);
VIR_FREE(domFile);
if (!absFile) {
testError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("resolving domain filename"));
goto error;
}
if ((handle = testLoadDomainFromFile(conn, domid, absFile)) < 0) {
free(absFile);
VIR_FREE(absFile);
goto error;
}
privconn->domains[handle].config = 1;
free(absFile);
VIR_FREE(absFile);
privconn->numDomains++;
}
if (domains != NULL) {
free(domains);
VIR_FREE(domains);
domains = NULL;
}
......@@ -840,21 +843,21 @@ static int testOpenFromFile(virConnectPtr conn,
xmlChar *netFile = xmlGetProp(networks[i], BAD_CAST "file");
char *absFile = testBuildFilename(file, (const char *)netFile);
int handle;
free(netFile);
VIR_FREE(netFile);
if (!absFile) {
testError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("resolving network filename"));
goto error;
}
if ((handle = testLoadNetworkFromFile(conn, absFile)) < 0) {
free(absFile);
VIR_FREE(absFile);
goto error;
}
privconn->networks[handle].config = 1;
free(absFile);
VIR_FREE(absFile);
privconn->numNetworks++;
}
if (networks != NULL) {
free(networks);
VIR_FREE(networks);
networks = NULL;
}
}
......@@ -866,13 +869,13 @@ static int testOpenFromFile(virConnectPtr conn,
error:
xmlXPathFreeContext(ctxt);
free(domains);
free(networks);
VIR_FREE(domains);
VIR_FREE(networks);
if (xml)
xmlFreeDoc(xml);
if (fd != -1)
close(fd);
free(privconn);
VIR_FREE(privconn);
conn->privateData = NULL;
return VIR_DRV_OPEN_ERROR;
}
......@@ -945,7 +948,7 @@ static int testOpen(virConnectPtr conn,
static int testClose(virConnectPtr conn)
{
GET_CONNECTION(conn, -1);
free (privconn);
VIR_FREE (privconn);
conn->privateData = conn;
return 0;
}
......@@ -1361,11 +1364,11 @@ static int testDomainSave(virDomainPtr domain,
if (safewrite(fd, xml, len) < 0) {
testError(domain->conn, domain, NULL, VIR_ERR_INTERNAL_ERROR,
_("cannot write metadata"));
free(xml);
VIR_FREE(xml);
close(fd);
return (-1);
}
free(xml);
VIR_FREE(xml);
if (close(fd) < 0) {
testError(domain->conn, domain, NULL, VIR_ERR_INTERNAL_ERROR,
_("cannot save domain data"));
......@@ -1419,8 +1422,7 @@ static int testDomainRestore(virConnectPtr conn,
close(fd);
return (-1);
}
xml = malloc(len+1);
if (!xml) {
if (VIR_ALLOC_N(xml, len+1) < 0) {
testError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, "xml");
close(fd);
return (-1);
......@@ -1435,7 +1437,7 @@ static int testDomainRestore(virConnectPtr conn,
close(fd);
domid = privconn->nextDomID++;
ret = testLoadDomainFromDoc(conn, domid, xml);
free(xml);
VIR_FREE(xml);
return ret < 0 ? -1 : 0;
}
......
......@@ -47,7 +47,7 @@
#include "event.h"
#include "buf.h"
#include "util.h"
#include "memory.h"
#include "util-lib.c"
#ifndef MIN
......@@ -302,19 +302,14 @@ fread_file_lim (FILE *stream, size_t max_len, size_t *length)
size_t requested;
if (size + BUFSIZ + 1 > alloc) {
char *new_buf;
alloc += alloc / 2;
if (alloc < size + BUFSIZ + 1)
alloc = size + BUFSIZ + 1;
new_buf = realloc (buf, alloc);
if (!new_buf) {
if (VIR_ALLOC_N(buf, alloc) < 0) {
save_errno = errno;
break;
}
buf = new_buf;
}
/* Ensure that (size + requested <= max_len); */
......@@ -358,7 +353,7 @@ int __virFileReadAll(const char *path, int maxlen, char **buf)
}
if (len > maxlen || (int)len != len) {
free(s);
VIR_FREE(s);
virLog("File '%s' is too large %d, max %d",
path, (int)len, maxlen);
goto error;
......
......@@ -44,6 +44,7 @@
#include "xend_internal.h"
#include "xen_internal.h" /* for DOM0_INTERFACE_VERSION */
#include "xs_internal.h" /* To extract VNC port & Serial console TTY */
#include "memory.h"
/* required for cpumap_t */
#include <xen/dom0_ops.h>
......@@ -630,7 +631,7 @@ xend_op_ext2(virConnectPtr xend, const char *path, char *error,
content = virBufferContentAndReset(&buf);
ret = http2unix(xend, xend_post(xend, path, content, error, n_error));
free(content);
VIR_FREE(content);
return ret;
}
......@@ -825,14 +826,15 @@ static char *
urlencode(const char *string)
{
size_t len = strlen(string);
char *buffer = malloc(len * 3 + 1);
char *ptr = buffer;
char *buffer;
char *ptr;
size_t i;
if (buffer == NULL) {
if (VIR_ALLOC_N(buffer, len * 3 + 1) < 0) {
virXendError(NULL, VIR_ERR_NO_MEMORY, _("allocate new buffer"));
return (NULL);
}
ptr = buffer;
for (i = 0; i < len; i++) {
switch (string[i]) {
case ' ':
......@@ -909,6 +911,7 @@ int is_sound_model_conflict(const char *model, const char *soundstr) {
char *sound_string_to_xml(const char *sound) {
virBuffer buf = VIR_BUFFER_INITIALIZER;
char *tmp;
while (sound) {
int modelsize, valid, collision = 0;
......@@ -925,15 +928,16 @@ char *sound_string_to_xml(const char *sound) {
if (STREQ(model, "all")) {
int i;
if (virBufferError(&buf)) {
free(model);
VIR_FREE(model);
goto error;
}
free(virBufferContentAndReset(&buf));
tmp = virBufferContentAndReset(&buf);
VIR_FREE(tmp);
for (i=0; i < sizeof(sound_models)/sizeof(*sound_models); ++i)
virBufferVSprintf(&buf, " <sound model='%s'/>\n",
sound_models[i]);
free(model);
VIR_FREE(model);
break;
}
}
......@@ -944,7 +948,7 @@ char *sound_string_to_xml(const char *sound) {
virBufferVSprintf(&buf, " <sound model='%s'/>\n", model);
sound = (model_end ? ++model_end : NULL);
free(model);
VIR_FREE(model);
}
if (virBufferError(&buf))
......@@ -952,7 +956,8 @@ char *sound_string_to_xml(const char *sound) {
return virBufferContentAndReset(&buf);
error:
free(virBufferContentAndReset(&buf));
tmp = virBufferContentAndReset(&buf);
VIR_FREE(tmp);
return NULL;
}
......@@ -1092,8 +1097,7 @@ xenDaemonListDomainsOld(virConnectPtr xend)
count++;
}
ptr = malloc((count + 1) * sizeof(char *) + extra);
if (ptr == NULL)
if (VIR_ALLOC_N(ptr, count + 1 + extra) < 0)
goto error;
ret = (char **) ptr;
......@@ -1149,7 +1153,7 @@ xenDaemonDomainCreateLinux(virConnectPtr xend, const char *sexpr)
ret = xend_op(xend, "", "op", "create", "config", ptr, NULL);
serrno = errno;
free(ptr);
VIR_FREE(ptr);
errno = serrno;
return ret;
......@@ -1250,10 +1254,8 @@ xenDaemonDomainLookupByID(virConnectPtr xend,
error:
sexpr_free(root);
if (domname && *domname) {
free(*domname);
*domname = NULL;
}
if (domname)
VIR_FREE(*domname);
return (-1);
}
......@@ -1694,11 +1696,11 @@ no_memory:
error:
free(path);
free(bindHost);
free(bindPort);
free(connectHost);
free(connectPort);
VIR_FREE(path);
VIR_FREE(bindHost);
VIR_FREE(bindPort);
VIR_FREE(connectHost);
VIR_FREE(connectPort);
return ret;
}
......@@ -1723,7 +1725,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
{
struct sexpr *cur, *node;
const char *tmp;
char *tty;
char *tty, *val;
virBuffer buf = VIR_BUFFER_INITIALIZER;
int hvm = 0, bootloader = 0, vfb = 0;
int domid = -1;
......@@ -1906,8 +1908,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
goto bad_parse;
}
drvName = malloc((offset-src)+1);
if (!drvName) {
if (VIR_ALLOC_N(drvName, (offset-src)+1) < 0) {
virXendError(conn, VIR_ERR_NO_MEMORY,
_("allocate new buffer"));
goto bad_parse;
......@@ -1925,8 +1926,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
goto bad_parse;
}
drvType = malloc((offset-src)+1);
if (!drvType) {
if (VIR_ALLOC_N(drvType, (offset-src)+1)< 0) {
virXendError(conn, VIR_ERR_NO_MEMORY,
_("allocate new buffer"));
goto bad_parse;
......@@ -2004,8 +2004,8 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
virBufferAddLit(&buf, " </disk>\n");
bad_parse:
free(drvName);
free(drvType);
VIR_FREE(drvName);
VIR_FREE(drvType);
} else if (sexpr_lookup(node, "device/vif")) {
const char *tmp2, *model;
tmp2 = sexpr_node(node, "device/vif/script");
......@@ -2191,7 +2191,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
virBufferAddLit(&buf, " <target port='0'/>\n");
virBufferAddLit(&buf, " </console>\n");
}
free(tty);
VIR_FREE(tty);
if (hvm) {
if (sexpr_node(root, "domain/image/hvm/soundhw")) {
......@@ -2200,7 +2200,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
if (tmp && *tmp) {
if ((soundxml = sound_string_to_xml(tmp))) {
virBufferVSprintf(&buf, "%s", soundxml);
free(soundxml);
VIR_FREE(soundxml);
} else {
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
_("parsing soundhw string failed."));
......@@ -2221,7 +2221,8 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
return virBufferContentAndReset(&buf);
error:
free(virBufferContentAndReset(&buf));
val = virBufferContentAndReset(&buf);
VIR_FREE(val);
return (NULL);
}
......@@ -2379,11 +2380,9 @@ sexpr_to_xend_topology(virConnectPtr conn,
numCpus = sexpr_int(root, "node/nr_cpus");
cpuset = malloc(numCpus * sizeof(*cpuset));
if (cpuset == NULL)
if (VIR_ALLOC_N(cpuset, numCpus) < 0)
goto memory_error;
cpuNums = malloc(numCpus * sizeof(*cpuNums));
if (cpuNums == NULL)
if (VIR_ALLOC_N(cpuNums, numCpus) < 0)
goto memory_error;
cur = nodeToCpu;
......@@ -2423,21 +2422,21 @@ sexpr_to_xend_topology(virConnectPtr conn,
cpuNums) < 0)
goto memory_error;
}
free(cpuNums);
free(cpuset);
VIR_FREE(cpuNums);
VIR_FREE(cpuset);
return (0);
parse_error:
virXendError(conn, VIR_ERR_XEN_CALL, _("topology syntax error"));
error:
free(cpuNums);
free(cpuset);
VIR_FREE(cpuNums);
VIR_FREE(cpuset);
return (-1);
memory_error:
free(cpuNums);
free(cpuset);
VIR_FREE(cpuNums);
VIR_FREE(cpuset);
virXendError(conn, VIR_ERR_NO_MEMORY, _("allocate buffer"));
return (-1);
}
......@@ -3269,7 +3268,7 @@ xenDaemonListDomains(virConnectPtr conn, int *ids, int maxids)
}
error:
sexpr_free(root);
sexpr_free(root);
return(ret);
}
......@@ -3302,7 +3301,7 @@ xenDaemonNumOfDomains(virConnectPtr conn)
}
error:
sexpr_free(root);
sexpr_free(root);
return(ret);
}
#endif /* ! PROXY */
......@@ -3331,11 +3330,11 @@ xenDaemonLookupByID(virConnectPtr conn, int id) {
if (ret == NULL) return NULL;
ret->id = id;
free(name);
VIR_FREE(name);
return (ret);
error:
free(name);
VIR_FREE(name);
return (NULL);
}
......@@ -3543,7 +3542,7 @@ xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
}
tmp++;
}
free(names);
VIR_FREE(names);
} else { /* New approach for xen >= 3.0.4 */
char *domname = NULL;
char uuidstr[VIR_UUID_STRING_BUFLEN];
......@@ -3569,7 +3568,7 @@ xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
if (ret == NULL) return NULL;
ret->id = id;
free(name);
VIR_FREE(name);
return (ret);
}
......@@ -3610,14 +3609,14 @@ xenDaemonCreateLinux(virConnectPtr conn, const char *xmlDesc,
if ((sexpr == NULL) || (name == NULL)) {
virXendError(conn, VIR_ERR_XML_ERROR,
_("failed to parse domain description"));
free(sexpr);
free(name);
VIR_FREE(sexpr);
VIR_FREE(name);
return (NULL);
}
ret = xenDaemonDomainCreateLinux(conn, sexpr);
free(sexpr);
VIR_FREE(sexpr);
if (ret != 0) {
goto error;
}
......@@ -3633,7 +3632,7 @@ xenDaemonCreateLinux(virConnectPtr conn, const char *xmlDesc,
if ((ret = xenDaemonDomainResume(dom)) < 0)
goto error;
free(name);
VIR_FREE(name);
return (dom);
......@@ -3643,7 +3642,7 @@ xenDaemonCreateLinux(virConnectPtr conn, const char *xmlDesc,
xenDaemonDomainDestroy(dom);
virUnrefDomain(dom);
}
free(name);
VIR_FREE(name);
return (NULL);
}
......@@ -3683,7 +3682,7 @@ xenDaemonAttachDevice(virDomainPtr domain, const char *xml)
str = virDomainGetOSType(domain);
if (STREQ(str, "hvm"))
hvm = 1;
free(str);
VIR_FREE(str);
sexpr = virParseXMLDevice(domain->conn, xml, hvm, priv->xendConfigVersion);
if (sexpr == NULL)
return (-1);
......@@ -3702,7 +3701,7 @@ xenDaemonAttachDevice(virDomainPtr domain, const char *xml)
ret = xend_op(domain->conn, domain->name, "op", "device_configure",
"config", conf, "dev", ref, NULL);
}
free(sexpr);
VIR_FREE(sexpr);
return ret;
}
......@@ -3810,7 +3809,7 @@ xenDaemonDomainSetAutostart(virDomainPtr domain,
// Change the autostart value in place, then define the new sexpr
autonode = sexpr_lookup(root, "domain/on_xend_start");
free(autonode->u.s.car->u.value);
VIR_FREE(autonode->u.s.car->u.value);
autonode->u.s.car->u.value = (autostart ? strdup("start")
: strdup("ignore"));
if (!(autonode->u.s.car->u.value)) {
......@@ -3996,7 +3995,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
"port", port,
"resource", "0", /* required, xend ignores it */
NULL);
free (hostname);
VIR_FREE (hostname);
DEBUG0("migration done");
......@@ -4028,14 +4027,14 @@ virDomainPtr xenDaemonDomainDefineXML(virConnectPtr conn, const char *xmlDesc) {
if ((sexpr == NULL) || (name == NULL)) {
virXendError(conn, VIR_ERR_XML_ERROR,
_("failed to parse domain description"));
free(sexpr);
free(name);
VIR_FREE(sexpr);
VIR_FREE(name);
return (NULL);
}
ret = xend_op(conn, "", "op", "new", "config", sexpr, NULL);
free(sexpr);
VIR_FREE(sexpr);
if (ret != 0) {
fprintf(stderr, _("Failed to create inactive domain %s\n"), name);
goto error;
......@@ -4048,7 +4047,7 @@ virDomainPtr xenDaemonDomainDefineXML(virConnectPtr conn, const char *xmlDesc) {
return (dom);
error:
free(name);
VIR_FREE(name);
return (NULL);
}
int xenDaemonDomainCreate(virDomainPtr domain)
......@@ -4318,7 +4317,7 @@ xenDaemonGetSchedulerParameters(virDomainPtr domain,
error:
sexpr_free(root);
free(sched_type);
VIR_FREE(sched_type);
return (ret);
}
......@@ -4430,7 +4429,7 @@ xenDaemonSetSchedulerParameters(virDomainPtr domain,
error:
sexpr_free(root);
free(sched_type);
VIR_FREE(sched_type);
return (ret);
}
......
此差异已折叠。
......@@ -26,6 +26,7 @@
#include "xml.h"
#include "buf.h"
#include "util.h"
#include "memory.h"
#include "xs_internal.h" /* for xenStoreDomainGetNetworkID */
#include "xen_unified.h"
#include "xend_internal.h" /* for is_sound_* functions */
......@@ -274,19 +275,18 @@ virConvertCpuSet(virConnectPtr conn, const char *str, int maxcpu) {
if (maxcpu <= 0)
maxcpu = 4096;
cpuset = calloc(maxcpu, sizeof(*cpuset));
if (cpuset == NULL) {
if (VIR_ALLOC_N(cpuset, maxcpu) < 0) {
virXMLError(conn, VIR_ERR_NO_MEMORY, _("allocate buffer"), 0);
return(NULL);
}
ret = virParseCpuSet(conn, &cur, 0, cpuset, maxcpu);
if (ret < 0) {
free(cpuset);
VIR_FREE(cpuset);
return(NULL);
}
res = virSaveCpuSet(conn, cpuset, maxcpu);
free(cpuset);
VIR_FREE(cpuset);
return (res);
}
......@@ -309,7 +309,7 @@ char * virBuildSoundStringFromXML(virConnectPtr conn,
char *sound;
xmlNodePtr *nodes = NULL;
if (!(sound = calloc(1, size+1))) {
if (VIR_ALLOC_N(sound, size + 1) < 0) {
virXMLError(conn, VIR_ERR_NO_MEMORY,
_("failed to allocate sound string"), 0);
return NULL;
......@@ -332,7 +332,7 @@ char * virBuildSoundStringFromXML(virConnectPtr conn,
if (!is_sound_model_valid(model)) {
virXMLError(conn, VIR_ERR_XML_ERROR,
_("unknown sound model type"), 0);
free(model);
VIR_FREE(model);
goto error;
}
......@@ -345,21 +345,21 @@ char * virBuildSoundStringFromXML(virConnectPtr conn,
if (*sound && (size >= (strlen(model) + 1))) {
strncat(sound, ",", size--);
} else if (*sound || size < strlen(model)) {
free(model);
VIR_FREE(model);
continue;
}
strncat(sound, model, size);
size -= strlen(model);
}
free(model);
VIR_FREE(model);
}
}
free(nodes);
VIR_FREE(nodes);
return sound;
error:
free(nodes);
VIR_FREE(nodes);
return NULL;
}
#endif /* !PROXY */
......@@ -590,11 +590,11 @@ virXPathNodeSet(const char *xpath, xmlXPathContextPtr ctxt,
ret = obj->nodesetval->nodeNr;
if (list != NULL) {
*list = malloc(ret * sizeof(**list));
if (*list == NULL) {
if (VIR_ALLOC_N(*list, ret) < 0) {
virXMLError(NULL, VIR_ERR_NO_MEMORY,
_("allocate string array"),
ret * sizeof(**list));
ret = -1;
} else {
memcpy(*list, obj->nodesetval->nodeTab,
ret * sizeof(xmlNodePtr));
......@@ -1026,7 +1026,7 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
fdfile = xmlGetProp(cur, BAD_CAST "file");
if (fdfile != NULL) {
virBufferVSprintf(buf, "(fda '%s')", fdfile);
free(fdfile);
VIR_FREE(fdfile);
}
}
......@@ -1040,7 +1040,7 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
fdfile = xmlGetProp(cur, BAD_CAST "file");
if (fdfile != NULL) {
virBufferVSprintf(buf, "(fdb '%s')", fdfile);
free(fdfile);
VIR_FREE(fdfile);
}
}
......@@ -1118,7 +1118,7 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
}
xmlFree(bus);
}
free(nodes);
VIR_FREE(nodes);
nodes = NULL;
}
......@@ -1157,19 +1157,19 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
if (!(soundstr = virBuildSoundStringFromXML(conn, ctxt)))
goto error;
virBufferVSprintf(buf, "(soundhw '%s')", soundstr);
free(soundstr);
VIR_FREE(soundstr);
}
str = virXPathString("string(/domain/clock/@offset)", ctxt);
if (str != NULL && STREQ(str, "localtime")) {
virBufferAddLit(buf, "(localtime 1)");
}
free(str);
VIR_FREE(str);
return (0);
error:
free(nodes);
VIR_FREE(nodes);
return (-1);
}
......@@ -1531,7 +1531,7 @@ virDomainParseXMLIfDesc(virConnectPtr conn ATTRIBUTE_UNUSED,
}
virNetworkFree(network);
virBufferVSprintf(buf, "(bridge '%s')", bridge);
free(bridge);
VIR_FREE(bridge);
}
}
if (script != NULL)
......@@ -1578,7 +1578,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
{
xmlDocPtr xml = NULL;
xmlNodePtr node;
char *nam = NULL;
char *nam = NULL, *tmp;
virBuffer buf = VIR_BUFFER_INITIALIZER;
xmlChar *prop;
xmlParserCtxtPtr pctxt;
......@@ -1675,30 +1675,29 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
* it in a range format guaranteed to be understood by Xen.
*/
if (maxcpu > 0) {
cpuset = malloc(maxcpu * sizeof(*cpuset));
if (cpuset != NULL) {
res = virParseCpuSet(conn, &cur, 0, cpuset, maxcpu);
if (res > 0) {
ranges = virSaveCpuSet(conn, cpuset, maxcpu);
if (ranges != NULL) {
virBufferVSprintf(&buf, "(cpus '%s')", ranges);
free(ranges);
}
}
free(cpuset);
if (res < 0)
goto error;
} else {
if (VIR_ALLOC_N(cpuset, maxcpu) < 0) {
virXMLError(conn, VIR_ERR_NO_MEMORY, xmldesc, 0);
goto error;
}
res = virParseCpuSet(conn, &cur, 0, cpuset, maxcpu);
if (res > 0) {
ranges = virSaveCpuSet(conn, cpuset, maxcpu);
if (ranges != NULL) {
virBufferVSprintf(&buf, "(cpus '%s')", ranges);
VIR_FREE(ranges);
}
}
VIR_FREE(cpuset);
if (res < 0)
goto error;
}
free(str);
VIR_FREE(str);
}
str = virXPathString("string(/domain/uuid[1])", ctxt);
if (str != NULL) {
virBufferVSprintf(&buf, "(uuid '%s')", str);
free(str);
VIR_FREE(str);
}
str = virXPathString("string(/domain/bootloader[1])", ctxt);
......@@ -1709,7 +1708,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
* significant and should be discarded
*/
bootloader = 1;
free(str);
VIR_FREE(str);
} else if (virXPathNumber("count(/domain/bootloader)", ctxt, &f) == 0
&& (f > 0)) {
virBufferAddLit(&buf, "(bootloader)");
......@@ -1726,25 +1725,25 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
* ignore the bootloader_args value unless a bootloader was specified
*/
virBufferVSprintf(&buf, "(bootloader_args '%s')", str);
free(str);
VIR_FREE(str);
}
str = virXPathString("string(/domain/on_poweroff[1])", ctxt);
if (str != NULL) {
virBufferVSprintf(&buf, "(on_poweroff '%s')", str);
free(str);
VIR_FREE(str);
}
str = virXPathString("string(/domain/on_reboot[1])", ctxt);
if (str != NULL) {
virBufferVSprintf(&buf, "(on_reboot '%s')", str);
free(str);
VIR_FREE(str);
}
str = virXPathString("string(/domain/on_crash[1])", ctxt);
if (str != NULL) {
virBufferVSprintf(&buf, "(on_crash '%s')", str);
free(str);
VIR_FREE(str);
}
if (!bootloader) {
......@@ -1810,11 +1809,11 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
res = virDomainParseXMLDiskDesc(conn, nodes[i], &buf,
hvm, xendConfigVersion);
if (res != 0) {
free(nodes);
VIR_FREE(nodes);
goto error;
}
}
free(nodes);
VIR_FREE(nodes);
}
nb_nodes = virXPathNodeSet("/domain/devices/interface", ctxt, &nodes);
......@@ -1825,12 +1824,12 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
virDomainParseXMLIfDesc(conn, nodes[i], &buf, hvm,
xendConfigVersion);
if (res != 0) {
free(nodes);
VIR_FREE(nodes);
goto error;
}
virBufferAddLit(&buf, ")");
}
free(nodes);
VIR_FREE(nodes);
}
/* New style PV graphics config xen >= 3.0.4,
......@@ -1842,11 +1841,11 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
for (i = 0; i < nb_nodes; i++) {
res = virDomainParseXMLGraphicsDescVFB(conn, nodes[i], &buf);
if (res != 0) {
free(nodes);
VIR_FREE(nodes);
goto error;
}
}
free(nodes);
VIR_FREE(nodes);
}
}
......@@ -1860,7 +1859,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
if (name != NULL)
*name = nam;
else
free(nam);
VIR_FREE(nam);
if (virBufferError(&buf)) {
virXMLError(conn, VIR_ERR_NO_MEMORY, _("allocate buffer"), 0);
......@@ -1870,7 +1869,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
return virBufferContentAndReset(&buf);
error:
free(nam);
VIR_FREE(nam);
if (name != NULL)
*name = NULL;
xmlXPathFreeContext(ctxt);
......@@ -1878,7 +1877,8 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
xmlFreeDoc(xml);
if (pctxt != NULL)
xmlFreeParserCtxt(pctxt);
free(virBufferContentAndReset(&buf));
tmp = virBufferContentAndReset(&buf);
VIR_FREE(tmp);
return (NULL);
}
......
......@@ -9,7 +9,7 @@
#include "testutils.h"
static char *progname;
static char *abs_top_srcdir;
static char *abs_srcdir;
#define MAX_FILE 4096
static int testFilterLine(char *buffer,
......@@ -36,7 +36,7 @@ static int testCompareOutput(const char *expect_rel, const char *filter,
char *actualPtr = &(actualData[0]);
char expect[PATH_MAX];
snprintf(expect, sizeof expect - 1, "%s/tests/%s", abs_top_srcdir, expect_rel);
snprintf(expect, sizeof expect - 1, "%s/%s", abs_srcdir, expect_rel);
if (virtTestLoadFile(expect, &expectPtr, MAX_FILE) < 0)
return -1;
......@@ -271,24 +271,25 @@ static int testCompareDomstateByName(const void *data ATTRIBUTE_UNUSED) {
int
main(int argc, char **argv)
static int
mymain(int argc, char **argv)
{
int ret = 0;
char buffer[PATH_MAX];
char cwd[PATH_MAX];
abs_top_srcdir = getenv("abs_top_srcdir");
if (!abs_top_srcdir)
return 1;
abs_srcdir = getenv("abs_srcdir");
if (!abs_srcdir)
abs_srcdir = getcwd(cwd, sizeof(cwd));
snprintf(buffer, PATH_MAX-1, "test://%s/docs/testnode.xml", abs_top_srcdir);
snprintf(buffer, PATH_MAX-1, "test://%s/../docs/testnode.xml", abs_srcdir);
buffer[PATH_MAX-1] = '\0';
progname = argv[0];
custom_uri = buffer;
if (argc > 1) {
fprintf(stderr, "Usage: %s\n", progname);
exit(EXIT_FAILURE);
return(EXIT_FAILURE);
}
if (virtTestRun("virsh list (default)",
......@@ -355,5 +356,7 @@ main(int argc, char **argv)
1, testCompareDomstateByName, NULL) != 0)
ret = -1;
exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
VIRT_TEST_MAIN(mymain)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册