X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fnew.c;h=1ea90103c1110a925b5234b79e9cb40a779e1147;hb=96d10c193324201ef8acb622ed13e9a5ecb59827;hp=f6ac3642f95f2799d52481ec7c3e07d51a6185f9;hpb=701adc46db60b3ca1f2e5087805eba59ffe87976;p=mmh diff --git a/uip/new.c b/uip/new.c index f6ac364..1ea9010 100644 --- a/uip/new.c +++ b/uip/new.c @@ -22,13 +22,13 @@ 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; @@ -433,10 +438,9 @@ main(int argc, char **argv) struct node *folder; sequences[0] = NULL; + sequences[1] = NULL; -#ifdef LOCALE setlocale(LC_ALL, ""); -#endif invo_name = mhbasename(argv[0]); /* read user profile/context */ @@ -453,7 +457,7 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - done(1); + exit(1); case UNKWNSW: adios(NULL, "-%s unknown", cp); @@ -462,10 +466,10 @@ main(int argc, char **argv) "%s [switches] [sequences]", invo_name); print_help(help, switches, 1); - done(1); + exit(0); case VERSIONSW: print_version(invo_name); - done(1); + exit(0); case FOLDERSSW: if (!(folders = *argp++) || *folders == '-') @@ -483,6 +487,7 @@ main(int argc, char **argv) /* have a sequence argument */ if (!seq_in_list(cp, sequences)) { sequences[i++] = cp; + sequences[i] = NULL; } } @@ -521,7 +526,7 @@ main(int argc, char **argv) folder = doit(context_find(curfolder), folders, sequences); if (folder == NULL) { - done(0); + exit(0); return 1; } @@ -545,6 +550,5 @@ main(int argc, char **argv) context_save(); - done(0); - return 1; + return 0; }