mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 22:55:23 +00:00
vbox: Rewrite vboxStoragePoolListVolumes
This commit is contained in:
parent
ce381d3764
commit
c3c8cd4fdc
@ -147,3 +147,59 @@ int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nnames)
|
||||||
|
{
|
||||||
|
vboxGlobalData *data = pool->conn->privateData;
|
||||||
|
vboxArray hardDisks = VBOX_ARRAY_INITIALIZER;
|
||||||
|
PRUint32 numActive = 0;
|
||||||
|
nsresult rc;
|
||||||
|
size_t i;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (!data->vboxObj) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = gVBoxAPI.UArray.vboxArrayGet(&hardDisks, data->vboxObj,
|
||||||
|
gVBoxAPI.UArray.handleGetHardDisks(data->vboxObj));
|
||||||
|
if (NS_FAILED(rc)) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("could not get the volume list in the pool: %s, rc=%08x"),
|
||||||
|
pool->name, (unsigned)rc);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < hardDisks.count && numActive < nnames; ++i) {
|
||||||
|
IHardDisk *hardDisk = hardDisks.items[i];
|
||||||
|
PRUint32 hddstate;
|
||||||
|
char *nameUtf8 = NULL;
|
||||||
|
PRUnichar *nameUtf16 = NULL;
|
||||||
|
|
||||||
|
if (!hardDisk)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
gVBoxAPI.UIMedium.GetState(hardDisk, &hddstate);
|
||||||
|
if (hddstate == MediaState_Inaccessible)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
gVBoxAPI.UIMedium.GetName(hardDisk, &nameUtf16);
|
||||||
|
|
||||||
|
VBOX_UTF16_TO_UTF8(nameUtf16, &nameUtf8);
|
||||||
|
VBOX_UTF16_FREE(nameUtf16);
|
||||||
|
|
||||||
|
if (!nameUtf8)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
VIR_DEBUG("nnames[%d]: %s", numActive, nameUtf8);
|
||||||
|
if (VIR_STRDUP(names[numActive], nameUtf8) > 0)
|
||||||
|
numActive++;
|
||||||
|
|
||||||
|
VBOX_UTF8_FREE(nameUtf8);
|
||||||
|
}
|
||||||
|
|
||||||
|
gVBoxAPI.UArray.vboxArrayRelease(&hardDisks);
|
||||||
|
ret = numActive;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -2033,54 +2033,6 @@ _registerDomainEvent(virHypervisorDriverPtr driver)
|
|||||||
* The Storage Functions here on
|
* The Storage Functions here on
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nnames) {
|
|
||||||
VBOX_OBJECT_CHECK(pool->conn, int, -1);
|
|
||||||
vboxArray hardDisks = VBOX_ARRAY_INITIALIZER;
|
|
||||||
PRUint32 numActive = 0;
|
|
||||||
nsresult rc;
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
rc = vboxArrayGet(&hardDisks, data->vboxObj, data->vboxObj->vtbl->GetHardDisks);
|
|
||||||
if (NS_SUCCEEDED(rc)) {
|
|
||||||
for (i = 0; i < hardDisks.count && numActive < nnames; ++i) {
|
|
||||||
IHardDisk *hardDisk = hardDisks.items[i];
|
|
||||||
|
|
||||||
if (hardDisk) {
|
|
||||||
PRUint32 hddstate;
|
|
||||||
char *nameUtf8 = NULL;
|
|
||||||
PRUnichar *nameUtf16 = NULL;
|
|
||||||
|
|
||||||
VBOX_MEDIUM_FUNC_ARG1(hardDisk, GetState, &hddstate);
|
|
||||||
if (hddstate != MediaState_Inaccessible) {
|
|
||||||
VBOX_MEDIUM_FUNC_ARG1(hardDisk, GetName, &nameUtf16);
|
|
||||||
|
|
||||||
VBOX_UTF16_TO_UTF8(nameUtf16, &nameUtf8);
|
|
||||||
VBOX_UTF16_FREE(nameUtf16);
|
|
||||||
|
|
||||||
if (nameUtf8) {
|
|
||||||
VIR_DEBUG("nnames[%d]: %s", numActive, nameUtf8);
|
|
||||||
if (VIR_STRDUP(names[numActive], nameUtf8) > 0)
|
|
||||||
numActive++;
|
|
||||||
|
|
||||||
VBOX_UTF8_FREE(nameUtf8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vboxArrayRelease(&hardDisks);
|
|
||||||
|
|
||||||
ret = numActive;
|
|
||||||
} else {
|
|
||||||
ret = -1;
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("could not get the volume list in the pool: %s, rc=%08x"),
|
|
||||||
pool->name, (unsigned)rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static virStorageVolPtr
|
static virStorageVolPtr
|
||||||
vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
|
vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
|
||||||
{
|
{
|
||||||
@ -4904,6 +4856,11 @@ static nsresult _mediumGetState(IMedium *medium, PRUint32 *state)
|
|||||||
return medium->vtbl->GetState(medium, state);
|
return medium->vtbl->GetState(medium, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static nsresult _mediumGetName(IMedium *medium, PRUnichar **name)
|
||||||
|
{
|
||||||
|
return medium->vtbl->GetName(medium, name);
|
||||||
|
}
|
||||||
|
|
||||||
static nsresult _mediumGetReadOnly(IMedium *medium ATTRIBUTE_UNUSED,
|
static nsresult _mediumGetReadOnly(IMedium *medium ATTRIBUTE_UNUSED,
|
||||||
PRBool *readOnly ATTRIBUTE_UNUSED)
|
PRBool *readOnly ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
@ -5626,6 +5583,7 @@ static vboxUniformedIMedium _UIMedium = {
|
|||||||
.GetId = _mediumGetId,
|
.GetId = _mediumGetId,
|
||||||
.GetLocation = _mediumGetLocation,
|
.GetLocation = _mediumGetLocation,
|
||||||
.GetState = _mediumGetState,
|
.GetState = _mediumGetState,
|
||||||
|
.GetName = _mediumGetName,
|
||||||
.GetReadOnly = _mediumGetReadOnly,
|
.GetReadOnly = _mediumGetReadOnly,
|
||||||
.GetParent = _mediumGetParent,
|
.GetParent = _mediumGetParent,
|
||||||
.GetChildren = _mediumGetChildren,
|
.GetChildren = _mediumGetChildren,
|
||||||
|
@ -409,6 +409,7 @@ typedef struct {
|
|||||||
nsresult (*GetId)(IMedium *medium, vboxIIDUnion *iidu);
|
nsresult (*GetId)(IMedium *medium, vboxIIDUnion *iidu);
|
||||||
nsresult (*GetLocation)(IMedium *medium, PRUnichar **location);
|
nsresult (*GetLocation)(IMedium *medium, PRUnichar **location);
|
||||||
nsresult (*GetState)(IMedium *medium, PRUint32 *state);
|
nsresult (*GetState)(IMedium *medium, PRUint32 *state);
|
||||||
|
nsresult (*GetName)(IMedium *medium, PRUnichar **name);
|
||||||
nsresult (*GetReadOnly)(IMedium *medium, PRBool *readOnly);
|
nsresult (*GetReadOnly)(IMedium *medium, PRBool *readOnly);
|
||||||
nsresult (*GetParent)(IMedium *medium, IMedium **parent);
|
nsresult (*GetParent)(IMedium *medium, IMedium **parent);
|
||||||
nsresult (*GetChildren)(IMedium *medium, PRUint32 *childrenSize, IMedium ***children);
|
nsresult (*GetChildren)(IMedium *medium, PRUint32 *childrenSize, IMedium ***children);
|
||||||
@ -595,6 +596,7 @@ int vboxConnectNumOfStoragePools(virConnectPtr conn);
|
|||||||
int vboxConnectListStoragePools(virConnectPtr conn, char **const names, int nnames);
|
int vboxConnectListStoragePools(virConnectPtr conn, char **const names, int nnames);
|
||||||
virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const char *name);
|
virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const char *name);
|
||||||
int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool);
|
int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool);
|
||||||
|
int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nnames);
|
||||||
|
|
||||||
/* Version specified functions for installing uniformed API */
|
/* Version specified functions for installing uniformed API */
|
||||||
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
|
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
|
||||||
|
Loading…
Reference in New Issue
Block a user