+Fri Oct 10 15:19:00 BST 2008 Daniel P. Berrange <berrange@redhat.com>
+
+ * src/domain_conf.c, src/domain_conf.h: Switch to using
+ array instead of linked list for domain objects
+ * src/lxc_conf.h, src/lxc_driver.c, src/openvz_conf.c,
+ src/openvz_conf.h, src/openvz_driver.c, src/qemu_conf.h,
+ src/qemu_driver.c test.c: Update to manage domain objects
+ in array instead of linked list
+
Fri Oct 10 14:56:00 BST 2008 Daniel P. Berrange <berrange@redhat.com>
* configure.in: option to enable/disable network driver
__virReportErrorHelper(conn, VIR_FROM_DOMAIN, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
-virDomainObjPtr virDomainFindByID(const virDomainObjPtr doms,
+virDomainObjPtr virDomainFindByID(const virDomainObjListPtr doms,
int id)
{
- virDomainObjPtr dom = doms;
- while (dom) {
- if (virDomainIsActive(dom) && dom->def->id == id)
- return dom;
- dom = dom->next;
- }
+ unsigned int i;
+
+ for (i = 0 ; i < doms->count ; i++)
+ if (virDomainIsActive(doms->objs[i]) &&
+ doms->objs[i]->def->id == id)
+ return doms->objs[i];
return NULL;
}
-virDomainObjPtr virDomainFindByUUID(const virDomainObjPtr doms,
+virDomainObjPtr virDomainFindByUUID(const virDomainObjListPtr doms,
const unsigned char *uuid)
{
- virDomainObjPtr dom = doms;
+ unsigned int i;
- while (dom) {
- if (!memcmp(dom->def->uuid, uuid, VIR_UUID_BUFLEN))
- return dom;
- dom = dom->next;
- }
+ for (i = 0 ; i < doms->count ; i++)
+ if (!memcmp(doms->objs[i]->def->uuid, uuid, VIR_UUID_BUFLEN))
+ return doms->objs[i];
return NULL;
}
-virDomainObjPtr virDomainFindByName(const virDomainObjPtr doms,
+virDomainObjPtr virDomainFindByName(const virDomainObjListPtr doms,
const char *name)
{
- virDomainObjPtr dom = doms;
+ unsigned int i;
- while (dom) {
- if (STREQ(dom->def->name, name))
- return dom;
- dom = dom->next;
- }
+ for (i = 0 ; i < doms->count ; i++)
+ if (STREQ(doms->objs[i]->def->name, name))
+ return doms->objs[i];
return NULL;
}
VIR_FREE(dom);
}
+void virDomainObjListFree(virDomainObjListPtr vms)
+{
+ unsigned int i;
+
+ for (i = 0 ; i < vms->count ; i++)
+ virDomainObjFree(vms->objs[i]);
+
+ VIR_FREE(vms->objs);
+ vms->count = 0;
+}
+
virDomainObjPtr virDomainAssignDef(virConnectPtr conn,
- virDomainObjPtr *doms,
+ virDomainObjListPtr doms,
const virDomainDefPtr def)
{
virDomainObjPtr domain;
- if ((domain = virDomainFindByName(*doms, def->name))) {
+ if ((domain = virDomainFindByName(doms, def->name))) {
if (!virDomainIsActive(domain)) {
virDomainDefFree(domain->def);
domain->def = def;
domain->state = VIR_DOMAIN_SHUTOFF;
domain->def = def;
- domain->next = *doms;
- *doms = domain;
+ if (VIR_REALLOC_N(doms->objs, doms->count + 1) < 0) {
+ virDomainReportError(conn, VIR_ERR_NO_MEMORY, NULL);
+ VIR_FREE(domain);
+ return NULL;
+ }
+
+ doms->objs[doms->count] = domain;
+ doms->count++;
return domain;
}
-void virDomainRemoveInactive(virDomainObjPtr *doms,
+void virDomainRemoveInactive(virDomainObjListPtr doms,
virDomainObjPtr dom)
{
- virDomainObjPtr prev = NULL;
- virDomainObjPtr curr = *doms;
+ unsigned int i;
- while (curr &&
- curr != dom) {
- prev = curr;
- curr = curr->next;
- }
+ for (i = 0 ; i < doms->count ; i++) {
+ if (doms->objs[i] == dom) {
+ virDomainObjFree(doms->objs[i]);
- if (curr) {
- if (prev)
- prev->next = curr->next;
- else
- *doms = curr->next;
+ if (i < (doms->count - 1))
+ memmove(doms->objs + i, doms->objs + i + 1,
+ sizeof(*(doms->objs)) * (doms->count - (i + 1)));
+
+ if (VIR_REALLOC_N(doms->objs, doms->count - 1) < 0) {
+ ; /* Failure to reduce memory allocation isn't fatal */
+ }
+ doms->count--;
+
+ break;
+ }
}
- virDomainObjFree(dom);
}
#ifndef PROXY
virDomainObjPtr virDomainLoadConfig(virConnectPtr conn,
virCapsPtr caps,
- virDomainObjPtr *doms,
+ virDomainObjListPtr doms,
const char *configDir,
const char *autostartDir,
const char *name)
int virDomainLoadAllConfigs(virConnectPtr conn,
virCapsPtr caps,
- virDomainObjPtr *doms,
+ virDomainObjListPtr doms,
const char *configDir,
const char *autostartDir)
{
virDomainDefPtr def; /* The current definition */
virDomainDefPtr newDef; /* New definition to activate at shutdown */
-
- virDomainObjPtr next;
};
+typedef struct _virDomainObjList virDomainObjList;
+typedef virDomainObjList *virDomainObjListPtr;
+struct _virDomainObjList {
+ unsigned int count;
+ virDomainObjPtr *objs;
+};
static inline int
virDomainIsActive(virDomainObjPtr dom)
}
-virDomainObjPtr virDomainFindByID(const virDomainObjPtr doms,
+virDomainObjPtr virDomainFindByID(const virDomainObjListPtr doms,
int id);
-virDomainObjPtr virDomainFindByUUID(const virDomainObjPtr doms,
+virDomainObjPtr virDomainFindByUUID(const virDomainObjListPtr doms,
const unsigned char *uuid);
-virDomainObjPtr virDomainFindByName(const virDomainObjPtr doms,
+virDomainObjPtr virDomainFindByName(const virDomainObjListPtr doms,
const char *name);
void virDomainDeviceDefFree(virDomainDeviceDefPtr def);
void virDomainDefFree(virDomainDefPtr vm);
void virDomainObjFree(virDomainObjPtr vm);
+void virDomainObjListFree(virDomainObjListPtr vms);
virDomainObjPtr virDomainAssignDef(virConnectPtr conn,
- virDomainObjPtr *doms,
+ virDomainObjListPtr doms,
const virDomainDefPtr def);
-void virDomainRemoveInactive(virDomainObjPtr *doms,
+void virDomainRemoveInactive(virDomainObjListPtr doms,
virDomainObjPtr dom);
#ifndef PROXY
virDomainObjPtr virDomainLoadConfig(virConnectPtr conn,
virCapsPtr caps,
- virDomainObjPtr *doms,
+ virDomainObjListPtr doms,
const char *configDir,
const char *autostartDir,
const char *name);
int virDomainLoadAllConfigs(virConnectPtr conn,
virCapsPtr caps,
- virDomainObjPtr *doms,
+ virDomainObjListPtr doms,
const char *configDir,
const char *autostartDir);
struct __lxc_driver {
virCapsPtr caps;
- virDomainObjPtr domains;
+ virDomainObjList domains;
char *configDir;
char *autostartDir;
char *stateDir;
int id)
{
lxc_driver_t *driver = (lxc_driver_t *)conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, id);
virDomainPtr dom;
if (!vm) {
const unsigned char *uuid)
{
lxc_driver_t *driver = (lxc_driver_t *)conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, uuid);
virDomainPtr dom;
if (!vm) {
const char *name)
{
lxc_driver_t *driver = (lxc_driver_t *)conn->privateData;
- virDomainObjPtr vm = virDomainFindByName(driver->domains, name);
+ virDomainObjPtr vm = virDomainFindByName(&driver->domains, name);
virDomainPtr dom;
if (!vm) {
static int lxcListDomains(virConnectPtr conn, int *ids, int nids) {
lxc_driver_t *driver = (lxc_driver_t *)conn->privateData;
- virDomainObjPtr vm = driver->domains;
- int got = 0;
- while (vm && got < nids) {
- if (virDomainIsActive(vm)) {
- ids[got] = vm->def->id;
- got++;
- }
- vm = vm->next;
- }
+ int got = 0, i;
+
+ for (i = 0 ; i < driver->domains.count && got < nids ; i++)
+ if (virDomainIsActive(driver->domains.objs[i]))
+ ids[got++] = driver->domains.objs[i]->def->id;
+
return got;
}
static int lxcNumDomains(virConnectPtr conn) {
lxc_driver_t *driver = (lxc_driver_t *)conn->privateData;
- int n = 0;
- virDomainObjPtr dom = driver->domains;
- while (dom) {
- if (virDomainIsActive(dom))
+ int n = 0, i;
+
+ for (i = 0 ; i < driver->domains.count ; i++)
+ if (virDomainIsActive(driver->domains.objs[i]))
n++;
- dom = dom->next;
- }
+
return n;
}
static int lxcListDefinedDomains(virConnectPtr conn,
char **const names, int nnames) {
lxc_driver_t *driver = (lxc_driver_t *)conn->privateData;
- virDomainObjPtr vm = driver->domains;
int got = 0, i;
- while (vm && got < nnames) {
- if (!virDomainIsActive(vm)) {
- if (!(names[got] = strdup(vm->def->name))) {
- lxcError(conn, NULL, VIR_ERR_NO_MEMORY, NULL);
+
+ for (i = 0 ; i < driver->domains.count && got < nnames ; i++) {
+ if (!virDomainIsActive(driver->domains.objs[i])) {
+ if (!(names[got++] = strdup(driver->domains.objs[i]->def->name))) {
+ lxcError(conn, NULL, VIR_ERR_NO_MEMORY,
+ "%s", _("failed to allocate space for VM name string"));
goto cleanup;
}
- got++;
}
- vm = vm->next;
}
+
return got;
cleanup:
static int lxcNumDefinedDomains(virConnectPtr conn) {
lxc_driver_t *driver = (lxc_driver_t *)conn->privateData;
- int n = 0;
- virDomainObjPtr dom = driver->domains;
- while (dom) {
- if (!virDomainIsActive(dom))
+ int n = 0, i;
+
+ for (i = 0 ; i < driver->domains.count ; i++)
+ if (!virDomainIsActive(driver->domains.objs[i]))
n++;
- dom = dom->next;
- }
+
return n;
}
static int lxcDomainUndefine(virDomainPtr dom)
{
lxc_driver_t *driver = (lxc_driver_t *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
lxcError(dom->conn, dom, VIR_ERR_INVALID_DOMAIN,
virDomainInfoPtr info)
{
lxc_driver_t *driver = (lxc_driver_t *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
lxcError(dom->conn, dom, VIR_ERR_INVALID_DOMAIN,
static char *lxcGetOSType(virDomainPtr dom)
{
lxc_driver_t *driver = (lxc_driver_t *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
lxcError(dom->conn, dom, VIR_ERR_INVALID_DOMAIN,
int flags)
{
lxc_driver_t *driver = (lxc_driver_t *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
lxcError(dom->conn, dom, VIR_ERR_INVALID_DOMAIN,
void *data)
{
lxc_driver_t *driver = data;
- virDomainObjPtr vm = driver->domains;
+ virDomainObjPtr vm = NULL;
+ unsigned int i;
- while (vm) {
- if (vm->monitor == fd)
+ for (i = 0 ; i < driver->domains.count ; i++) {
+ if (driver->domains.objs[i]->monitor == fd) {
+ vm = driver->domains.objs[i];
break;
- vm = vm->next;
+ }
}
if (!vm) {
virEventRemoveHandle(fd);
int rc = -1;
virConnectPtr conn = dom->conn;
lxc_driver_t *driver = (lxc_driver_t *)(conn->privateData);
- virDomainObjPtr vm = virDomainFindByName(driver->domains, dom->name);
+ virDomainObjPtr vm = virDomainFindByName(&driver->domains, dom->name);
if (!vm) {
lxcError(conn, dom, VIR_ERR_INVALID_DOMAIN,
static int lxcDomainShutdown(virDomainPtr dom)
{
lxc_driver_t *driver = (lxc_driver_t*)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
if (!vm) {
lxcError(dom->conn, dom, VIR_ERR_INVALID_DOMAIN,
static int lxcDomainDestroy(virDomainPtr dom)
{
lxc_driver_t *driver = (lxc_driver_t*)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
if (!vm) {
lxcError(dom->conn, dom, VIR_ERR_INVALID_DOMAIN,
static int lxcStartup(void)
{
uid_t uid = getuid();
- virDomainObjPtr vm;
+ unsigned int i;
/* Check that the user is root */
if (0 != uid) {
return -1;
}
- vm = lxc_driver->domains;
- while (vm) {
+ for (i = 0 ; i < lxc_driver->domains.count ; i++) {
+ virDomainObjPtr vm = lxc_driver->domains.objs[i];
char *config = NULL;
virDomainDefPtr tmp;
int rc;
- if ((vm->monitor = lxcMonitorClient(NULL, lxc_driver, vm)) < 0) {
- vm = vm->next;
+ if ((vm->monitor = lxcMonitorClient(NULL, lxc_driver, vm)) < 0)
continue;
- }
/* Read pid from controller */
if ((rc = virFileReadPid(lxc_driver->stateDir, vm->def->name, &vm->pid)) != 0) {
close(vm->monitor);
vm->monitor = -1;
- vm = vm->next;
continue;
}
close(vm->monitor);
vm->monitor = -1;
}
-
- vm = vm->next;
}
return 0;
static int lxcShutdown(void)
{
- virDomainObjPtr vm;
if (lxc_driver == NULL)
return(-1);
- vm = lxc_driver->domains;
- while (vm) {
- virDomainObjPtr next = vm->next;
- virDomainObjFree(vm);
- vm = next;
- }
+
+ virDomainObjListFree(&lxc_driver->domains);
lxcFreeDriver(lxc_driver);
lxc_driver = NULL;
*/
static int
lxcActive(void) {
- virDomainObjPtr dom;
+ unsigned int i;
if (lxc_driver == NULL)
return(0);
- dom = lxc_driver->domains;
- while (dom) {
- if (virDomainIsActive(dom))
+ for (i = 0 ; i < lxc_driver->domains.count ; i++)
+ if (virDomainIsActive(lxc_driver->domains.objs[i]))
return 1;
- dom = dom->next;
- }
/* Otherwise we're happy to deal with a shutdown */
return 0;
if (virCgroupHaveSupport() != 0)
return 0;
- domain = virDomainFindByUUID(lxc_driver->domains, _domain->uuid);
+ domain = virDomainFindByUUID(&lxc_driver->domains, _domain->uuid);
if (domain == NULL) {
lxcError(NULL, _domain, VIR_ERR_INTERNAL_ERROR,
_("No such domain %s"), _domain->uuid);
return -1;
}
- domain = virDomainFindByUUID(lxc_driver->domains, _domain->uuid);
+ domain = virDomainFindByUUID(&lxc_driver->domains, _domain->uuid);
if (domain == NULL) {
lxcError(NULL, _domain, VIR_ERR_INTERNAL_ERROR,
_("No such domain %s"), _domain->uuid);
void
openvzFreeDriver(struct openvz_driver *driver)
{
- virDomainObjPtr dom;
-
if (!driver)
return;
- dom = driver->domains;
- while (dom) {
- virDomainObjPtr tmp = dom->next;
- virDomainObjFree(dom);
- dom = tmp;
- }
-
+ virDomainObjListFree(&driver->domains);
virCapabilitiesFree(driver->caps);
}
int veid, ret;
char status[16];
char uuidstr[VIR_UUID_STRING_BUFLEN];
- virDomainObjPtr dom = NULL, prev = NULL;
+ virDomainObjPtr dom = NULL;
char temp[50];
if (openvzAssignUUIDs() < 0)
dom->def->nets = openvzReadNetworkConf(NULL, veid);
- if (prev) {
- prev->next = dom;
- } else {
- driver->domains = dom;
- }
- prev = dom;
+ if (VIR_REALLOC_N(driver->domains.objs,
+ driver->domains.count + 1) < 0)
+ goto no_memory;
+
+ driver->domains.objs[driver->domains.count++] = dom;
+ dom = NULL;
}
fclose(fp);
struct openvz_driver {
virCapsPtr caps;
- virDomainObjPtr domains;
+ virDomainObjList domains;
};
int openvz_readline(int fd, char *ptr, int maxlen);
virDomainObjPtr vm;
virDomainPtr dom;
- vm = virDomainFindByID(driver->domains, id);
+ vm = virDomainFindByID(&driver->domains, id);
if (!vm) {
openvzError(conn, VIR_ERR_NO_DOMAIN, NULL);
static char *openvzGetOSType(virDomainPtr dom)
{
struct openvz_driver *driver = (struct openvz_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
char *ret;
if (!vm) {
static virDomainPtr openvzDomainLookupByUUID(virConnectPtr conn,
const unsigned char *uuid) {
struct openvz_driver *driver = (struct openvz_driver *)conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, uuid);
virDomainPtr dom;
if (!vm) {
static virDomainPtr openvzDomainLookupByName(virConnectPtr conn,
const char *name) {
struct openvz_driver *driver = (struct openvz_driver *)conn->privateData;
- virDomainObjPtr vm = virDomainFindByName(driver->domains, name);
+ virDomainObjPtr vm = virDomainFindByName(&driver->domains, name);
virDomainPtr dom;
if (!vm) {
static int openvzDomainGetInfo(virDomainPtr dom,
virDomainInfoPtr info) {
struct openvz_driver *driver = (struct openvz_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
openvzError(dom->conn, VIR_ERR_INVALID_DOMAIN,
static char *openvzDomainDumpXML(virDomainPtr dom, int flags) {
struct openvz_driver *driver = (struct openvz_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
openvzError(dom->conn, VIR_ERR_INVALID_DOMAIN,
static int openvzDomainShutdown(virDomainPtr dom) {
struct openvz_driver *driver = (struct openvz_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
const char *prog[] = {VZCTL, "--quiet", "stop", vm ? vm->def->name : NULL, NULL};
if (!vm) {
static int openvzDomainReboot(virDomainPtr dom,
unsigned int flags ATTRIBUTE_UNUSED) {
struct openvz_driver *driver = (struct openvz_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
const char *prog[] = {VZCTL, "--quiet", "restart", vm ? vm->def->name : NULL, NULL};
if (!vm) {
return NULL;
}
- vm = virDomainFindByName(driver->domains, vmdef->name);
+ vm = virDomainFindByName(&driver->domains, vmdef->name);
if (vm) {
openvzError(conn, VIR_ERR_OPERATION_FAILED,
_("Already an OPENVZ VM active with the id '%s'"),
return NULL;
}
- vm = virDomainFindByName(driver->domains, vmdef->name);
+ vm = virDomainFindByName(&driver->domains, vmdef->name);
if (vm) {
openvzError(conn, VIR_ERR_OPERATION_FAILED,
_("Already an OPENVZ VM defined with the id '%s'"),
openvzDomainCreate(virDomainPtr dom)
{
struct openvz_driver *driver = (struct openvz_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByName(driver->domains, dom->name);
+ virDomainObjPtr vm = virDomainFindByName(&driver->domains, dom->name);
const char *prog[] = {VZCTL, "--quiet", "start", vm ? vm->def->name : NULL, NULL };
if (!vm) {
{
virConnectPtr conn= dom->conn;
struct openvz_driver *driver = (struct openvz_driver *) conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
const char *prog[] = { VZCTL, "--quiet", "destroy", vm ? vm->def->name : NULL, NULL };
if (!vm) {
{
virConnectPtr conn= dom->conn;
struct openvz_driver *driver = (struct openvz_driver *) conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
const char *prog[] = { VZCTL, "--quiet", "set", vm ? vm->def->name : NULL,
"--onboot", autostart ? "yes" : "no",
"--save", NULL };
{
virConnectPtr conn= dom->conn;
struct openvz_driver *driver = (struct openvz_driver *) conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
char value[1024];
if (!vm) {
static int openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
virConnectPtr conn= dom->conn;
struct openvz_driver *driver = (struct openvz_driver *) conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
char str_vcpus[32];
const char *prog[] = { VZCTL, "--quiet", "set", vm ? vm->def->name : NULL,
"--cpus", str_vcpus, "--save", NULL };
return got;
}
-static int openvzNumDomains(virConnectPtr conn ATTRIBUTE_UNUSED) {
+static int openvzNumDomains(virConnectPtr conn) {
struct openvz_driver *driver = conn->privateData;
- int nactive = 0;
- virDomainObjPtr vm = driver->domains;
- while (vm) {
- if (virDomainIsActive(vm))
+ int nactive = 0, i;
+
+ for (i = 0 ; i < driver->domains.count ; i++)
+ if (virDomainIsActive(driver->domains.objs[i]))
nactive++;
- vm = vm->next;
- }
+
return nactive;
}
static int openvzNumDefinedDomains(virConnectPtr conn) {
struct openvz_driver *driver = (struct openvz_driver *) conn->privateData;
- int ninactive = 0;
- virDomainObjPtr vm = driver->domains;
- while (vm) {
- if (!virDomainIsActive(vm))
+ int ninactive = 0, i;
+
+ for (i = 0 ; i < driver->domains.count ; i++)
+ if (!virDomainIsActive(driver->domains.objs[i]))
ninactive++;
- vm = vm->next;
- }
+
return ninactive;
}
unsigned int qemuVersion;
int nextvmid;
- virDomainObjPtr domains;
+ virDomainObjList domains;
brControl *brctl;
char *configDir;
static struct qemud_driver *qemu_driver = NULL;
-static
-void qemudAutostartConfigs(struct qemud_driver *driver) {
- virDomainObjPtr vm;
-
- vm = driver->domains;
- while (vm != NULL) {
- virDomainObjPtr next = vm->next;
-
- if (vm->autostart &&
- !virDomainIsActive(vm) &&
- qemudStartVMDaemon(NULL, driver, vm, NULL) < 0) {
+static void
+qemudAutostartConfigs(struct qemud_driver *driver) {
+ unsigned int i;
+
+ for (i = 0 ; i < driver->domains.count ; i++) {
+ if (driver->domains.objs[i]->autostart &&
+ !virDomainIsActive(driver->domains.objs[i]) &&
+ qemudStartVMDaemon(NULL, driver, driver->domains.objs[i], NULL) < 0) {
virErrorPtr err = virGetLastError();
qemudLog(QEMUD_ERR, _("Failed to autostart VM '%s': %s\n"),
- vm->def->name, err->message);
+ driver->domains.objs[i]->def->name, err->message);
}
-
- vm = next;
}
}
*/
static int
qemudReload(void) {
+ if (!qemu_driver)
+ return 0;
+
virDomainLoadAllConfigs(NULL,
qemu_driver->caps,
&qemu_driver->domains,
*/
static int
qemudActive(void) {
- virDomainObjPtr dom = qemu_driver->domains;
+ unsigned int i;
- while (dom) {
- if (virDomainIsActive(dom))
+ if (!qemu_driver)
+ return 0;
+
+ for (i = 0 ; i < qemu_driver->domains.count ; i++)
+ if (virDomainIsActive(qemu_driver->domains.objs[i]))
return 1;
- dom = dom->next;
- }
/* Otherwise we're happy to deal with a shutdown */
return 0;
*/
static int
qemudShutdown(void) {
- virDomainObjPtr vm;
+ unsigned int i;
if (!qemu_driver)
return -1;
virCapabilitiesFree(qemu_driver->caps);
/* shutdown active VMs */
- vm = qemu_driver->domains;
- while (vm) {
- virDomainObjPtr next = vm->next;
- if (virDomainIsActive(vm))
- qemudShutdownVMDaemon(NULL, qemu_driver, vm);
- if (!vm->persistent)
+ for (i = 0 ; i < qemu_driver->domains.count ; i++) {
+ virDomainObjPtr dom = qemu_driver->domains.objs[i];
+ if (virDomainIsActive(dom))
+ qemudShutdownVMDaemon(NULL, qemu_driver, dom);
+ if (!dom->persistent)
virDomainRemoveInactive(&qemu_driver->domains,
- vm);
- vm = next;
+ dom);
}
- /* free inactive VMs */
- vm = qemu_driver->domains;
- while (vm) {
- virDomainObjPtr next = vm->next;
- virDomainObjFree(vm);
- vm = next;
- }
- qemu_driver->domains = NULL;
+ virDomainObjListFree(&qemu_driver->domains);
VIR_FREE(qemu_driver->logDir);
VIR_FREE(qemu_driver->configDir);
static void qemudDispatchVMEvent(int fd, int events, void *opaque) {
struct qemud_driver *driver = (struct qemud_driver *)opaque;
- virDomainObjPtr vm = driver->domains;
-
- while (vm) {
- if (virDomainIsActive(vm) &&
- (vm->stdout_fd == fd ||
- vm->stderr_fd == fd))
+ virDomainObjPtr vm = NULL;
+ unsigned int i;
+
+ for (i = 0 ; i < driver->domains.count ; i++) {
+ if (virDomainIsActive(driver->domains.objs[i]) &&
+ (driver->domains.objs[i]->stdout_fd == fd ||
+ driver->domains.objs[i]->stderr_fd == fd)) {
+ vm = driver->domains.objs[i];
break;
-
- vm = vm->next;
+ }
}
if (!vm)
static virDomainPtr qemudDomainLookupByID(virConnectPtr conn,
int id) {
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, id);
virDomainPtr dom;
if (!vm) {
static virDomainPtr qemudDomainLookupByUUID(virConnectPtr conn,
const unsigned char *uuid) {
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, uuid);
virDomainPtr dom;
if (!vm) {
static virDomainPtr qemudDomainLookupByName(virConnectPtr conn,
const char *name) {
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
- virDomainObjPtr vm = virDomainFindByName(driver->domains, name);
+ virDomainObjPtr vm = virDomainFindByName(&driver->domains, name);
virDomainPtr dom;
if (!vm) {
static int qemudListDomains(virConnectPtr conn, int *ids, int nids) {
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
- virDomainObjPtr vm = driver->domains;
- int got = 0;
- while (vm && got < nids) {
- if (virDomainIsActive(vm)) {
- ids[got] = vm->def->id;
- got++;
- }
- vm = vm->next;
- }
+ int got = 0, i;
+
+ for (i = 0 ; i < driver->domains.count && got < nids ; i++)
+ if (virDomainIsActive(driver->domains.objs[i]))
+ ids[got++] = driver->domains.objs[i]->def->id;
+
return got;
}
static int qemudNumDomains(virConnectPtr conn) {
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
- int n = 0;
- virDomainObjPtr dom = driver->domains;
- while (dom) {
- if (virDomainIsActive(dom))
+ int n = 0, i;
+
+ for (i = 0 ; i < driver->domains.count ; i++)
+ if (virDomainIsActive(driver->domains.objs[i]))
n++;
- dom = dom->next;
- }
+
return n;
}
static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,
if (!(def = virDomainDefParseString(conn, driver->caps, xml)))
return NULL;
- vm = virDomainFindByName(driver->domains, def->name);
+ vm = virDomainFindByName(&driver->domains, def->name);
if (vm) {
qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("domain '%s' is already defined"),
virDomainDefFree(def);
return NULL;
}
- vm = virDomainFindByUUID(driver->domains, def->uuid);
+ vm = virDomainFindByUUID(&driver->domains, def->uuid);
if (vm) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
static int qemudDomainSuspend(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
char *info;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN, _("no domain with matching id %d"), dom->id);
return -1;
static int qemudDomainResume(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
char *info;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
_("no domain with matching id %d"), dom->id);
static int qemudDomainShutdown(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
char* info;
if (!vm) {
static int qemudDomainDestroy(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
static char *qemudDomainGetOSType(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
char *type;
if (!vm) {
/* Returns max memory in kb, 0 if error */
static unsigned long qemudDomainGetMaxMemory(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
static int qemudDomainSetMaxMemory(virDomainPtr dom, unsigned long newmax) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
static int qemudDomainSetMemory(virDomainPtr dom, unsigned long newmem) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
static int qemudDomainGetInfo(virDomainPtr dom,
virDomainInfoPtr info) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
"%s", _("no domain with matching uuid"));
static int qemudDomainSave(virDomainPtr dom,
const char *path) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
char *command, *info;
int fd;
char *safe_path;
static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
- const struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
int max;
if (!vm) {
unsigned char *cpumap,
int maplen) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
cpu_set_t mask;
int i, maxcpu;
virNodeInfo nodeinfo;
unsigned char *cpumaps,
int maplen) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
virNodeInfo nodeinfo;
int i, v, maxcpu;
static int qemudDomainGetMaxVcpus(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
const char *type;
int ret;
VIR_FREE(xml);
/* Ensure the name and UUID don't already exist in an active VM */
- vm = virDomainFindByUUID(driver->domains, def->uuid);
+ vm = virDomainFindByUUID(&driver->domains, def->uuid);
if (!vm)
- vm = virDomainFindByName(driver->domains, def->name);
+ vm = virDomainFindByName(&driver->domains, def->name);
if (vm && virDomainIsActive(vm)) {
qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("domain is already active as '%s'"), vm->def->name);
static char *qemudDomainDumpXML(virDomainPtr dom,
int flags ATTRIBUTE_UNUSED) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
"%s", _("no domain with matching uuid"));
static int qemudListDefinedDomains(virConnectPtr conn,
char **const names, int nnames) {
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
- virDomainObjPtr vm = driver->domains;
int got = 0, i;
- while (vm && got < nnames) {
- if (!virDomainIsActive(vm)) {
- if (!(names[got] = strdup(vm->def->name))) {
+
+ for (i = 0 ; i < driver->domains.count && got < nnames ; i++) {
+ if (!virDomainIsActive(driver->domains.objs[i])) {
+ if (!(names[got++] = strdup(driver->domains.objs[i]->def->name))) {
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
- "%s", _("failed to allocate space for VM name string"));
+ "%s", _("failed to allocate space for VM name string"));
goto cleanup;
}
- got++;
}
- vm = vm->next;
}
+
return got;
cleanup:
return -1;
}
-
static int qemudNumDefinedDomains(virConnectPtr conn) {
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
- int n = 0;
- virDomainObjPtr dom = driver->domains;
- while (dom) {
- if (!virDomainIsActive(dom))
+ int n = 0, i;
+
+ for (i = 0 ; i < driver->domains.count ; i++)
+ if (!virDomainIsActive(driver->domains.objs[i]))
n++;
- dom = dom->next;
- }
+
return n;
}
static int qemudDomainStart(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
static int qemudDomainUndefine(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
virDomainDeviceDefPtr dev)
{
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
virDomainDiskDefPtr origdisk, newdisk;
char *cmd, *reply, *safe_path;
char *devname = NULL;
static int qemudDomainAttachUsbMassstorageDevice(virDomainPtr dom, virDomainDeviceDefPtr dev)
{
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
int ret;
char *cmd, *reply;
virDomainDiskDefPtr *dest, *prev, ptr;
static int qemudDomainAttachHostDevice(virDomainPtr dom, virDomainDeviceDefPtr dev)
{
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
int ret;
char *cmd, *reply;
static int qemudDomainAttachDevice(virDomainPtr dom,
const char *xml) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
virDomainDeviceDefPtr dev;
int ret = 0;
static int qemudDomainGetAutostart(virDomainPtr dom,
int *autostart) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
static int qemudDomainSetAutostart(virDomainPtr dom,
int autostart) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
char *configFile = NULL, *autostartLink = NULL;
int ret = -1;
const char *path,
struct _virDomainBlockStats *stats)
{
- const struct qemud_driver *driver =
+ struct qemud_driver *driver =
(struct qemud_driver *)dom->conn->privateData;
char *dummy, *info;
const char *p, *eol;
char qemu_dev_name[32];
size_t len;
- const virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ const virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
if (!vm) {
qemudReportError (dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
{
#ifdef __linux__
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
virDomainNetDefPtr net;
if (!vm) {
unsigned int flags ATTRIBUTE_UNUSED)
{
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByUUID(driver->domains, dom->uuid);
+ virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid);
virDomainDiskDefPtr disk;
int fd, ret = -1;
unsigned int flags)
{
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
- virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id);
+ virDomainObjPtr vm = virDomainFindByID(&driver->domains, dom->id);
char cmd[256], *info;
char tmp[] = TEMPDIR "/qemu.mem.XXXXXX";
int fd = -1, ret = -1;
int nextDomID;
virCapsPtr caps;
virNodeInfo nodeInfo;
- virDomainObjPtr domains;
+ virDomainObjList domains;
virNetworkObjPtr networks;
int numCells;
testCell cells[MAX_CELLS];
\
privconn = (testConnPtr)dom->conn->privateData; \
do { \
- if ((privdom = virDomainFindByName(privconn->domains, \
- (dom)->name)) == NULL) { \
+ if ((privdom = virDomainFindByName(&privconn->domains, \
+ (dom)->name)) == NULL) { \
testError((dom)->conn, (dom), NULL, VIR_ERR_INVALID_ARG, \
__FUNCTION__); \
return (ret); \
return VIR_DRV_OPEN_SUCCESS;
error:
- virDomainObjFree(privconn->domains);
+ virDomainObjListFree(&privconn->domains);
virNetworkObjFree(privconn->networks);
virCapabilitiesFree(privconn->caps);
VIR_FREE(privconn);
VIR_FREE(networks);
if (fd != -1)
close(fd);
- dom = privconn->domains;
- while (dom) {
- virDomainObjPtr tmp = dom->next;
- virDomainObjFree(dom);
- dom = tmp;
- }
+ virDomainObjListFree(&privconn->domains);
net = privconn->networks;
while (net) {
virNetworkObjPtr tmp = net->next;
static int testClose(virConnectPtr conn)
{
- virDomainObjPtr dom;
virNetworkObjPtr net;
GET_CONNECTION(conn);
virCapabilitiesFree(privconn->caps);
- dom = privconn->domains;
- while (dom) {
- virDomainObjPtr tmp = dom->next;
- virDomainObjFree(dom);
- dom = tmp;
- }
+ virDomainObjListFree(&privconn->domains);
net = privconn->networks;
while (net) {
virNetworkObjPtr tmp = net->next;
static int testNumOfDomains(virConnectPtr conn)
{
- int numActive = 0;
- virDomainObjPtr dom;
+ unsigned int numActive = 0, i;
GET_CONNECTION(conn);
- dom = privconn->domains;
- while (dom) {
- if (virDomainIsActive(dom))
+ for (i = 0 ; i < privconn->domains.count ; i++)
+ if (virDomainIsActive(privconn->domains.objs[i]))
numActive++;
- dom = dom->next;
- }
+
return numActive;
}
virDomainPtr ret;
GET_CONNECTION(conn);
- if ((dom = virDomainFindByID(privconn->domains, id)) == NULL) {
+ if ((dom = virDomainFindByID(&privconn->domains, id)) == NULL) {
testError (conn, NULL, NULL, VIR_ERR_NO_DOMAIN, NULL);
return NULL;
}
virDomainObjPtr dom = NULL;
GET_CONNECTION(conn);
- if ((dom = virDomainFindByUUID(privconn->domains, uuid)) == NULL) {
+ if ((dom = virDomainFindByUUID(&privconn->domains, uuid)) == NULL) {
testError (conn, NULL, NULL, VIR_ERR_NO_DOMAIN, NULL);
return NULL;
}
virDomainObjPtr dom = NULL;
GET_CONNECTION(conn);
- if ((dom = virDomainFindByName(privconn->domains, name)) == NULL) {
+ if ((dom = virDomainFindByName(&privconn->domains, name)) == NULL) {
testError (conn, NULL, NULL, VIR_ERR_NO_DOMAIN, NULL);
return NULL;
}
int *ids,
int maxids)
{
- int n = 0;
- virDomainObjPtr dom;
+ unsigned int n = 0, i;
GET_CONNECTION(conn);
- dom = privconn->domains;
- while (dom && n < maxids) {
- if (virDomainIsActive(dom))
- ids[n++] = dom->def->id;
- dom = dom->next;
- }
+ for (i = 0 ; i < privconn->domains.count && n < maxids ; i++)
+ if (virDomainIsActive(privconn->domains.objs[i]))
+ ids[n++] = privconn->domains.objs[i]->def->id;
+
return n;
}
}
static int testNumOfDefinedDomains(virConnectPtr conn) {
- int numInactive = 0;
- virDomainObjPtr dom;
+ unsigned int numInactive = 0, i;
GET_CONNECTION(conn);
- dom = privconn->domains;
- while (dom) {
- if (!virDomainIsActive(dom))
+ for (i = 0 ; i < privconn->domains.count ; i++)
+ if (!virDomainIsActive(privconn->domains.objs[i]))
numInactive++;
- dom = dom->next;
- }
+
return numInactive;
}
static int testListDefinedDomains(virConnectPtr conn,
char **const names,
int maxnames) {
- int n = 0;
- virDomainObjPtr dom;
+ unsigned int n = 0, i;
GET_CONNECTION(conn);
- dom = privconn->domains;
memset(names, 0, sizeof(*names)*maxnames);
- while (dom && n < maxnames) {
- if (!virDomainIsActive(dom) &&
- !(names[n++] = strdup(dom->def->name)))
+ for (i = 0 ; i < privconn->domains.count && n < maxnames ; i++)
+ if (!virDomainIsActive(privconn->domains.objs[i]) &&
+ !(names[n++] = strdup(privconn->domains.objs[i]->def->name)))
goto no_memory;
- dom = dom->next;
- }
+
return n;
no_memory: