bool error;
};
-static void
+static int
virNetworkObjListPopulate(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
virNetworkPtr net = NULL;
if (data->error)
- return;
+ return 0;
virObjectLock(obj);
cleanup:
virObjectUnlock(obj);
+ return 0;
}
int
int ret;
};
-static void
+static int
virNetworkObjListForEachHelper(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
if (data->callback(payload, data->opaque) < 0)
data->ret = -1;
+ return 0;
}
/**
bool error;
};
-static void
+static int
virNetworkObjListGetHelper(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
virNetworkObjPtr obj = payload;
if (data->error)
- return;
+ return 0;
if (data->nnames >= 0 &&
data->got == data->nnames)
- return;
+ return 0;
virObjectLock(obj);
cleanup:
virObjectUnlock(obj);
+ return 0;
}
int
};
-static void
+static int
addToTable(void *payload, const void *name, void *data)
{
struct addToTableStruct *atts = (struct addToTableStruct *)data;
virNWFilterVarValuePtr val;
if (atts->errOccurred)
- return;
+ return 0;
val = virNWFilterVarValueCopy((virNWFilterVarValuePtr)payload);
if (!val) {
atts->errOccurred = 1;
- return;
+ return 0;
}
if (virNWFilterHashTablePut(atts->target, (const char *)name, val) < 0) {
atts->errOccurred = 1;
virNWFilterVarValueFree(val);
}
+
+ return 0;
}
bool error;
};
-static void virDomainSnapshotObjListCopyNames(void *payload,
- const void *name ATTRIBUTE_UNUSED,
- void *opaque)
+static int virDomainSnapshotObjListCopyNames(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *opaque)
{
virDomainSnapshotObjPtr obj = payload;
struct virDomainSnapshotNameData *data = opaque;
if (data->error)
- return;
+ return 0;
/* Caller already sanitized flags. Filtering on DESCENDANTS was
* done by choice of iteration in the caller. */
if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_LEAVES) && obj->nchildren)
- return;
+ return 0;
if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_NO_LEAVES) && !obj->nchildren)
- return;
+ return 0;
if (data->flags & VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS) {
if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_INACTIVE) &&
obj->def->state == VIR_DOMAIN_SHUTOFF)
- return;
+ return 0;
if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_DISK_ONLY) &&
obj->def->state == VIR_DOMAIN_DISK_SNAPSHOT)
- return;
+ return 0;
if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_ACTIVE) &&
obj->def->state != VIR_DOMAIN_SHUTOFF &&
obj->def->state != VIR_DOMAIN_DISK_SNAPSHOT)
- return;
+ return 0;
}
if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_INTERNAL) &&
virDomainSnapshotIsExternal(obj))
- return;
+ return 0;
if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_EXTERNAL) &&
!virDomainSnapshotIsExternal(obj))
- return;
+ return 0;
if (data->names && data->count < data->maxnames &&
VIR_STRDUP(data->names[data->count], obj->def->name) < 0) {
data->error = true;
- return;
+ return 0;
}
data->count++;
+ return 0;
}
int
void *data;
};
-static void
+static int
virDomainSnapshotActOnDescendant(void *payload,
const void *name,
void *data)
curr->iter,
curr->data);
(curr->iter)(payload, name, curr->data);
+ return 0;
}
/* Run iter(data) on all descendants of snapshot, while ignoring all
virDomainSnapshotObjListPtr snapshots;
int err;
};
-static void
+static int
virDomainSnapshotSetRelations(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *data)
obj->parent->nchildren++;
obj->sibling = obj->parent->first_child;
obj->parent->first_child = obj;
+ return 0;
}
/* Populate parent link and child count of all snapshots, with all
/**
* Helper to clear stream callbacks when freeing the hash
*/
-static void virChrdevFreeClearCallbacks(void *payload,
- const void *name ATTRIBUTE_UNUSED,
- void *data ATTRIBUTE_UNUSED)
+static int virChrdevFreeClearCallbacks(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
{
virStreamPtr st = payload;
virFDStreamSetInternalCloseCb(st, NULL, NULL, NULL);
+ return 0;
}
/**
};
-static void
+static int
virDomainObjListCount(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
}
cleanup:
virObjectUnlock(obj);
+ return 0;
}
};
-static void
+static int
virDomainObjListCopyActiveIDs(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
data->ids[data->numids++] = obj->def->id;
cleanup:
virObjectUnlock(obj);
+ return 0;
}
};
-static void
+static int
virDomainObjListCopyInactiveNames(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
struct virDomainNameData *data = opaque;
if (data->oom)
- return;
+ return 0;
virObjectLock(obj);
if (data->filter &&
}
cleanup:
virObjectUnlock(obj);
+ return 0;
}
};
-static void
+static int
virDomainObjListHelper(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
if (data->callback(payload, data->opaque) < 0)
data->ret = -1;
+ return 0;
}
};
-static void
+static int
virDomainObjListCollectIterator(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
struct virDomainListData *data = opaque;
data->vms[data->nvms++] = virObjectRef(payload);
+ return 0;
}
bool gotError;
};
-static void
+static int
virLockDaemonClientReleaseLockspace(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
data->hadSomeLeases = true;
else if (rc < 0)
data->gotError = true;
+ return 0;
}
* Iterator to write all leases of a single request to a file.
* Call this function with the SnoopLock held.
*/
-static void
+static int
virNWFilterSnoopSaveIter(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *data)
ignore_value(virNWFilterSnoopLeaseFileWrite(tfd, req->ifkey, ipl));
virNWFilterSnoopReqUnlock(req);
+ return 0;
}
/*
};
-static void
+static int
printString(void *payload ATTRIBUTE_UNUSED, const void *name, void *data)
{
struct printString *ps = data;
if ((STREQ((char *)name, NWFILTER_STD_VAR_IP) && !ps->reportIP) ||
(STREQ((char *)name, NWFILTER_STD_VAR_MAC) && !ps->reportMAC))
- return;
+ return 0;
if (virBufferUse(&ps->buf) && ps->separator)
virBufferAdd(&ps->buf, ps->separator, -1);
virBufferAdd(&ps->buf, name, -1);
+ return 0;
}
/**
}
/* Hash iterator callback to discard multiple snapshots. */
-void qemuDomainSnapshotDiscardAll(void *payload,
- const void *name ATTRIBUTE_UNUSED,
- void *data)
+int qemuDomainSnapshotDiscardAll(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *data)
{
virDomainSnapshotObjPtr snap = payload;
virQEMUSnapRemovePtr curr = data;
curr->metadata_only);
if (err && !curr->err)
curr->err = err;
+ return 0;
}
int
bool current;
};
-void qemuDomainSnapshotDiscardAll(void *payload,
- const void *name,
- void *data);
+int qemuDomainSnapshotDiscardAll(void *payload,
+ const void *name,
+ void *data);
int qemuDomainSnapshotDiscardAllMetadata(virQEMUDriverPtr driver,
virDomainObjPtr vm);
/* Count how many snapshots in a set are external snapshots or checkpoints. */
-static void
+static int
qemuDomainSnapshotCountExternal(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *data)
if (virDomainSnapshotIsExternal(snap))
(*count)++;
+ return 0;
}
static int
}
-static void
+static int
qemuDomainBlockStatsGatherTotals(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
QEMU_BLOCK_STAT_TOTAL(rd_total_times);
QEMU_BLOCK_STAT_TOTAL(flush_total_times);
#undef QEMU_BLOCK_STAT_TOTAL
+ return 0;
}
};
-static void
+static int
qemuDomainSnapshotReparentChildren(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *data)
virQEMUSnapReparentPtr rep = data;
if (rep->err < 0)
- return;
+ return 0;
VIR_FREE(snap->def->parent);
snap->parent = rep->parent;
if (rep->parent->def &&
VIR_STRDUP(snap->def->parent, rep->parent->def->name) < 0) {
rep->err = -1;
- return;
+ return 0;
}
if (!snap->sibling)
rep->err = qemuDomainSnapshotWriteMetadata(rep->vm, snap, rep->caps,
rep->cfg->snapshotDir);
+ return 0;
}
bool current;
};
-static void
+static int
testDomainSnapshotDiscardAll(void *payload,
- const void *name ATTRIBUTE_UNUSED,
- void *data)
+ const void *name ATTRIBUTE_UNUSED,
+ void *data)
{
virDomainSnapshotObjPtr snap = payload;
testSnapRemoveDataPtr curr = data;
if (snap->def->current)
curr->current = true;
virDomainSnapshotObjListRemove(curr->vm->snapshots, snap);
+ return 0;
}
typedef struct _testSnapReparentData testSnapReparentData;
virDomainSnapshotObjPtr last;
};
-static void
+static int
testDomainSnapshotReparentChildren(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *data)
testSnapReparentDataPtr rep = data;
if (rep->err < 0)
- return;
+ return 0;
VIR_FREE(snap->def->parent);
snap->parent = rep->parent;
if (rep->parent->def &&
VIR_STRDUP(snap->def->parent, rep->parent->def->name) < 0) {
rep->err = -1;
- return;
+ return 0;
}
if (!snap->sibling)
rep->last = snap;
+ return 0;
}
static int
virConnectPtr conn;
};
-static void umlProcessAutoDestroyDom(void *payload,
- const void *name,
- void *opaque)
+static int umlProcessAutoDestroyDom(void *payload,
+ const void *name,
+ void *opaque)
{
struct umlProcessAutoDestroyData *data = opaque;
virConnectPtr conn = payload;
VIR_DEBUG("conn=%p uuidstr=%s thisconn=%p", conn, uuidstr, data->conn);
if (data->conn != conn)
- return;
+ return 0;
if (virUUIDParse(uuidstr, uuid) < 0) {
VIR_WARN("Failed to parse %s", uuidstr);
- return;
+ return 0;
}
if (!(dom = virDomainObjListFindByUUID(data->driver->domains,
uuid))) {
VIR_DEBUG("No domain object to kill");
- return;
+ return 0;
}
VIR_DEBUG("Killing domain");
if (event)
umlDomainEventQueue(data->driver, event);
virHashRemoveEntry(data->driver->autodestroy, uuidstr);
+ return 0;
}
/*
bool oom;
};
-static void
+static int
virCloseCallbacksGetOne(void *payload,
const void *key,
void *opaque)
unsigned char uuid[VIR_UUID_BUFLEN];
if (virUUIDParse(uuidstr, uuid) < 0)
- return;
+ return 0;
VIR_DEBUG("conn=%p, thisconn=%p, uuid=%s, cb=%p",
closeDef->conn, data->conn, uuidstr, closeDef->cb);
if (data->conn != closeDef->conn || !closeDef->cb)
- return;
+ return 0;
if (VIR_EXPAND_N(data->list->entries,
data->list->nentries, 1) < 0) {
data->oom = true;
- return;
+ return 0;
}
memcpy(data->list->entries[data->list->nentries - 1].uuid,
uuid, VIR_UUID_BUFLEN);
data->list->entries[data->list->nentries - 1].callback = closeDef->cb;
+ return 0;
}
static virCloseCallbacksListPtr
size_t arrayIdx;
};
-static void virHashGetKeysIterator(void *payload,
- const void *key, void *data)
+static int virHashGetKeysIterator(void *payload,
+ const void *key, void *data)
{
struct getKeysIter *iter = data;
iter->sortArray[iter->arrayIdx].value = payload;
iter->arrayIdx++;
+ return 0;
}
typedef int (*qsort_comp)(const void *, const void *);
* @data: user supplied data blob
*
* Callback to process a hash entry during iteration
+ *
+ * Returns -1 to stop the iteration, e.g. in case of an error
*/
-typedef void (*virHashIterator) (void *payload, const void *name, void *data);
+typedef int (*virHashIterator) (void *payload, const void *name, void *data);
/**
* virHashSearcher:
* @payload: the data in the hash
char ** names;
};
-static void
+static int
xenXMListIterator(void *payload ATTRIBUTE_UNUSED,
const void *name,
void *data)
virDomainDefPtr def = NULL;
if (ctx->oom)
- return;
+ return 0;
if (ctx->count == ctx->max)
- return;
+ return 0;
def = xenDaemonLookupByName(ctx->conn, name);
if (!def) {
} else {
virDomainDefFree(def);
}
+ return 0;
}
return hash;
}
-static void
+static int
testHashCheckForEachCount(void *payload ATTRIBUTE_UNUSED,
const void *name ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED)
{
+ return 0;
}
static int
const int testHashCountRemoveForEachSome =
ARRAY_CARDINALITY(uuids) - ARRAY_CARDINALITY(uuids_subset);
-static void
+static int
testHashRemoveForEachSome(void *payload ATTRIBUTE_UNUSED,
const void *name,
void *data)
break;
}
}
+ return 0;
}
const int testHashCountRemoveForEachAll = 0;
-static void
+static int
testHashRemoveForEachAll(void *payload ATTRIBUTE_UNUSED,
const void *name,
void *data)
virHashTablePtr hash = data;
virHashRemoveEntry(hash, name);
+ return 0;
}
const int testHashCountRemoveForEachForbidden = ARRAY_CARDINALITY(uuids);
-static void
+static int
testHashRemoveForEachForbidden(void *payload ATTRIBUTE_UNUSED,
const void *name,
void *data)
break;
}
}
+ return 0;
}
}
-static void
+static int
testHashIter(void *payload ATTRIBUTE_UNUSED,
const void *name ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED)
{
- return;
+ return 0;
}
-static void
+static int
testHashForEachIter(void *payload ATTRIBUTE_UNUSED,
const void *name ATTRIBUTE_UNUSED,
void *data)
if (virHashForEach(hash, testHashIter, NULL) >= 0)
VIR_TEST_VERBOSE("\niterating through hash in ForEach"
" should be forbidden");
+ return 0;
}
static int