[libvirt] [PATCH 8/8] driver: ensure URI path is non-NULL to simplify drivers

Daniel P. Berrangé berrange at redhat.com
Mon Apr 9 15:45:51 UTC 2018


Avoid the need for the drivers to explicitly check for a NULL path by
making sure it is at least the empty string.

Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 src/bhyve/bhyve_driver.c   | 2 +-
 src/esx/esx_driver.c       | 2 +-
 src/libvirt.c              | 8 +++++++-
 src/libxl/libxl_driver.c   | 5 ++---
 src/lxc/lxc_driver.c       | 3 +--
 src/openvz/openvz_driver.c | 3 +--
 src/phyp/phyp_driver.c     | 2 +-
 src/qemu/qemu_driver.c     | 6 ------
 src/test/test_driver.c     | 5 ++---
 src/vbox/vbox_common.c     | 6 ------
 src/vbox/vbox_driver.c     | 6 ------
 src/vmware/vmware_driver.c | 2 +-
 src/vz/vz_driver.c         | 2 +-
 13 files changed, 18 insertions(+), 34 deletions(-)

diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index 7d6439d79d..8870756ac5 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -199,7 +199,7 @@ bhyveConnectOpen(virConnectPtr conn,
 {
      virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
-     if (STRNEQ_NULLABLE(conn->uri->path, "/system")) {
+     if (STRNEQ(conn->uri->path, "/system")) {
          virReportError(VIR_ERR_INTERNAL_ERROR,
                         _("Unexpected bhyve URI path '%s', try bhyve:///system"),
                         conn->uri->path);
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index 335d9a970d..c682c800ca 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -852,7 +852,7 @@ esxConnectOpen(virConnectPtr conn, virConnectAuthPtr auth,
     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
     if (STRCASENEQ(conn->uri->scheme, "vpx") &&
-        conn->uri->path && STRNEQ(conn->uri->path, "/")) {
+        STRNEQ(conn->uri->path, "/")) {
         VIR_WARN("Ignoring unexpected path '%s' for non-vpx scheme '%s'",
                  conn->uri->path, conn->uri->scheme);
     }
diff --git a/src/libvirt.c b/src/libvirt.c
index 600beaa4d5..0b6bd6666e 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -1007,6 +1007,12 @@ virConnectOpenInternal(const char *name,
             goto failed;
         }
 
+        /* Avoid need for drivers to worry about NULLs, as
+         * no one needs to distinguish "" vs NULL */
+        if (ret->uri->path == NULL &&
+            VIR_STRDUP(ret->uri->path, "") < 0)
+            goto failed;
+
         VIR_DEBUG("Split \"%s\" to URI components:\n"
                   "  scheme %s\n"
                   "  server %s\n"
@@ -1016,7 +1022,7 @@ virConnectOpenInternal(const char *name,
                   uristr,
                   NULLSTR(ret->uri->scheme), NULLSTR(ret->uri->server),
                   NULLSTR(ret->uri->user), ret->uri->port,
-                  NULLSTR(ret->uri->path));
+                  ret->uri->path);
 
         if (ret->uri->scheme == NULL) {
             virReportError(VIR_ERR_NO_CONNECT,
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 45d0c99902..8808da8db1 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -853,13 +853,12 @@ libxlConnectOpen(virConnectPtr conn,
     }
 
     /* /session isn't supported in libxenlight */
-    if (conn->uri->path &&
-        STRNEQ(conn->uri->path, "") &&
+    if (STRNEQ(conn->uri->path, "") &&
         STRNEQ(conn->uri->path, "/") &&
         STRNEQ(conn->uri->path, "/system")) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unexpected Xen URI path '%s', try xen:///system"),
-                       NULLSTR(conn->uri->path));
+                       conn->uri->path);
         return VIR_DRV_OPEN_ERROR;
     }
 
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 2079dd0704..f6041aab43 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -170,8 +170,7 @@ static virDrvOpenStatus lxcConnectOpen(virConnectPtr conn,
     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
     /* If path isn't '/' then they typoed, tell them correct path */
-    if (conn->uri->path != NULL &&
-        STRNEQ(conn->uri->path, "/") &&
+    if (STRNEQ(conn->uri->path, "/") &&
         STRNEQ(conn->uri->path, "/system")) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Unexpected LXC URI path '%s', try lxc:///system"),
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 33893ac009..5a1446ddda 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -1444,8 +1444,7 @@ static virDrvOpenStatus openvzConnectOpen(virConnectPtr conn,
     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
     /* If path isn't /system, then they typoed, so tell them correct path */
-    if (conn->uri->path == NULL ||
-        STRNEQ(conn->uri->path, "/system")) {
+    if (STRNEQ(conn->uri->path, "/system")) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unexpected OpenVZ URI path '%s', try openvz:///system"),
                        conn->uri->path);
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index 55d459df5c..ed3d9feb58 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -1155,7 +1155,7 @@ phypConnectOpen(virConnectPtr conn,
     if (VIR_ALLOC(uuid_table) < 0)
         goto failure;
 
-    if (conn->uri->path) {
+    if (conn->uri->path[0] != '\0') {
         /* need to shift one byte in order to remove the first "/" of URI component */
         if (VIR_STRDUP(managed_system,
                        conn->uri->path + (conn->uri->path[0] == '/')) < 0)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e677bf13b5..97d72f6fe8 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -1150,12 +1150,6 @@ static virDrvOpenStatus qemuConnectOpen(virConnectPtr conn,
     }
 
     cfg = virQEMUDriverGetConfig(qemu_driver);
-    if (conn->uri->path == NULL) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("no QEMU URI path given, try %s"),
-                       cfg->uri);
-        goto cleanup;
-    }
 
     if (virQEMUDriverIsPrivileged(qemu_driver)) {
         if (STRNEQ(conn->uri->path, "/system") &&
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 56d496a849..eec7a82924 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -1454,9 +1454,8 @@ testConnectOpen(virConnectPtr conn,
 
     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
-    if (!conn->uri->path
-        || conn->uri->path[0] == '\0'
-        || (conn->uri->path[0] == '/' && conn->uri->path[1] == '\0')) {
+    if (conn->uri->path[0] == '\0' ||
+        (conn->uri->path[0] == '/' && conn->uri->path[1] == '\0')) {
         virReportError(VIR_ERR_INVALID_ARG,
                        "%s", _("testOpen: supply a path or use test:///default"));
         return VIR_DRV_OPEN_ERROR;
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index 05cf9ad0de..ee94931918 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -517,12 +517,6 @@ vboxConnectOpen(virConnectPtr conn,
 
     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
-    if (conn->uri->path == NULL || STREQ(conn->uri->path, "")) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("no VirtualBox driver path specified (try vbox:///session)"));
-        return VIR_DRV_OPEN_ERROR;
-    }
-
     if (uid != 0) {
         if (STRNEQ(conn->uri->path, "/session")) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c
index 9e95ab01c5..1f31fa28df 100644
--- a/src/vbox/vbox_driver.c
+++ b/src/vbox/vbox_driver.c
@@ -58,12 +58,6 @@ static virDrvOpenStatus dummyConnectOpen(virConnectPtr conn,
 
     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
-    if (conn->uri->path == NULL || STREQ(conn->uri->path, "")) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("no VirtualBox driver path specified (try vbox:///session)"));
-        return VIR_DRV_OPEN_ERROR;
-    }
-
     if (uid != 0) {
         if (STRNEQ(conn->uri->path, "/session")) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c
index de3708aab3..c8a3151faf 100644
--- a/src/vmware/vmware_driver.c
+++ b/src/vmware/vmware_driver.c
@@ -131,7 +131,7 @@ vmwareConnectOpen(virConnectPtr conn,
     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
     /* If path isn't /session, then they typoed, so tell them correct path */
-    if (conn->uri->path == NULL || STRNEQ(conn->uri->path, "/session")) {
+    if (STRNEQ(conn->uri->path, "/session")) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unexpected VMware URI path '%s', try vmwareplayer:///session, vmwarews:///session or vmwarefusion:///session"),
                        NULLSTR(conn->uri->path));
diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 5867f1c911..e51d968f28 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -359,7 +359,7 @@ vzConnectOpen(virConnectPtr conn,
     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
 
     /* From this point on, the connection is for us. */
-    if (STRNEQ_NULLABLE(conn->uri->path, "/system")) {
+    if (STRNEQ(conn->uri->path, "/system")) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Unexpected Virtuozzo URI path '%s', try vz:///system"),
                        conn->uri->path);
-- 
2.14.3




More information about the libvir-list mailing list