}
+int
+virStoragePoolObjVolumeGetNames(virStorageVolDefListPtr volumes,
+ virConnectPtr conn,
+ virStoragePoolDefPtr pooldef,
+ virStoragePoolVolumeACLFilter aclfilter,
+ char **const names,
+ int maxnames)
+{
+ int nnames = 0;
+ size_t i;
+
+ for (i = 0; i < volumes->count && nnames < maxnames; i++) {
+ virStorageVolDefPtr def = volumes->objs[i];
+ if (aclfilter && !aclfilter(conn, pooldef, def))
+ continue;
+ if (VIR_STRDUP(names[nnames], def->name) < 0)
+ goto failure;
+ nnames++;
+ }
+
+ return nnames;
+
+ failure:
+ while (--nnames >= 0)
+ VIR_FREE(names[nnames]);
+
+ return -1;
+}
+
+
virStoragePoolObjPtr
virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
virStoragePoolDefPtr def)
virStoragePoolDefPtr pooldef,
virStoragePoolVolumeACLFilter aclfilter);
+int
+virStoragePoolObjVolumeGetNames(virStorageVolDefListPtr volumes,
+ virConnectPtr conn,
+ virStoragePoolDefPtr pooldef,
+ virStoragePoolVolumeACLFilter aclfilter,
+ char **const names,
+ int maxnames);
+
virStoragePoolObjPtr
virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
virStoragePoolDefPtr def);
virStoragePoolObjSaveDef;
virStoragePoolObjSourceFindDuplicate;
virStoragePoolObjUnlock;
+virStoragePoolObjVolumeGetNames;
# cpu/cpu.h
return ret;
}
+
static int
storagePoolListVolumes(virStoragePoolPtr obj,
char **const names,
int maxnames)
{
virStoragePoolObjPtr pool;
- size_t i;
- int n = 0;
-
- memset(names, 0, maxnames * sizeof(*names));
+ int n = -1;
if (!(pool = virStoragePoolObjFromStoragePool(obj)))
return -1;
goto cleanup;
}
- for (i = 0; i < pool->volumes.count && n < maxnames; i++) {
- if (!virStoragePoolListVolumesCheckACL(obj->conn, pool->def,
- pool->volumes.objs[i]))
- continue;
- if (VIR_STRDUP(names[n++], pool->volumes.objs[i]->name) < 0)
- goto cleanup;
- }
-
- virStoragePoolObjUnlock(pool);
- return n;
-
+ n = virStoragePoolObjVolumeGetNames(&pool->volumes, obj->conn, pool->def,
+ virStoragePoolListVolumesCheckACL,
+ names, maxnames);
cleanup:
virStoragePoolObjUnlock(pool);
- for (n = 0; n < maxnames; n++)
- VIR_FREE(names[n]);
-
- memset(names, 0, maxnames * sizeof(*names));
- return -1;
+ return n;
}
static int
return ret;
}
+
static int
testStoragePoolListVolumes(virStoragePoolPtr pool,
char **const names,
{
testDriverPtr privconn = pool->conn->privateData;
virStoragePoolObjPtr privpool;
- size_t i = 0;
- int n = 0;
-
- memset(names, 0, maxnames * sizeof(*names));
+ int n = -1;
if (!(privpool = testStoragePoolObjFindByName(privconn, pool->name)))
- goto cleanup;
+ return -1;
if (!virStoragePoolObjIsActive(privpool)) {
virReportError(VIR_ERR_OPERATION_INVALID,
goto cleanup;
}
- for (i = 0; i < privpool->volumes.count && n < maxnames; i++) {
- if (VIR_STRDUP(names[n++], privpool->volumes.objs[i]->name) < 0)
- goto cleanup;
- }
+ n = virStoragePoolObjVolumeGetNames(&privpool->volumes, pool->conn,
+ privpool->def, NULL, names, maxnames);
+ cleanup:
virStoragePoolObjUnlock(privpool);
return n;
-
- cleanup:
- for (n = 0; n < maxnames; n++)
- VIR_FREE(names[i]);
-
- memset(names, 0, maxnames * sizeof(*names));
- if (privpool)
- virStoragePoolObjUnlock(privpool);
- return -1;
}
+
static int
testStoragePoolListAllVolumes(virStoragePoolPtr obj,
virStorageVolPtr **vols,