*** new.c.orig 2013-10-12 16:20:21.000000000 -0700 --- new.c 2013-10-12 15:39:42.000000000 -0700 *************** *** 91,109 **** static char * get_msgnums(char *folder, char *sequences[]) { ! char *seqfile = concat(m_maildir(folder), "/", mh_seq, (void *)NULL); ! FILE *fp = fopen(seqfile, "r"); int state; char name[NAMESZ], field[BUFSIZ]; char *cp; char *msgnums = NULL, *this_msgnums, *old_msgnums; - /* no sequences file -> no messages */ - if (fp == NULL) { - return NULL; - } - /* copied from seq_read.c:seq_public */ for (state = FLD;;) { switch (state = m_getfld (state, name, field, sizeof(field), fp)) { case FLD: --- 91,120 ---- static char * get_msgnums(char *folder, char *sequences[]) { ! char *seqfile; ! FILE *fp; int state; char name[NAMESZ], field[BUFSIZ]; char *cp; char *msgnums = NULL, *this_msgnums, *old_msgnums; /* copied from seq_read.c:seq_public */ + /* + * If mh_seq == NULL (such as if nmh been compiled with + * NOPUBLICSEQ), 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 ((fp = lkfopen (seqfile, "r")) == NULL) + return NULL;; + + /* Use m_getfld to scan sequence file */ for (state = FLD;;) { switch (state = m_getfld (state, name, field, sizeof(field), fp)) { case FLD: *************** *** 166,172 **** break; /* break from for loop */ } ! fclose(fp); return msgnums; } --- 177,183 ---- break; /* break from for loop */ } ! lkfclose (fp, seqfile); return msgnums; }