-
-/*
- * sortm.c -- sort messages in a folder by date/time
+/* 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
#include <h/mh.h>
#include <h/tws.h>
#include <h/utils.h>
+#include "sbr/m_maildir.h"
#define SORTM_SWITCHES \
X("datefield field", 0, DATESW) \
static struct smsg *smsgs;
int nmsgs;
-char *subjsort = (char *) 0; /* sort on subject if != 0 */
+char *subjsort; /* sort on subject if != 0 */
time_t datelimit = 0;
int submajor = 0; /* if true, sort on subject-major */
int verbose;
if (*cp == '+' || *cp == '@') {
if (folder)
adios (NULL, "only one folder at a time!");
- else
- folder = pluspath (cp);
+ folder = pluspath (cp);
} else
- app_msgarg(&msgs, cp);
+ app_msgarg(&msgs, cp);
}
if (!context_find ("path"))
read_hdrs (struct msgs *mp, char *datesw)
{
int msgnum;
- struct tws tb;
struct smsg *s;
- twscopy (&tb, dlocaltimenow ());
-
smsgs = mh_xcalloc(mp->hghsel - mp->lowsel + 2, sizeof *smsgs);
s = smsgs;
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
{
int state;
int compnum;
- char *msgnam, buf[BUFSIZ], nam[NAMESZ];
+ char *msgnam, buf[NMH_BUFSIZ], nam[NAMESZ];
struct tws *tw;
char *datecomp = NULL, *subjcomp = NULL;
FILE *in;
- m_getfld_state_t gstate = 0;
+ m_getfld_state_t gstate;
if ((in = fopen (msgnam = m_name (msg), "r")) == NULL) {
admonish (msgnam, "unable to read message");
return (0);
}
+ gstate = m_getfld_state_init(in);
for (compnum = 1;;) {
int bufsz = sizeof buf;
- switch (state = m_getfld (&gstate, nam, buf, &bufsz, in)) {
+ switch (state = m_getfld2(&gstate, nam, buf, &bufsz)) {
case FLD:
case FLDPLUS:
compnum++;
datecomp = add (buf, datecomp);
while (state == FLDPLUS) {
bufsz = sizeof buf;
- state = m_getfld (&gstate, nam, buf, &bufsz, in);
+ state = m_getfld2(&gstate, nam, buf, &bufsz);
datecomp = add (buf, datecomp);
}
if (!subjsort || subjcomp)
subjcomp = add (buf, subjcomp);
while (state == FLDPLUS) {
bufsz = sizeof buf;
- state = m_getfld (&gstate, nam, buf, &bufsz, in);
+ state = m_getfld2(&gstate, nam, buf, &bufsz);
subjcomp = add (buf, subjcomp);
}
if (datecomp)
/* just flush this guy */
while (state == FLDPLUS) {
bufsz = sizeof buf;
- state = m_getfld (&gstate, nam, buf, &bufsz, in);
+ state = m_getfld2(&gstate, nam, buf, &bufsz);
}
}
continue;
case LENERR:
case FMTERR:
if (state == LENERR || state == FMTERR) {
- admonish (NULL, "format error in message %d (header #%d)",
+ inform("format error in message %d (header #%d), continuing...",
msg, compnum);
check_failed = 1;
}
- if (datecomp)
- free (datecomp);
- if (subjcomp)
- free (subjcomp);
+ free(datecomp);
+ free(subjcomp);
fclose (in);
return (0);
if (!datecomp || (tw = dparsetime (datecomp)) == NULL) {
struct stat st;
- advise (NULL,
- "can't parse %s field in message %d, "
- "will use file modification time",
- datesw, msg);
+ inform("can't parse %s field in message %d, "
+ "will use file modification time", datesw, msg);
fstat (fileno (in), &st);
smsg->s_clock = st.st_mtime;
check_failed = 1;
if (strcmp (subjsort, "subject") == 0) {
while ((c = *cp)) {
if (! isspace((unsigned char) c)) {
- if(uprf(cp, "re:"))
- cp += 2;
- else
+ if(!uprf(cp, "re:"))
break;
+ cp += 2;
}
cp++;
}
while ((c = *cp++)) {
if (isascii((unsigned char) c) && isalnum((unsigned char) c))
- *cp2++ = isupper((unsigned char) c) ?
- tolower((unsigned char) c) : c;
+ *cp2++ = tolower((unsigned char)c);
}
*cp2 = '\0';
smsg->s_subj = subjcomp;
}
fclose (in);
- if (datecomp)
- free (datecomp);
+ free(datecomp);
return (1);
}
rename_msgs (struct msgs *mp, struct smsg **mlist)
{
int i, j, old, new;
- bvector_t tmpset = bvector_create (0);
+ bvector_t tmpset = bvector_create ();
char f1[BUFSIZ], tmpfil[BUFSIZ];
char newbuf[PATH_MAX + 1];
struct smsg *sp;
rename_chain (mp, mlist, j, i);
/*
- * Run the external hook to refile the temorary message number
+ * Run the external hook to refile the temporary message number
* to the real place.
*/