[PATCH 02/12] qemu: process: Split out useful parts from qemuBuildNetworkDriveURI

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Extract the part formatting the basic URI part so that it can be reused
to format JSON backing definitions. Parts specific to the command line
format will remain in qemuBuildNetworkDriveURI. The new function is
called qemuBlockStorageSourceGetURI.
---
 src/qemu/qemu_block.c   | 58 +++++++++++++++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_block.h   |  4 ++++
 src/qemu/qemu_command.c | 38 +-------------------------------
 3 files changed, 63 insertions(+), 37 deletions(-)

diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 96db19226..018d7c7ec 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -390,6 +390,64 @@ qemuBlockGetNodeData(virJSONValuePtr data)
 }


+/**
+ * qemuBlockStorageSourceGetURI:
+ * @src: disk storage source
+ *
+ * Formats a URI from a virStorageSource */
+virURIPtr
+qemuBlockStorageSourceGetURI(virStorageSourcePtr src)
+{
+    virURIPtr uri = NULL;
+    virURIPtr ret = NULL;
+
+    if (src->nhosts != 1) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("protocol '%s' accepts only one host"),
+                       virStorageNetProtocolTypeToString(src->protocol));
+        goto cleanup;
+    }
+
+    if (VIR_ALLOC(uri) < 0)
+        goto cleanup;
+
+    if (src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) {
+        uri->port = src->hosts->port;
+
+        if (VIR_STRDUP(uri->scheme,
+                       virStorageNetProtocolTypeToString(src->protocol)) < 0)
+            goto cleanup;
+    } else {
+        if (virAsprintf(&uri->scheme, "%s+%s",
+                        virStorageNetProtocolTypeToString(src->protocol),
+                        virStorageNetHostTransportTypeToString(src->hosts->transport)) < 0)
+            goto cleanup;
+    }
+
+    if (src->path) {
+        if (src->volume) {
+            if (virAsprintf(&uri->path, "/%s%s",
+                            src->volume, src->path) < 0)
+                goto cleanup;
+        } else {
+            if (virAsprintf(&uri->path, "%s%s",
+                            src->path[0] == '/' ? "" : "/",
+                            src->path) < 0)
+                goto cleanup;
+        }
+    }
+
+    if (VIR_STRDUP(uri->server, src->hosts->name) < 0)
+        goto cleanup;
+
+    VIR_STEAL_PTR(ret, uri);
+
+ cleanup:
+    virURIFree(uri);
+    return ret;
+}
+
+
 /**
  * qemuBlockStorageSourceBuildJSONSocketAddress
  * @host: the virStorageNetHostDefPtr definition to build
diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
index f0a2c9aa7..b9ee97f48 100644
--- a/src/qemu/qemu_block.h
+++ b/src/qemu/qemu_block.h
@@ -26,6 +26,7 @@

 # include "virhash.h"
 # include "virjson.h"
+# include "viruri.h"

 typedef struct qemuBlockNodeNameBackingChainData qemuBlockNodeNameBackingChainData;
 typedef qemuBlockNodeNameBackingChainData *qemuBlockNodeNameBackingChainDataPtr;
@@ -56,4 +57,7 @@ qemuBlockGetNodeData(virJSONValuePtr data);
 virJSONValuePtr
 qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src);

+virURIPtr
+qemuBlockStorageSourceGetURI(virStorageSourcePtr src);
+
 #endif /* __QEMU_BLOCK_H__ */
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index b1cfafa79..25d5fdf18 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -829,41 +829,8 @@ qemuBuildNetworkDriveURI(virStorageSourcePtr src,
     virURIPtr uri = NULL;
     char *ret = NULL;

-    if (src->nhosts != 1) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("protocol '%s' accepts only one host"),
-                       virStorageNetProtocolTypeToString(src->protocol));
+    if (!(uri = qemuBlockStorageSourceGetURI(src)))
         goto cleanup;
-    }
-
-    if (VIR_ALLOC(uri) < 0)
-        goto cleanup;
-
-    if (src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) {
-        uri->port = src->hosts->port;
-
-        if (VIR_STRDUP(uri->scheme,
-                       virStorageNetProtocolTypeToString(src->protocol)) < 0)
-            goto cleanup;
-    } else {
-        if (virAsprintf(&uri->scheme, "%s+%s",
-                        virStorageNetProtocolTypeToString(src->protocol),
-                        virStorageNetHostTransportTypeToString(src->hosts->transport)) < 0)
-            goto cleanup;
-    }
-
-    if (src->path) {
-        if (src->volume) {
-            if (virAsprintf(&uri->path, "/%s%s",
-                            src->volume, src->path) < 0)
-                goto cleanup;
-        } else {
-            if (virAsprintf(&uri->path, "%s%s",
-                            src->path[0] == '/' ? "" : "/",
-                            src->path) < 0)
-                goto cleanup;
-        }
-    }

     if (src->hosts->socket &&
         virAsprintf(&uri->query, "socket=%s", src->hosts->socket) < 0)
@@ -872,9 +839,6 @@ qemuBuildNetworkDriveURI(virStorageSourcePtr src,
     if (qemuBuildGeneralSecinfoURI(uri, secinfo) < 0)
         goto cleanup;

-    if (VIR_STRDUP(uri->server, src->hosts->name) < 0)
-        goto cleanup;
-
     ret = virURIFormat(uri);

  cleanup:
-- 
2.14.3

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux