int numnames;
int maxnames;
char **const names;
+ unsigned int flags;
};
static void virDomainSnapshotObjListCopyNames(void *payload,
if (data->oom)
return;
+ if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_ROOTS) && obj->def->parent)
+ return;
if (data->numnames < data->maxnames) {
if (!(data->names[data->numnames] = strdup(obj->def->name)))
}
int virDomainSnapshotObjListGetNames(virDomainSnapshotObjListPtr snapshots,
- char **const names, int maxnames)
+ char **const names, int maxnames,
+ unsigned int flags)
{
- struct virDomainSnapshotNameData data = { 0, 0, maxnames, names };
+ struct virDomainSnapshotNameData data = { 0, 0, maxnames, names, flags };
int i;
virHashForEach(snapshots->objs, virDomainSnapshotObjListCopyNames, &data);
return -1;
}
-static void virDomainSnapshotObjListCount(void *payload ATTRIBUTE_UNUSED,
+struct virDomainSnapshotNumData {
+ int count;
+ unsigned int flags;
+};
+
+static void virDomainSnapshotObjListCount(void *payload,
const void *name ATTRIBUTE_UNUSED,
- void *data)
+ void *opaque)
{
- int *count = data;
+ virDomainSnapshotObjPtr obj = payload;
+ struct virDomainSnapshotNumData *data = opaque;
- (*count)++;
+ if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_ROOTS) && obj->def->parent)
+ return;
+ data->count++;
}
-int virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots)
+int virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots,
+ unsigned int flags)
{
- int count = 0;
+ struct virDomainSnapshotNumData data = { 0, flags };
- virHashForEach(snapshots->objs, virDomainSnapshotObjListCount, &count);
+ virHashForEach(snapshots->objs, virDomainSnapshotObjListCount, &data);
- return count;
+ return data.count;
}
virDomainSnapshotObjPtr
int virDomainSnapshotObjListInit(virDomainSnapshotObjListPtr objs);
int virDomainSnapshotObjListGetNames(virDomainSnapshotObjListPtr snapshots,
- char **const names, int maxnames);
-int virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots);
+ char **const names, int maxnames,
+ unsigned int flags);
+int virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots,
+ unsigned int flags);
virDomainSnapshotObjPtr virDomainSnapshotFindByName(const virDomainSnapshotObjListPtr snapshots,
const char *name);
void virDomainSnapshotObjListRemove(virDomainSnapshotObjListPtr snapshots,
virDomainObjPtr vm = NULL;
int n = -1;
- virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1);
+ virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_ROOTS |
+ VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1);
qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, domain->uuid);
goto cleanup;
}
- n = virDomainSnapshotObjListGetNames(&vm->snapshots, names, nameslen);
+ n = virDomainSnapshotObjListGetNames(&vm->snapshots, names, nameslen,
+ flags);
cleanup:
if (vm)
virDomainObjPtr vm = NULL;
int n = -1;
- virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1);
+ virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_ROOTS |
+ VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1);
qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, domain->uuid);
* VIR_DOMAIN_SNAPSHOT_LIST_METADATA makes no difference to our
* answer. */
- n = virDomainSnapshotObjListNum(&vm->snapshots);
+ n = virDomainSnapshotObjListNum(&vm->snapshots, flags);
cleanup:
if (vm)