Use str(r)chr to find the correct bit rather than fully splitting the string. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- 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