Use execprog() instead of system() ... partly transition
[mmh] / uip / new.c
index a79845c..a43a710 100644 (file)
--- a/uip/new.c
+++ b/uip/new.c
@@ -311,7 +311,11 @@ doit(char *cur, char *folders, char *sequences[])
        struct node *first, *cur_node, *node, *last = NULL, *prev;
        size_t folder_len;
        int count, total = 0;
-       char *command = NULL, *sequences_s = NULL;
+       char *sequences_s = NULL;
+       int argc = 0;
+       char *argv[MAXARGS];
+       char *cp;
+       char buf[BUFSIZ];
 
        if (cur == NULL || cur[0] == '\0') {
                cur = "inbox";
@@ -383,14 +387,15 @@ doit(char *cur, char *folders, char *sequences[])
                        }
                        fflush(stdout);
 
-                       /*
-                       ** TODO: Split enough of scan.c out so that we can
-                       ** call it here.
-                       */
-                       command = concat("scan +", node->n_name, " ",
-                                       sequences_s, (void *)NULL);
-                       system(command);
-                       free(command);
+                       argc = 0;
+                       argv[argc++] = "scan";
+                       snprintf(buf, sizeof buf, "+%s", node->n_name);
+                       argv[argc++] = buf;
+                       for (cp=*sequences; *cp; cp++) {
+                               argv[argc++] = cp;
+                       }
+                       argv[argc] = (char *)NULL;
+                       execprog(*argv, argv);
                } else {
                        if (node->n_field == NULL) {
                                continue;