X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/e491542da563673b49c6f6df9948ffaffbeed4fb..be6c3984:/uip/new.c?ds=inline diff --git a/uip/new.c b/uip/new.c index 5efdf74c..6f998252 100644 --- a/uip/new.c +++ b/uip/new.c @@ -13,10 +13,6 @@ #include -#include -#include -#include - #include #include #include @@ -93,20 +89,35 @@ 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); - FILE *fp = fopen(seqfile, "r"); + char *seqfile = NULL; + FILE *fp; int state; char name[NAMESZ], field[BUFSIZ]; char *cp; char *msgnums = NULL, *this_msgnums, *old_msgnums; m_getfld_state_t gstate = 0; - /* no sequences file -> no messages */ - if (fp == NULL) { - return NULL; + /* copied from seq_read.c:seq_public */ + /* + * If mh_seq == NULL or if *mh_seq == '\0' (the user has defined + * the "mh-sequences" profile entry, but left it empty), + * then just return, and do not initialize any public sequences. + */ + if (mh_seq == NULL || *mh_seq == '\0') + return NULL; + + /* get filename of sequence file */ + seqfile = concat(m_maildir(folder), "/", mh_seq, (void *)NULL); + + if (seqfile == NULL) + return NULL; + + if ((fp = lkfopendata (seqfile, "r")) == NULL) { + free(seqfile); + return NULL; } - /* copied from seq_read.c:seq_public */ + /* Use m_getfld to scan sequence file */ for (;;) { int fieldsz = sizeof field; switch (state = m_getfld (&gstate, name, field, &fieldsz, fp)) { @@ -167,7 +178,9 @@ get_msgnums(char *folder, char *sequences[]) } m_getfld_state_destroy (&gstate); - fclose(fp); + lkfclosedata (fp, seqfile); + + free(seqfile); return msgnums; } @@ -409,13 +422,7 @@ main(int argc, char **argv) char *unseen; struct node *folder; -#ifdef LOCALE - setlocale(LC_ALL, ""); -#endif - invo_name = r1bindex(argv[0], '/'); - - /* read user profile/context */ - context_read(); + if (nmh_init(argv[0], 1)) { return 1; } arguments = getarguments (invo_name, argc, argv, 1); argp = arguments;