qemu-devel
[Top][All Lists]
Advanced

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

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


From: Denis V. Lunev
Subject: Re: [Qemu-devel] [PATCH v4 04/13] qga: make split_list() return allocated strings
Date: Thu, 27 Aug 2015 12:17:44 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0

On 08/27/2015 12:13 PM, Denis V. Lunev wrote:
On 08/27/2015 02:34 AM, address@hidden wrote:
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]);
why not to
__str = g_strsplit(str, delim, -1);
+    strv = g_strsplit(str, delim, -1);
+    for (i = 0; strv[i]; i++) {
+        list = g_list_prepend(list, strv[i]);
      }
+    g_free(strv);
g_free(__str);

This will remove all burden from callers.
You will be able to use const char * as argument too.


        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);
Reviewed-by: Denis V. Lunev <address@hidden>
sorry, this R-b was intended for previous patch.
Taken back :)



reply via email to

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