Use execprog() instead of system() ... partly transition
[mmh] / uip / new.c
index a4da635..a43a710 100644 (file)
--- a/uip/new.c
+++ b/uip/new.c
 
 static struct swit switches[] = {
 #define MODESW 0
-       { "mode", 1 },
+       { "mode", 0 },
 #define FOLDERSSW 1
-       { "folders", 1 },
+       { "folders", 0 },
 #define VERSIONSW 2
-       { "version", 1 },
+       { "Version", 0 },
 #define HELPSW 3
-       { "help", 1 },
+       { "help", 0 },
        { NULL, 0 }
 };
 
@@ -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;
@@ -432,9 +437,10 @@ main(int argc, char **argv)
        char *unseen;
        struct node *folder;
 
-#ifdef LOCALE
+       sequences[0] = NULL;
+       sequences[1] = NULL;
+
        setlocale(LC_ALL, "");
-#endif
        invo_name = mhbasename(argv[0]);
 
        /* read user profile/context */
@@ -481,6 +487,7 @@ main(int argc, char **argv)
                /* have a sequence argument */
                if (!seq_in_list(cp, sequences)) {
                        sequences[i++] = cp;
+                       sequences[i] = NULL;
                }
        }