}
+int
+virStoragePoolObjNumOfVolumes(virStorageVolDefListPtr volumes,
+ virConnectPtr conn,
+ virStoragePoolDefPtr pooldef,
+ virStoragePoolVolumeACLFilter aclfilter)
+{
+ int nvolumes = 0;
+ size_t i;
+
+ for (i = 0; i < volumes->count; i++) {
+ virStorageVolDefPtr def = volumes->objs[i];
+ if (aclfilter && !aclfilter(conn, pooldef, def))
+ continue;
+ nvolumes++;
+ }
+
+ return nvolumes;
+}
+
+
virStoragePoolObjPtr
virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
virStoragePoolDefPtr def)
void
virStoragePoolObjClearVols(virStoragePoolObjPtr pool);
+typedef bool
+(*virStoragePoolVolumeACLFilter)(virConnectPtr conn,
+ virStoragePoolDefPtr pool,
+ virStorageVolDefPtr def);
+
+int
+virStoragePoolObjNumOfVolumes(virStorageVolDefListPtr volumes,
+ virConnectPtr conn,
+ virStoragePoolDefPtr pooldef,
+ virStoragePoolVolumeACLFilter aclfilter);
+
virStoragePoolObjPtr
virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
virStoragePoolDefPtr def);
virStoragePoolObjLoadAllConfigs;
virStoragePoolObjLoadAllState;
virStoragePoolObjLock;
+virStoragePoolObjNumOfVolumes;
virStoragePoolObjRemove;
virStoragePoolObjSaveDef;
virStoragePoolObjSourceFindDuplicate;
{
virStoragePoolObjPtr pool;
int ret = -1;
- size_t i;
if (!(pool = virStoragePoolObjFromStoragePool(obj)))
return -1;
_("storage pool '%s' is not active"), pool->def->name);
goto cleanup;
}
- ret = 0;
- for (i = 0; i < pool->volumes.count; i++) {
- if (virStoragePoolNumOfVolumesCheckACL(obj->conn, pool->def,
- pool->volumes.objs[i]))
- ret++;
- }
+
+ ret = virStoragePoolObjNumOfVolumes(&pool->volumes, obj->conn, pool->def,
+ virStoragePoolNumOfVolumesCheckACL);
cleanup:
virStoragePoolObjUnlock(pool);
goto cleanup;
}
- ret = privpool->volumes.count;
+ ret = virStoragePoolObjNumOfVolumes(&privpool->volumes, pool->conn,
+ privpool->def, NULL);
cleanup:
if (privpool)