X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fsortm.c;h=7d5a35c3841f8ac15a57cb1f29ed924ab7052049;hp=4b63bb6ed092dc51669909f8fe810ad2fa49fa88;hb=ced6090a330d3d83d0bce709f756aa3d7d65fea4;hpb=337338b404931f06f0db2119c9e145e8ca5a9860 diff --git a/uip/sortm.c b/uip/sortm.c index 4b63bb6..7d5a35c 100644 --- a/uip/sortm.c +++ b/uip/sortm.c @@ -1,10 +1,10 @@ /* - * sortm.c -- sort messages in a folder by date/time - * - * This code is Copyright (c) 2002, by the authors of nmh. See the - * COPYRIGHT file in the root directory of the nmh distribution for - * complete copyright information. - */ +** sortm.c -- sort messages in a folder by date/time +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ #include #include @@ -52,8 +52,8 @@ int verbose; typedef int (*qsort_comp) (const void *, const void *); /* - * static prototypes - */ +** static prototypes +*/ static int read_hdrs (struct msgs *, char *); static int get_fields (char *, int, struct smsg *); static int dsort (struct smsg **, struct smsg **); @@ -87,8 +87,8 @@ main (int argc, char **argv) argp = arguments; /* - * Parse arguments - */ + ** Parse arguments + */ while ((cp = *argp++)) { if (*cp == '-') { switch (smatch (++cp, switches)) { @@ -99,8 +99,7 @@ main (int argc, char **argv) adios (NULL, "-%s unknown", cp); case HELPSW: - snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]", - invo_name); + snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]", invo_name); print_help (buf, switches, 1); done (1); case VERSIONSW: @@ -111,14 +110,16 @@ main (int argc, char **argv) if (datesw) adios (NULL, "only one date field at a time"); if (!(datesw = *argp++) || *datesw == '-') - adios (NULL, "missing argument to %s", argp[-2]); + adios (NULL, "missing argument to %s", + argp[-2]); continue; case TEXTSW: if (subjsort) adios (NULL, "only one text field at a time"); if (!(subjsort = *argp++) || *subjsort == '-') - adios (NULL, "missing argument to %s", argp[-2]); + adios (NULL, "missing argument to %s", + argp[-2]); continue; case SUBJSW: @@ -160,7 +161,7 @@ main (int argc, char **argv) else folder = pluspath (cp); } else - app_msgarg(&msgs, cp); + app_msgarg(&msgs, cp); } if (!context_find ("path")) @@ -194,8 +195,8 @@ main (int argc, char **argv) adios (NULL, "no messages to sort"); /* - * sort a list of pointers to our "messages to be sorted". - */ + ** sort a list of pointers to our "messages to be sorted". + */ dlist = (struct smsg **) mh_xmalloc ((nmsgs+1) * sizeof(*dlist)); for (i = 0; i < nmsgs; i++) dlist[i] = &smsgs[i]; @@ -215,33 +216,36 @@ main (int argc, char **argv) (qsort_comp) (submajor && subjsort ? txtsort : dsort)); /* - * if we're sorting on subject, we need another list - * in subject order, then a merge pass to collate the - * two sorts. - */ + ** if we're sorting on subject, we need another list + ** in subject order, then a merge pass to collate the + ** two sorts. + */ if (!submajor && subjsort) { /* already date sorted */ struct smsg **slist, **flist; register struct smsg ***il, **fp, **dp; - slist = (struct smsg **) mh_xmalloc ((nmsgs+1) * sizeof(*slist)); + slist = (struct smsg **) + mh_xmalloc ((nmsgs+1) * sizeof(*slist)); memcpy((char *)slist, (char *)dlist, (nmsgs+1)*sizeof(*slist)); - qsort((char *)slist, nmsgs, sizeof(*slist), (qsort_comp) subsort); + qsort((char *)slist, nmsgs, sizeof(*slist), + (qsort_comp) subsort); /* - * make an inversion list so we can quickly find - * the collection of messages with the same subj - * given a message number. - */ + ** make an inversion list so we can quickly find + ** the collection of messages with the same subj + ** given a message number. + */ il = (struct smsg ***) calloc (mp->hghsel+1, sizeof(*il)); if (! il) adios (NULL, "couldn't allocate msg list"); for (i = 0; i < nmsgs; i++) il[slist[i]->s_msg] = &slist[i]; /* - * make up the final list, chronological but with - * all the same subjects grouped together. - */ - flist = (struct smsg **) mh_xmalloc ((nmsgs+1) * sizeof(*flist)); + ** make up the final list, chronological but with + ** all the same subjects grouped together. + */ + flist = (struct smsg **) + mh_xmalloc ((nmsgs+1) * sizeof(*flist)); fp = flist; for (dp = dlist; *dp;) { register struct smsg **s = il[(*dp++)->s_msg]; @@ -252,15 +256,12 @@ main (int argc, char **argv) *fp++ = *s++; /* - * take the next message(s) if there is one, - * its subject isn't null and its subject - * is the same as this one and it's not too - * far away in time. - */ - while (*s && (*s)->s_subj[0] && - strcmp((*s)->s_subj, s[-1]->s_subj) == 0 && - (datelimit == 0 || - (*s)->s_clock - s[-1]->s_clock <= datelimit)) { + ** take the next message(s) if there is one, + ** its subject isn't null and its subject + ** is the same as this one and it's not too + ** far away in time. + */ + while (*s && (*s)->s_subj[0] && strcmp((*s)->s_subj, s[-1]->s_subj) == 0 && (datelimit == 0 || (*s)->s_clock - s[-1]->s_clock <= datelimit)) { il[(*s)->s_msg] = 0; *fp++ = *s++; } @@ -272,9 +273,9 @@ main (int argc, char **argv) } /* - * At this point, dlist is a sorted array of pointers to smsg - * structures, each of which contains a message number. - */ + ** At this point, dlist is a sorted array of pointers to smsg + ** structures, each of which contains a message number. + */ rename_msgs (mp, dlist); @@ -316,9 +317,9 @@ read_hdrs (struct msgs *mp, char *datesw) /* - * Parse the message and get the data or subject field, - * if needed. - */ +** Parse the message and get the data or subject field, +** if needed. +*/ static int get_fields (char *datesw, int msg, struct smsg *smsg) @@ -343,15 +344,17 @@ get_fields (char *datesw, int msg, struct smsg *smsg) if (!mh_strcasecmp (nam, datesw)) { datecomp = add (buf, datecomp); while (state == FLDPLUS) { - state = m_getfld (state, nam, buf, sizeof(buf), in); + state = m_getfld (state, nam, buf, + sizeof(buf), in); datecomp = add (buf, datecomp); } if (!subjsort || subjcomp) break; - } else if (subjsort && !mh_strcasecmp (nam, subjsort)) { + } else if (subjsort && !mh_strcasecmp(nam, subjsort)) { subjcomp = add (buf, subjcomp); while (state == FLDPLUS) { - state = m_getfld (state, nam, buf, sizeof(buf), in); + state = m_getfld (state, nam, buf, + sizeof(buf), in); subjcomp = add (buf, subjcomp); } if (datecomp) @@ -359,7 +362,8 @@ get_fields (char *datesw, int msg, struct smsg *smsg) } else { /* just flush this guy */ while (state == FLDPLUS) - state = m_getfld (state, nam, buf, sizeof(buf), in); + state = m_getfld (state, nam, buf, + sizeof(buf), in); } continue; @@ -371,8 +375,7 @@ get_fields (char *datesw, int msg, struct smsg *smsg) case LENERR: case FMTERR: if (state == LENERR || state == FMTERR) - admonish (NULL, "format error in message %d (header #%d)", - msg, compnum); + admonish (NULL, "format error in message %d (header #%d)", msg, compnum); if (datecomp) free (datecomp); if (subjcomp) @@ -387,13 +390,14 @@ get_fields (char *datesw, int msg, struct smsg *smsg) } /* - * If no date component, then use the modification - * time of the file as its date - */ + ** If no date component, then use the modification + ** time of the file as its date + */ if (!datecomp || (tw = dparsetime (datecomp)) == NULL) { struct stat st; - admonish (NULL, "can't parse %s field in message %d", datesw, msg); + admonish (NULL, "can't parse %s field in message %d", + datesw, msg); fstat (fileno (in), &st); smsg->s_clock = st.st_mtime; } else { @@ -403,10 +407,10 @@ get_fields (char *datesw, int msg, struct smsg *smsg) if (subjsort) { if (subjcomp) { /* - * try to make the subject "canonical": delete - * leading "re:", everything but letters & smash - * letters to lower case. - */ + ** try to make the subject "canonical": delete + ** leading "re:", everything but letters & smash + ** letters to lower case. + */ register char *cp, *cp2; register unsigned char c; @@ -430,8 +434,7 @@ get_fields (char *datesw, int msg, struct smsg *smsg) } *cp2 = '\0'; - } - else + } else subjcomp = ""; smsg->s_subj = subjcomp; @@ -444,8 +447,8 @@ get_fields (char *datesw, int msg, struct smsg *smsg) } /* - * sort on dates. - */ +** sort on dates. +*/ static int dsort (struct smsg **a, struct smsg **b) { @@ -460,8 +463,8 @@ dsort (struct smsg **a, struct smsg **b) } /* - * sort on subjects. - */ +** sort on subjects. +*/ static int subsort (struct smsg **a, struct smsg **b) { @@ -503,8 +506,9 @@ rename_chain (struct msgs *mp, struct smsg **mlist, int msg, int endmsg) if (verbose) printf ("message %d becomes message %d\n", old, new); - (void)snprintf(oldname, sizeof (oldname), "%s/%d", mp->foldpath, old); - (void)snprintf(newbuf, sizeof (newbuf), "%s/%d", mp->foldpath, new); + snprintf(oldname, sizeof (oldname), "%s/%d", + mp->foldpath, old); + snprintf(newbuf, sizeof (newbuf), "%s/%d", mp->foldpath, new); ext_hook("ref-hook", oldname, newbuf); if (rename (oldname, newname) == NOTOK) @@ -543,25 +547,27 @@ rename_msgs (struct msgs *mp, struct smsg **mlist) continue; /* this one doesn't move */ /* - * the guy that was msg j is about to become msg i. - * rename 'j' to make a hole, then recursively rename - * guys to fill up the hole. - */ + ** the guy that was msg j is about to become msg i. + ** rename 'j' to make a hole, then recursively rename + ** guys to fill up the hole. + */ old = smsgs[j].s_msg; new = smsgs[i].s_msg; strncpy (f1, m_name (old), sizeof(f1)); if (verbose) - printf ("renaming message chain from %d to %d\n", old, new); + printf ("renaming message chain from %d to %d\n", + old, new); /* - * Run the external hook to refile the old message as the - * temporary message number that is off of the end of the - * messages in the folder. - */ + ** Run the external hook to refile the old message as the + ** temporary message number that is off of the end of the + ** messages in the folder. + */ (void)snprintf(f1, sizeof (f1), "%s/%d", mp->foldpath, old); - (void)snprintf(newbuf, sizeof (newbuf), "%s/%d", mp->foldpath, mp->hghmsg + 1); + (void)snprintf(newbuf, sizeof (newbuf), "%s/%d", + mp->foldpath, mp->hghmsg + 1); ext_hook("ref-hook", f1, newbuf); if (rename (f1, tmpfil) == NOTOK) @@ -572,9 +578,9 @@ rename_msgs (struct msgs *mp, struct smsg **mlist) rename_chain (mp, mlist, j, i); /* - * Run the external hook to refile the temorary message number - * to the real place. - */ + ** Run the external hook to refile the temorary message number + ** to the real place. + */ (void)snprintf(f1, sizeof (f1), "%s/%d", mp->foldpath, new); ext_hook("ref-hook", newbuf, f1);