Fix uip/whom.c for C89 compatibility
[mmh] / uip / new.c
index 9774729..9763376 100644 (file)
--- 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++) {
@@ -68,7 +70,7 @@ count_messages(char *field)
                }
        }
 
-       free(field);
+       mh_free0(&field);
 
        return total;
 }
@@ -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);
-                                               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);
-                                       }
+               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;
                }