Fix uip/whom.c for C89 compatibility
[mmh] / uip / sortm.c
index 61953e1..c56a401 100644 (file)
@@ -41,6 +41,8 @@ static struct swit switches[] = {
         { NULL, 0 }
 };
 
+char *version=VERSION;
+
 struct smsg {
        int s_msg;
        time_t s_clock;
@@ -161,7 +163,7 @@ main(int argc, char **argv)
                        if (folder)
                                adios(EX_USAGE, NULL, "only one folder at a time!");
                        else
-                               folder = getcpy(expandfol(cp));
+                               folder = mh_xstrdup(expandfol(cp));
                } else
                        app_msgarg(&msgs, cp);
        }
@@ -197,7 +199,7 @@ main(int argc, char **argv)
        /*
        ** sort a list of pointers to our "messages to be sorted".
        */
-       dlist = (struct smsg **) mh_xcalloc((size_t) (nmsgs+1), sizeof(*dlist));
+       dlist = mh_xcalloc(nmsgs+1, sizeof(*dlist));
        for (i = 0; i < nmsgs; i++)
                dlist[i] = &smsgs[i];
        dlist[nmsgs] = 0;
@@ -224,8 +226,7 @@ main(int argc, char **argv)
                struct smsg **slist, **flist;
                struct smsg ***il, **fp, **dp;
 
-               slist = (struct smsg **)
-                               mh_xmalloc((nmsgs+1) * sizeof(*slist));
+               slist = mh_xcalloc(nmsgs+1, sizeof(*slist));
                memcpy((char *)slist, (char *)dlist, (nmsgs+1)*sizeof(*slist));
                qsort((char *)slist, nmsgs, sizeof(*slist),
                                (qsort_comp) subsort);
@@ -235,7 +236,7 @@ main(int argc, char **argv)
                ** the collection of messages with the same subj
                ** given a message number.
                */
-               il = (struct smsg ***) mh_xcalloc(mp->hghsel+1, sizeof(*il));
+               il = mh_xcalloc(mp->hghsel+1, sizeof(*il));
                if (! il)
                        adios(EX_OSERR, NULL, "couldn't allocate msg list");
                for (i = 0; i < nmsgs; i++)
@@ -244,8 +245,7 @@ main(int argc, char **argv)
                ** make up the final list, chronological but with
                ** all the same subjects grouped together.
                */
-               flist = (struct smsg **)
-                               mh_xmalloc((nmsgs+1) * sizeof(*flist));
+               flist = mh_xcalloc(nmsgs+1, sizeof(*flist));
                fp = flist;
                for (dp = dlist; *dp;) {
                        struct smsg **s = il[(*dp++)->s_msg];
@@ -267,8 +267,8 @@ main(int argc, char **argv)
                        }
                }
                *fp = 0;
-               free(slist);
-               free(dlist);
+               mh_free0(&slist);
+               mh_free0(&dlist);
                dlist = flist;
        }
 
@@ -295,8 +295,7 @@ read_hdrs(struct msgs *mp, char *datesw)
 
        twscopy(&tb, dlocaltimenow());
 
-       smsgs = (struct smsg *) mh_xcalloc((size_t) (mp->hghsel - mp->lowsel + 2),
-                       sizeof(*smsgs));
+       smsgs = mh_xcalloc(mp->hghsel - mp->lowsel + 2, sizeof(*smsgs));
 
        s = smsgs;
        for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
@@ -334,15 +333,18 @@ get_fields(char *datesw, int msg, struct smsg *smsg)
        }
        for (compnum = 1, state = FLD2;; compnum++) {
                switch (state = m_getfld2(state, &f, in)) {
+               case LENERR2:
+                       state = FLD2;
+                       /* FALL */
                case FLD2:
                        if (mh_strcasecmp(f.name, datesw)==0) {
-                               datecomp = getcpy(f.value);
+                               datecomp = mh_xstrdup(f.value);
                                if (!subjsort || subjcomp) {
                                        break;
                                }
                        } else if (subjsort && mh_strcasecmp(f.name,
                                        subjsort)==0) {
-                               subjcomp = getcpy(f.value);
+                               subjcomp = mh_xstrdup(f.value);
                                if (datecomp) {
                                        break;
                                }
@@ -353,15 +355,18 @@ get_fields(char *datesw, int msg, struct smsg *smsg)
                case FILEEOF2:
                        break;
 
-               case LENERR2:
                case FMTERR2:
+                       admonish(NULL, "format error in message %d (header #%d)", msg, compnum);
+                       state = FLD2;
+                       continue;
+
                case IOERR2:
                        admonish(NULL, "format error in message %d (header #%d)", msg, compnum);
                        if (datecomp) {
-                               free(datecomp);
+                               mh_free0(&datecomp);
                        }
                        if (subjcomp) {
-                               free(subjcomp);
+                               mh_free0(&subjcomp);
                        }
                        fclose(in);
                        return (0);
@@ -424,7 +429,7 @@ get_fields(char *datesw, int msg, struct smsg *smsg)
        }
        fclose(in);
        if (datecomp)
-               free(datecomp);
+               mh_free0(&datecomp);
 
        return (1);
 }