]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virISCSIDirectUpdateTargets: Rework to simplify cleanup and return GStrv
authorPeter Krempa <pkrempa@redhat.com>
Fri, 18 Jun 2021 12:06:27 +0000 (14:06 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 21 Jun 2021 08:46:35 +0000 (10:46 +0200)
Count the elements in advance rather than using VIR_APPEND_ELEMENT and
ensure that there's a NULL terminator for the string list so it's GStrv
compatible.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/storage/storage_backend_iscsi_direct.c

index 263db835ae29042b222793f32ce60fd76b0a9ba8..7b2e62f2b8719690b6905f62100cfb6a66db5758 100644 (file)
@@ -420,37 +420,30 @@ virISCSIDirectUpdateTargets(struct iscsi_context *iscsi,
                             size_t *ntargets,
                             char ***targets)
 {
-    int ret = -1;
     struct iscsi_discovery_address *addr;
     struct iscsi_discovery_address *tmp_addr;
-    size_t tmp_ntargets = 0;
-    char **tmp_targets = NULL;
+    size_t i = 0;
+
+    *ntargets = 0;
 
     if (!(addr = iscsi_discovery_sync(iscsi))) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Failed to discover session: %s"),
                        iscsi_get_error(iscsi));
-        return ret;
+        return -1;
     }
 
-    for (tmp_addr = addr; tmp_addr; tmp_addr = tmp_addr->next) {
-        g_autofree char *target = NULL;
-
-        target = g_strdup(tmp_addr->target_name);
+    for (tmp_addr = addr; tmp_addr; tmp_addr = tmp_addr->next)
+        (*ntargets)++;
 
-        if (VIR_APPEND_ELEMENT(tmp_targets, tmp_ntargets, target) < 0)
-            goto cleanup;
-    }
+    *targets = g_new0(char *, *ntargets + 1);
 
-    *targets = g_steal_pointer(&tmp_targets);
-    *ntargets = tmp_ntargets;
-    tmp_ntargets = 0;
+    for (tmp_addr = addr; tmp_addr; tmp_addr = tmp_addr->next)
+        *targets[i++] = g_strdup(tmp_addr->target_name);
 
-    ret = 0;
- cleanup:
     iscsi_free_discovery_data(iscsi, addr);
-    virStringListFreeCount(tmp_targets, tmp_ntargets);
-    return ret;
+
+    return 0;
 }
 
 static int