[libvirt] [PATCH 07/19] vbox: Rewrite vboxStorageVolLookupByName

Taowei Luo uaedante at gmail.com
Fri Oct 24 01:46:41 UTC 2014


---
 src/vbox/vbox_storage.c       |   73 +++++++++++++++++++++++++++++++++++++++++
 src/vbox/vbox_tmpl.c          |   65 ------------------------------------
 src/vbox/vbox_uniformed_api.h |    2 ++
 3 files changed, 75 insertions(+), 65 deletions(-)

diff --git a/src/vbox/vbox_storage.c b/src/vbox/vbox_storage.c
index ffa91a9..75711f7 100644
--- a/src/vbox/vbox_storage.c
+++ b/src/vbox/vbox_storage.c
@@ -203,3 +203,76 @@ int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int n
 
     return ret;
 }
+
+virStorageVolPtr vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
+{
+    vboxGlobalData *data = pool->conn->privateData;
+    vboxArray hardDisks = VBOX_ARRAY_INITIALIZER;
+    nsresult rc;
+    size_t i;
+    virStorageVolPtr ret = NULL;
+
+    if (!data->vboxObj) {
+        return ret;
+    }
+
+    if (!name)
+        return ret;
+
+    rc = gVBoxAPI.UArray.vboxArrayGet(&hardDisks, data->vboxObj,
+                                      gVBoxAPI.UArray.handleGetHardDisks(data->vboxObj));
+    if (NS_FAILED(rc))
+        return ret;
+
+    for (i = 0; i < hardDisks.count; ++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);
+
+        if (nameUtf16) {
+            VBOX_UTF16_TO_UTF8(nameUtf16, &nameUtf8);
+            VBOX_UTF16_FREE(nameUtf16);
+        }
+
+        if (nameUtf8 && STREQ(nameUtf8, name)) {
+            vboxIIDUnion hddIID;
+            unsigned char uuid[VIR_UUID_BUFLEN];
+            char key[VIR_UUID_STRING_BUFLEN] = "";
+
+            VBOX_IID_INITIALIZE(&hddIID);
+            rc = gVBoxAPI.UIMedium.GetId(hardDisk, &hddIID);
+            if (NS_SUCCEEDED(rc)) {
+                vboxIIDToUUID(&hddIID, uuid);
+                virUUIDFormat(uuid, key);
+
+                ret = virGetStorageVol(pool->conn, pool->name, name, key,
+                                       NULL, NULL);
+
+                VIR_DEBUG("virStorageVolPtr: %p", ret);
+                VIR_DEBUG("Storage Volume Name: %s", name);
+                VIR_DEBUG("Storage Volume key : %s", key);
+                VIR_DEBUG("Storage Volume Pool: %s", pool->name);
+            }
+
+            vboxIIDUnalloc(&hddIID);
+            VBOX_UTF8_FREE(nameUtf8);
+            break;
+        }
+
+        VBOX_UTF8_FREE(nameUtf8);
+    }
+
+    gVBoxAPI.UArray.vboxArrayRelease(&hardDisks);
+
+    return ret;
+}
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index ac712d8..cc7e35e 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -2034,71 +2034,6 @@ _registerDomainEvent(virHypervisorDriverPtr driver)
  */
 
 static virStorageVolPtr
-vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
-{
-    VBOX_OBJECT_CHECK(pool->conn, virStorageVolPtr, NULL);
-    vboxArray hardDisks = VBOX_ARRAY_INITIALIZER;
-    nsresult rc;
-    size_t i;
-
-    if (!name)
-        return ret;
-
-    rc = vboxArrayGet(&hardDisks, data->vboxObj, data->vboxObj->vtbl->GetHardDisks);
-    if (NS_SUCCEEDED(rc)) {
-        for (i = 0; i < hardDisks.count; ++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);
-
-                    if (nameUtf16) {
-                        VBOX_UTF16_TO_UTF8(nameUtf16, &nameUtf8);
-                        VBOX_UTF16_FREE(nameUtf16);
-                    }
-
-                    if (nameUtf8 && STREQ(nameUtf8, name)) {
-                        vboxIID hddIID = VBOX_IID_INITIALIZER;
-                        unsigned char uuid[VIR_UUID_BUFLEN];
-                        char key[VIR_UUID_STRING_BUFLEN] = "";
-
-                        rc = VBOX_MEDIUM_FUNC_ARG1(hardDisk, GetId, &hddIID.value);
-                        if (NS_SUCCEEDED(rc)) {
-                            vboxIIDToUUID(&hddIID, uuid);
-                            virUUIDFormat(uuid, key);
-
-                            ret = virGetStorageVol(pool->conn, pool->name, name, key,
-                                                   NULL, NULL);
-
-                            VIR_DEBUG("virStorageVolPtr: %p", ret);
-                            VIR_DEBUG("Storage Volume Name: %s", name);
-                            VIR_DEBUG("Storage Volume key : %s", key);
-                            VIR_DEBUG("Storage Volume Pool: %s", pool->name);
-                        }
-
-                        vboxIIDUnalloc(&hddIID);
-                        VBOX_UTF8_FREE(nameUtf8);
-                        break;
-                    }
-
-                    VBOX_UTF8_FREE(nameUtf8);
-                }
-            }
-        }
-
-        vboxArrayRelease(&hardDisks);
-    }
-
-    return ret;
-}
-
-static virStorageVolPtr
 vboxStorageVolLookupByKey(virConnectPtr conn, const char *key)
 {
     VBOX_OBJECT_CHECK(conn, virStorageVolPtr, NULL);
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index 4a6ec33..a6eb3ef 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -597,6 +597,8 @@ int vboxConnectListStoragePools(virConnectPtr conn, char **const names, int nnam
 virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const char *name);
 int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool);
 int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nnames);
+virStorageVolPtr vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name);
+
 
 /* Version specified functions for installing uniformed API */
 void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
-- 
1.7.9.5




More information about the libvir-list mailing list