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

Peter Krempa posted 12 patches 7 years, 6 months ago
[libvirt] [PATCH 02/12] qemu: process: Split out useful parts from qemuBuildNetworkDriveURI
Posted by Peter Krempa 7 years, 6 months ago
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@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 02/12] qemu: process: Split out useful parts from qemuBuildNetworkDriveURI
Posted by Ján Tomko 7 years, 6 months ago
On Fri, Nov 03, 2017 at 03:29:19PM +0100, Peter Krempa wrote:
>--- 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 */

Please put the */ on a separate line.

>+virURIPtr
>+qemuBlockStorageSourceGetURI(virStorageSourcePtr src)
>+{

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