X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fnew.c;h=976337664d2909e3de4a9209130924f35a843cde;hp=25ee492b5d3113ef099c72623e4bee00f86d9b4d;hb=6e9577f324bef90765a5edc02044eb111ec48072;hpb=d4c34b4439a9dbd89664de460ed37ecddc260fb1 diff --git a/uip/new.c b/uip/new.c index 25ee492..9763376 100644 --- a/uip/new.c +++ b/uip/new.c @@ -33,6 +33,8 @@ static struct swit switches[] = { { NULL, 0 } }; +char *version=VERSION; + static enum { NEW, FNEXT, FPREV, UNSEEN } run_mode = NEW; /* @@ -55,7 +57,7 @@ count_messages(char *field) int j, k; char *cp, **ap; - field = getcpy(field); + field = mh_xstrdup(field); /* copied from seq_read.c:seq_init */ for (ap = brkstring(field, " ", "\n"); *ap; ap++) { @@ -95,11 +97,10 @@ seq_in_list(char *name, char *sequences[]) static char * get_msgnums(char *folder, char *sequences[]) { + enum state state; + struct field f = {{0}}; char *seqfile = concat(toabsdir(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 */ @@ -107,67 +108,43 @@ get_msgnums(char *folder, char *sequences[]) return NULL; } - /* copied from seq_read.c:seq_public */ - for (state = FLD;;) { - switch (state = m_getfld(state, name, field, sizeof(field), - fp)) { - case FLD: - case FLDPLUS: - if (state == FLDPLUS) { - cp = getcpy(field); - while (state == FLDPLUS) { - state = m_getfld(state, name, field, - sizeof(field), fp); - cp = add(field, cp); - } + for (state = FLD2;;) { + switch (state = m_getfld2(state, &f, fp)) { + case LENERR2: + state = FLD2; + /* FALL */ - /* - ** 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); - mh_free0(&old_msgnums); - mh_free0(&this_msgnums); - } - } - mh_free0(&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); - mh_free0(&old_msgnums); - mh_free0(&this_msgnums); - } + case FLD2: + /* + ** if it's in a sequence we want, + ** save the list of messages. + */ + if (seq_in_list(f.name, sequences)) { + this_msgnums = trimcpy(f.value); + if (msgnums == NULL) { + msgnums = this_msgnums; + } else { + old_msgnums = msgnums; + msgnums = concat(old_msgnums, " ", + this_msgnums, + NULL); + mh_free0(&old_msgnums); + mh_free0(&this_msgnums); } } - continue; - case BODY: - adios(EX_DATAERR, NULL, "no blank lines are permitted in %s", - seqfile); - /* fall */ + case BODY2: + adios(EX_DATAERR, NULL, "no blank lines are permitted in %s", seqfile); + /* FALL */ - case FILEEOF: + case FILEEOF2: break; default: adios(EX_SOFTWARE, NULL, "%s is poorly formatted", seqfile); } - break; /* break from for loop */ + break; } fclose(fp); @@ -258,7 +235,7 @@ check_folders(struct node **first, struct node **last, while (vfgets(fp, &line) == OK) { len = strlen(line) - 1; line[len] = '\0'; - check_folder(getcpy(line), len, &b); + check_folder(mh_xstrdup(line), len, &b); } fclose(fp); } @@ -514,7 +491,7 @@ main(int argc, char **argv) } else { unseen = seq_unseen; /* use default */ } - dp = getcpy(unseen); + dp = mh_xstrdup(unseen); for (ap = brkstring(dp, " ", "\n"); *ap; ap++) { sequences[i++] = *ap; }