am d4cdd13f: init: Clean up dynamic argument handling for services

Merge commit 'd4cdd13f6f56f3fe8d8511b609e823925fdd83f9'

* commit 'd4cdd13f6f56f3fe8d8511b609e823925fdd83f9':
  init: Clean up dynamic argument handling for services
diff --git a/init/init.c b/init/init.c
index 3ed3206..8c2a058 100644
--- a/init/init.c
+++ b/init/init.c
@@ -193,7 +193,8 @@
     }
 
     if ((!(svc->flags & SVC_ONESHOT)) && dynamic_args) {
-        ERROR("service '%s' must be one-shot to use dynamic args, disabling\n", svc->args[0]);
+        ERROR("service '%s' must be one-shot to use dynamic args, disabling\n",
+               svc->args[0]);
         svc->flags |= SVC_DISABLED;
         return;
     }
@@ -260,42 +261,18 @@
             }
         } else {
             char *arg_ptrs[SVC_MAXARGS+1];
-            int arg_idx;
+            int arg_idx = svc->nargs;
             char *tmp = strdup(dynamic_args);
-            char *p = tmp;
+            char *next = tmp;
+            char *bword;
 
             /* Copy the static arguments */
-            for (arg_idx = 0; arg_idx < svc->nargs; arg_idx++) {
-                arg_ptrs[arg_idx] = svc->args[arg_idx];
-            }
+            memcpy(arg_ptrs, svc->args, (svc->nargs * sizeof(char *)));
 
-            int done = 0;
-            while(!done) {
-
-                if (arg_idx == SVC_MAXARGS) 
+            while((bword = strsep(&next, " "))) {
+                arg_ptrs[arg_idx++] = bword;
+                if (arg_idx == SVC_MAXARGS)
                     break;
-
-                /* Advance over any leading whitespace */
-                if (*p == ' ') {
-                    for (p; *p != ' '; p++);
-                    p++;
-                }
-                /* Locate next argument */
-                char *q = p;
-                while(1) {
-                    if (*q == ' ') {
-                        *q = '\0';
-                        break;
-                    } else if (*q == '\0') {
-                        done = 1;
-                        break;
-                    }
-                    q++;
-                }
-                arg_ptrs[arg_idx++] = p;
-
-                q++; // Advance q to the next string
-                p = q;
             }
             arg_ptrs[arg_idx] = '\0';
             execve(svc->args[0], (char**) arg_ptrs, (char**) ENV);
@@ -464,7 +441,6 @@
         svc = service_find_by_name(name);
     else {
         tmp = strdup(name);
-        strcpy(tmp, name);
         args = strchr(tmp, ':');
         *args = '\0';
         args++;
@@ -804,7 +780,7 @@
     svc = service_find_by_keychord(id);
     if (svc) {
         INFO("starting service %s from keychord\n", svc->name);
-        service_start(svc, NULL);   
+        service_start(svc, NULL);
     } else {
         ERROR("service for keychord %d not found\n", id);
     }