X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fnew.c;h=de3c0be40c8e92c8ab00f53024df2d91af1adb6f;hp=92366623e2d69fcc66549d2eee71ae2299cf0ac7;hb=32b2354dbaf4bf934936eb5b102a4a3d2fdd209a;hpb=714b5c530ece27ea2835a313013f5b770163403c diff --git a/uip/new.c b/uip/new.c index 9236662..de3c0be 100644 --- a/uip/new.c +++ b/uip/new.c @@ -26,7 +26,7 @@ static struct swit switches[] = { #define FOLDERSSW 1 { "folders", 1 }, #define VERSIONSW 2 - { "version", 1 }, + { "Version", 1 }, #define HELPSW 3 { "help", 1 }, { NULL, 0 } @@ -94,7 +94,7 @@ seq_in_list(char *name, char *sequences[]) static char * get_msgnums(char *folder, char *sequences[]) { - char *seqfile = concat(m_maildir(folder), "/", mh_seq, (void *)NULL); + char *seqfile = concat(toabsdir(folder), "/", mh_seq, (void *)NULL); FILE *fp = fopen(seqfile, "r"); int state; char name[NAMESZ], field[BUFSIZ]; @@ -110,66 +110,65 @@ get_msgnums(char *folder, char *sequences[]) for (state = FLD;;) { switch (state = m_getfld(state, name, field, sizeof(field), fp)) { - case FLD: - case FLDPLUS: - case FLDEOF: - if (state == FLDPLUS) { - cp = getcpy(field); - while (state == FLDPLUS) { - state = m_getfld(state, name, - field, - sizeof(field), - fp); - cp = add(field, cp); - } + case FLD: + case FLDPLUS: + case FLDEOF: + if (state == FLDPLUS) { + cp = getcpy(field); + while (state == FLDPLUS) { + state = m_getfld(state, name, field, + sizeof(field), fp); + cp = add(field, cp); + } - /* - ** Here's where we differ from - ** seq_public: if it's in a - ** sequence we want, save the list - ** of messages. - */ - if (seq_in_list(name, sequences)) { - this_msgnums = trimcpy(cp); - if (msgnums == NULL) { - msgnums = this_msgnums; - } else { - old_msgnums = msgnums; - msgnums = concat(old_msgnums, " ", this_msgnums, (void *)NULL); - free(old_msgnums); - free(this_msgnums); - } + /* + ** Here's where we differ from + ** seq_public: if it's in a + ** sequence we want, save the list + ** of messages. + */ + if (seq_in_list(name, sequences)) { + this_msgnums = trimcpy(cp); + if (msgnums == NULL) { + msgnums = this_msgnums; + } else { + old_msgnums = msgnums; + msgnums = concat(old_msgnums, " ", this_msgnums, (void *)NULL); + free(old_msgnums); + free(this_msgnums); } - free(cp); - } else { - /* and here */ - if (seq_in_list(name, sequences)) { - this_msgnums = trimcpy(field); - if (msgnums == NULL) { - msgnums = this_msgnums; - } else { - old_msgnums = msgnums; - msgnums = concat(old_msgnums, " ", this_msgnums, (void *)NULL); - free(old_msgnums); - free(this_msgnums); - } + } + free(cp); + } else { + /* and here */ + if (seq_in_list(name, sequences)) { + this_msgnums = trimcpy(field); + if (msgnums == NULL) { + msgnums = this_msgnums; + } else { + old_msgnums = msgnums; + msgnums = concat(old_msgnums, " ", this_msgnums, (void *)NULL); + free(old_msgnums); + free(this_msgnums); } } + } - if (state == FLDEOF) - break; - continue; + if (state == FLDEOF) + break; + continue; - case BODY: - case BODYEOF: - adios(NULL, "no blank lines are permitted in %s", seqfile); - /* fall */ + case BODY: + case BODYEOF: + adios(NULL, "no blank lines are permitted in %s", + seqfile); + /* fall */ - case FILEEOF: - break; + case FILEEOF: + break; - default: - adios(NULL, "%s is poorly formatted", seqfile); + default: + adios(NULL, "%s is poorly formatted", seqfile); } break; /* break from for loop */ } @@ -252,7 +251,7 @@ check_folders(struct node **first, struct node **last, b.sequences = sequences; if (folders == NULL) { - chdir(m_maildir("")); + chdir(toabsdir("+")); crawl_folders(".", crawl_callback, &b); } else { fp = fopen(folders, "r"); @@ -309,7 +308,7 @@ join_sequences(char *sequences[]) static struct node * doit(char *cur, char *folders, char *sequences[]) { - struct node *first, *cur_node, *node, *last, *prev; + struct node *first, *cur_node, *node, *last = NULL, *prev; size_t folder_len; int count, total = 0; char *command = NULL, *sequences_s = NULL; @@ -433,10 +432,13 @@ main(int argc, char **argv) char *unseen; struct node *folder; + sequences[0] = NULL; + sequences[1] = NULL; + #ifdef LOCALE setlocale(LC_ALL, ""); #endif - invo_name = r1bindex(argv[0], '/'); + invo_name = mhbasename(argv[0]); /* read user profile/context */ context_read(); @@ -475,13 +477,14 @@ main(int argc, char **argv) if (!(invo_name = *argp++) || *invo_name == '-') adios(NULL, "missing argument to %s", argp[-2]); - invo_name = r1bindex(invo_name, '/'); + invo_name = mhbasename(invo_name); continue; } } /* have a sequence argument */ if (!seq_in_list(cp, sequences)) { sequences[i++] = cp; + sequences[i] = NULL; } } @@ -497,23 +500,28 @@ main(int argc, char **argv) /* will flists */ } else { if (folders[0] != '/') { - folders = m_maildir(folders); + folders = toabsdir(folders); } } if (i == 0) { + char *dp; /* no sequence arguments; use unseen */ - unseen = context_find(usequence); - if (unseen == NULL || unseen[0] == '\0') { - adios(NULL, "must specify sequences or set %s", usequence); + if ((unseen = context_find(usequence))) { + if (!*unseen) { + adios(NULL, "profile entry %s set, but empty, and no sequences given", usequence); + } + } else { + unseen = seq_unseen; /* use default */ } - for (ap = brkstring(unseen, " ", "\n"); *ap; ap++) { + dp = getcpy(unseen); + for (ap = brkstring(dp, " ", "\n"); *ap; ap++) { sequences[i++] = *ap; } } sequences[i] = NULL; - folder = doit(context_find(pfolder), folders, sequences); + folder = doit(context_find(curfolder), folders, sequences); if (folder == NULL) { done(0); return 1; @@ -527,11 +535,11 @@ main(int argc, char **argv) ** has in memory. So, we'll be lame, too. I'm not sure if i ** should just change context_replace... */ - context_replace(pfolder, "defeat_context_replace_optimization"); + context_replace(curfolder, "defeat_context_replace_optimization"); } /* update current folder */ - context_replace(pfolder, folder->n_name); + context_replace(curfolder, folder->n_name); if (run_mode == FNEXT || run_mode == FPREV) { printf("%s %s\n", folder->n_name, folder->n_field);