qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v4 04/13] qga: make split_list() return allocated st


From: marcandre . lureau
Subject: [Qemu-devel] [PATCH v4 04/13] qga: make split_list() return allocated strings
Date: Thu, 27 Aug 2015 01:34:50 +0200

From: Marc-André Lureau <address@hidden>

In order to avoid any confusion, let's allocate new strings when
splitting.

Signed-off-by: Marc-André Lureau <address@hidden>
---
 qga/commands-posix.c |  6 +++---
 qga/commands-win32.c |  4 ++--
 qga/main.c           | 22 +++++++++-------------
 3 files changed, 14 insertions(+), 18 deletions(-)

diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index 675f4b4..fc4fc72 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -2454,7 +2454,7 @@ GList *ga_command_blacklist_init(GList *blacklist)
         char **p = (char **)list;
 
         while (*p) {
-            blacklist = g_list_append(blacklist, *p++);
+            blacklist = g_list_append(blacklist, g_strdup(*p++));
         }
     }
 #endif
@@ -2468,13 +2468,13 @@ GList *ga_command_blacklist_init(GList *blacklist)
         char **p = (char **)list;
 
         while (*p) {
-            blacklist = g_list_append(blacklist, *p++);
+            blacklist = g_list_append(blacklist, g_strdup(*p++));
         }
     }
 #endif
 
 #if !defined(CONFIG_FSTRIM)
-    blacklist = g_list_append(blacklist, (char *)"guest-fstrim");
+    blacklist = g_list_append(blacklist, g_strdup("guest-fstrim"));
 #endif
 
     return blacklist;
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 77d3c92..cbee186 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -1306,7 +1306,7 @@ GList *ga_command_blacklist_init(GList *blacklist)
     char **p = (char **)list_unsupported;
 
     while (*p) {
-        blacklist = g_list_append(blacklist, *p++);
+        blacklist = g_list_append(blacklist, g_strdup(*p++));
     }
 
     if (!vss_init(true)) {
@@ -1317,7 +1317,7 @@ GList *ga_command_blacklist_init(GList *blacklist)
         p = (char **)list;
 
         while (*p) {
-            blacklist = g_list_append(blacklist, *p++);
+            blacklist = g_list_append(blacklist, g_strdup(*p++));
         }
     }
 
diff --git a/qga/main.c b/qga/main.c
index e75022c..a7df6c8 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -921,22 +921,17 @@ static void ga_print_cmd(QmpCommand *cmd, void *opaque)
     printf("%s\n", qmp_command_name(cmd));
 }
 
-static GList *split_list(gchar *str, const gchar separator)
+static GList *split_list(const gchar *str, const gchar *delim)
 {
     GList *list = NULL;
-    int i, j, len;
+    int i;
+    gchar **strv;
 
-    for (j = 0, i = 0, len = strlen(str); i < len; i++) {
-        if (str[i] == separator) {
-            str[i] = 0;
-            list = g_list_append(list, &str[j]);
-            j = i + 1;
-        }
-    }
-
-    if (j < i) {
-        list = g_list_append(list, &str[j]);
+    strv = g_strsplit(str, delim, -1);
+    for (i = 0; strv[i]; i++) {
+        list = g_list_prepend(list, strv[i]);
     }
+    g_free(strv);
 
     return list;
 }
@@ -1021,7 +1016,7 @@ int main(int argc, char **argv)
                 qmp_for_each_command(ga_print_cmd, NULL);
                 exit(EXIT_SUCCESS);
             }
-            blacklist = g_list_concat(blacklist, split_list(optarg, ','));
+            blacklist = g_list_concat(blacklist, split_list(optarg, ","));
             break;
         }
 #ifdef _WIN32
@@ -1201,6 +1196,7 @@ int main(int argc, char **argv)
     }
 #endif
 
+    g_list_free_full(ga_state->blacklist, g_free);
     ga_command_state_cleanup_all(ga_state->command_state);
     ga_channel_free(ga_state->channel);
 
-- 
2.4.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]