/*
* sortm.c -- sort messages in a folder by date/time
*
- * $Id$
- *
* 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.
{ "verbose", 0 },
#define NVERBSW 7
{ "noverbose", 0 },
-#define VERSIONSW 8
+#define ALLMSGS 8
+ { "all", 0 },
+#define NALLMSGS 9
+ { "noall", 0 },
+#define CHECKSW 10
+ { "check", 0 },
+#define NCHECKSW 11
+ { "nocheck", 0 },
+#define VERSIONSW 12
{ "version", 0 },
-#define HELPSW 9
+#define HELPSW 13
{ "help", 0 },
{ NULL, 0 }
};
int nmsgs;
char *subjsort = (char *) 0; /* sort on subject if != 0 */
-unsigned long datelimit = 0;
+time_t datelimit = 0;
int submajor = 0; /* if true, sort on subject-major */
int verbose;
+int allmsgs = 1;
+int check_failed = 0;
/* This keeps compiler happy on calls to qsort */
typedef int (*qsort_comp) (const void *, const void *);
struct msgs_array msgs = { 0, 0, NULL };
struct msgs *mp;
struct smsg **dlist;
+ int checksw = 0;
#ifdef LOCALE
setlocale(LC_ALL, "");
snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]",
invo_name);
print_help (buf, switches, 1);
- done (1);
+ done (0);
case VERSIONSW:
print_version(invo_name);
- done (1);
+ done (0);
case DATESW:
if (datesw)
case NVERBSW:
verbose = 0;
continue;
+
+ case ALLMSGS:
+ allmsgs = 1;
+ continue;
+ case NALLMSGS:
+ allmsgs = 0;
+ continue;
+
+ case CHECKSW:
+ checksw = 1;
+ continue;
+ case NCHECKSW:
+ checksw = 0;
+ continue;
}
}
if (*cp == '+' || *cp == '@') {
if (!context_find ("path"))
free (path ("./", TFOLDER));
- if (!msgs.size)
- app_msgarg(&msgs, "all");
+ if (!msgs.size) {
+ if (allmsgs) {
+ app_msgarg(&msgs, "all");
+ } else {
+ adios (NULL, "must specify messages to sort with -noall");
+ }
+ }
if (!datesw)
datesw = "date";
if (!folder)
if ((nmsgs = read_hdrs (mp, datesw)) <= 0)
adios (NULL, "no messages to sort");
+ if (checksw && check_failed) {
+ adios (NULL, "errors found, no messages sorted");
+ }
+
/*
* sort a list of pointers to our "messages to be sorted".
*/
if (verbose) { /* announce what we're doing */
if (subjsort)
- printf ("sorting by %s-major %s-minor\n",
- submajor ? subjsort : datesw,
- submajor ? datesw : subjsort);
+ if (submajor)
+ printf ("sorting by %s\n", subjsort);
+ else
+ printf ("sorting by %s-major %s-minor\n", subjsort, datesw);
else
printf ("sorting by datefield %s\n", datesw);
}
case LENERR:
case FMTERR:
- if (state == LENERR || state == FMTERR)
+ if (state == LENERR || state == FMTERR) {
admonish (NULL, "format error in message %d (header #%d)",
msg, compnum);
+ check_failed = 1;
+ }
if (datecomp)
free (datecomp);
if (subjcomp)
admonish (NULL, "can't parse %s field in message %d", datesw, msg);
fstat (fileno (in), &st);
smsg->s_clock = st.st_mtime;
+ check_failed = 1;
} else {
smsg->s_clock = dmktime (tw);
}
{
int nxt, old, new;
char *newname, oldname[BUFSIZ];
- char newbuf[MAXPATHLEN + 1];
+ char newbuf[PATH_MAX + 1];
for (;;) {
nxt = mlist[msg] - smsgs; /* mlist[msg] is a ptr into smsgs */
int i, j, old, new;
seqset_t tmpset;
char f1[BUFSIZ], tmpfil[BUFSIZ];
- char newbuf[MAXPATHLEN + 1];
+ char newbuf[PATH_MAX + 1];
struct smsg *sp;
strncpy (tmpfil, m_name (mp->hghmsg + 1), sizeof(tmpfil));