qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v3 03/12] qga: move string split in separate fun


From: Denis V. Lunev
Subject: Re: [Qemu-devel] [PATCH v3 03/12] qga: move string split in separate function
Date: Wed, 26 Aug 2015 20:55:12 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0

On 08/26/2015 01:05 PM, address@hidden wrote:
From: Marc-André Lureau <address@hidden>

The function is going to be reused in a later patch.

Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Michael Roth <address@hidden>
---
  qga/main.c | 33 ++++++++++++++++++++++-----------
  1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/qga/main.c b/qga/main.c
index 10bb2f7..e75022c 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -921,6 +921,26 @@ 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)
+{
it would be much better to declare this helper as "split_list(const gchar *str, ...
and make temporary copy of parameter inside. Without this the function
as NASTY side-effect and trashes the string passed in.

Also it is rather reinvents strtok wheel.

you can also use g_strsplit at your convenience, but may be this is overkill

+    GList *list = NULL;
+    int i, j, len;
+
+    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]);
+    }
+
+    return list;
+}
+
  int main(int argc, char **argv)
  {
      const char *sopt = "hVvdm:p:l:f:F::b:s:t:";
@@ -953,7 +973,7 @@ int main(int argc, char **argv)
          { "statedir", 1, NULL, 't' },
          { NULL, 0, NULL, 0 }
      };
-    int opt_ind = 0, ch, daemonize = 0, i, j, len;
+    int opt_ind = 0, ch, daemonize = 0;
      GLogLevelFlags log_level = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL;
      GList *blacklist = NULL;
      GAState *s;
@@ -1001,16 +1021,7 @@ int main(int argc, char **argv)
                  qmp_for_each_command(ga_print_cmd, NULL);
                  exit(EXIT_SUCCESS);
              }
-            for (j = 0, i = 0, len = strlen(optarg); i < len; i++) {
-                if (optarg[i] == ',') {
-                    optarg[i] = 0;
-                    blacklist = g_list_append(blacklist, &optarg[j]);
-                    j = i + 1;
-                }
-            }
-            if (j < i) {
-                blacklist = g_list_append(blacklist, &optarg[j]);
-            }
+            blacklist = g_list_concat(blacklist, split_list(optarg, ','));
              break;
          }
  #ifdef _WIN32



reply via email to

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