---
src/vbox/vbox_storage.c | 56 +++++++++++++++++++++++++++++++++++++++++
src/vbox/vbox_tmpl.c | 54 +++++----------------------------------
src/vbox/vbox_uniformed_api.h | 2 ++
3 files changed, 64 insertions(+), 48 deletions(-)
diff --git a/src/vbox/vbox_storage.c b/src/vbox/vbox_storage.c
index 804f723..ffa91a9 100644
--- a/src/vbox/vbox_storage.c
+++ b/src/vbox/vbox_storage.c
@@ -147,3 +147,59 @@ int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool)
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;
+}
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index c78cd44..ac712d8 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -2033,54 +2033,6 @@ _registerDomainEvent(virHypervisorDriverPtr driver)
* 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
vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
{
@@ -4904,6 +4856,11 @@ static nsresult _mediumGetState(IMedium *medium, PRUint32 *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,
PRBool *readOnly ATTRIBUTE_UNUSED)
{
@@ -5626,6 +5583,7 @@ static vboxUniformedIMedium _UIMedium = {
.GetId = _mediumGetId,
.GetLocation = _mediumGetLocation,
.GetState = _mediumGetState,
+ .GetName = _mediumGetName,
.GetReadOnly = _mediumGetReadOnly,
.GetParent = _mediumGetParent,
.GetChildren = _mediumGetChildren,
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index 4c17051..4a6ec33 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -409,6 +409,7 @@ typedef struct {
nsresult (*GetId)(IMedium *medium, vboxIIDUnion *iidu);
nsresult (*GetLocation)(IMedium *medium, PRUnichar **location);
nsresult (*GetState)(IMedium *medium, PRUint32 *state);
+ nsresult (*GetName)(IMedium *medium, PRUnichar **name);
nsresult (*GetReadOnly)(IMedium *medium, PRBool *readOnly);
nsresult (*GetParent)(IMedium *medium, IMedium **parent);
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);
virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const char *name);
int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool);
+int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nnames);
/* Version specified functions for installing uniformed API */
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
--
1.7.9.5