提交 7e94830f 编写于 作者: J John Ferlan

storage: Introduce virStoragePoolObjVolumeGetNames

Mostly code motion to move storagePoolListVolumes code into virstorageobj.c
and rename to virStoragePoolObjVolumeGetNames.

Also includes a couple of variable name adjustments to keep code consistent
with other drivers.
Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
上级 4a440e43
......@@ -215,6 +215,36 @@ virStoragePoolObjNumOfVolumes(virStorageVolDefListPtr volumes,
}
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)
......
......@@ -119,6 +119,14 @@ virStoragePoolObjNumOfVolumes(virStorageVolDefListPtr volumes,
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);
......
......@@ -1010,6 +1010,7 @@ virStoragePoolObjRemove;
virStoragePoolObjSaveDef;
virStoragePoolObjSourceFindDuplicate;
virStoragePoolObjUnlock;
virStoragePoolObjVolumeGetNames;
# cpu/cpu.h
......
......@@ -1411,16 +1411,14 @@ storagePoolNumOfVolumes(virStoragePoolPtr obj)
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;
......@@ -1434,24 +1432,12 @@ storagePoolListVolumes(virStoragePoolPtr obj,
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
......
......@@ -4817,6 +4817,7 @@ testStoragePoolNumOfVolumes(virStoragePoolPtr pool)
return ret;
}
static int
testStoragePoolListVolumes(virStoragePoolPtr pool,
char **const names,
......@@ -4824,13 +4825,10 @@ testStoragePoolListVolumes(virStoragePoolPtr pool,
{
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,
......@@ -4838,24 +4836,15 @@ testStoragePoolListVolumes(virStoragePoolPtr pool,
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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册