[PATCH 23/39] storage: zfs: Don't split string if we need only first/last component

Peter Krempa pkrempa at redhat.com
Thu Apr 1 13:52:22 UTC 2021


Use str(r)chr to find the correct bit rather than fully splitting the
string.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/storage/storage_backend_zfs.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/storage/storage_backend_zfs.c b/src/storage/storage_backend_zfs.c
index e4ef06722f..cab1fd1637 100644
--- a/src/storage/storage_backend_zfs.c
+++ b/src/storage/storage_backend_zfs.c
@@ -102,7 +102,7 @@ virStorageBackendZFSParseVol(virStoragePoolObjPtr pool,
     virStorageVolDefPtr volume = NULL;
     virStoragePoolDefPtr def = virStoragePoolObjGetDef(pool);
     g_auto(GStrv) tokens = NULL;
-    g_auto(GStrv) name_tokens = NULL;
+    char *tmp;

     if (!(tokens = virStringSplitCount(volume_string, "\t", 0, &count)))
         return -1;
@@ -110,10 +110,9 @@ virStorageBackendZFSParseVol(virStoragePoolObjPtr pool,
     if (count != 3)
         goto cleanup;

-    if (!(name_tokens = virStringSplitCount(tokens[0], "/", 0, &count)))
-        goto cleanup;
-
-    vol_name = name_tokens[count-1];
+    vol_name = tokens[0];
+    if ((tmp = strrchr(vol_name, '/')))
+        vol_name = tmp + 1;

     if (vol == NULL)
         volume = virStorageVolDefFindByName(pool, vol_name);
@@ -218,7 +217,8 @@ virStorageBackendZFSRefreshPool(virStoragePoolObjPtr pool G_GNUC_UNUSED)
     g_autoptr(virCommand) cmd = NULL;
     g_auto(GStrv) lines = NULL;
     g_auto(GStrv) tokens = NULL;
-    g_auto(GStrv) name_tokens = NULL;
+    g_autofree char *name = g_strdup(def->source.name);
+    char *tmp;

     /**
      * $ zpool get -Hp health,size,free,allocated test
@@ -230,13 +230,13 @@ virStorageBackendZFSRefreshPool(virStoragePoolObjPtr pool G_GNUC_UNUSED)
      *
      * Here we just provide a list of properties we want to see
      */
-    if (!(name_tokens = g_strsplit(def->source.name, "/", 0)))
-        goto cleanup;
+    if ((tmp = strchr(name, '/')))
+        *tmp = '\0';

     cmd = virCommandNewArgList(ZPOOL,
                                "get", "-Hp",
                                "health,size,free,allocated",
-                               name_tokens[0],
+                               name,
                                NULL);
     virCommandSetOutputBuffer(cmd, &zpool_props);
     if (virCommandRun(cmd, NULL) < 0)
-- 
2.29.2




More information about the libvir-list mailing list