-
-/*
- * mhstoresbr.c -- routines to save/store the contents of MIME messages
+/* mhstoresbr.c -- routines to save/store the contents of MIME messages
*
* 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/md5.h>
#include <h/mts.h>
#include <h/tws.h>
+#include <h/fmt_scan.h>
#include <h/mime.h>
#include <h/mhparse.h>
#include <h/utils.h>
+#include "mhmisc.h"
+#include "mhshowsbr.h"
+#include "sbr/m_maildir.h"
+#include "sbr/m_mktemp.h"
enum clobber_policy_t {
NMH_CLOBBER_ALWAYS = 0,
NMH_CLOBBER_NEVER
};
-static enum clobber_policy_t clobber_policy (const char *);
+static enum clobber_policy_t clobber_policy (const char *) PURE;
struct mhstoreinfo {
CT *cts; /* Top-level list of contents to store. */
typedef int (*qsort_comp) (const void *, const void *);
-/* mhmisc.c */
-int part_ok (CT);
-int type_ok (CT, int);
-void flush_errors (void);
-
/*
* static prototypes
*/
}
if (hi == 0) {
- advise (NULL, "missing (at least) last part of multipart message");
+ inform("missing (at least) last part of multipart message");
return NOTOK;
}
for (ctq = base; *ctq; ctq++) {
p = *ctq;
pm = (struct partial *) p->c_ctparams;
- if (pm->pm_marked != cur) {
- if (pm->pm_marked == cur - 1) {
- admonish (NULL,
- "duplicate part %d of %d part multipart message",
- pm->pm_marked, hi);
- continue;
- }
+ if (pm->pm_marked == cur) {
+ cur++;
+ continue;
+ }
+
+ if (pm->pm_marked == cur - 1) {
+ inform("duplicate part %d of %d part multipart message, continuing...",
+ pm->pm_marked, hi);
+ continue;
+ }
missing_part:
- advise (NULL,
- "missing %spart %d of %d part multipart message",
- cur != hi ? "(at least) " : "", cur, hi);
- goto losing;
- }
- else
- cur++;
+ inform("missing %spart %d of %d part multipart message",
+ cur != hi ? "(at least) " : "", cur, hi);
+ goto losing;
}
if (hi != --cur) {
cur = hi;
if (p) {
appending = 1;
if (! ct->c_storage) {
- ct->c_storage = add (p->c_storage, NULL);
+ ct->c_storage = mh_xstrdup(FENDNULL(p->c_storage));
/* record the folder name */
if (p->c_folder) {
create_folder(m_mailpath(folder), 0, exit);
/* Record the folder name */
- ct->c_folder = add (folder, NULL);
+ ct->c_folder = mh_xstrdup(folder);
if (cp[1])
free (folder);
int cc, fd;
if (!ct->c_ceopenfnx) {
- advise (NULL, "don't know how to decode part %s of message %s",
+ inform("don't know how to decode part %s of message %s",
ct->c_partno, ct->c_file);
return NOTOK;
}
struct msgs *mp;
/* Read the folder. */
- if ((mp = folder_read (folder, 0))) {
- /* Link file into folder */
- msgnum = folder_addmsg (&mp, filename, 0, 0, 0, 0, NULL);
- } else {
- advise (NULL, "unable to read folder %s", folder);
+ if (!(mp = folder_read(folder, 0))) {
+ inform("unable to read folder %s", folder);
return NOTOK;
}
+ /* Link file into folder */
+ msgnum = folder_addmsg(&mp, filename, 0, 0, 0, 0, NULL);
/* free folder structure */
folder_free (mp);
* appropriate directory.
*/
if (*cp != '/' && *cp != '|' && *cp != '!') {
- snprintf (bp, buflen, "%s/", dir[1] ? dir : "");
+ if (!strcmp(dir, "/"))
+ dir = ""; /* Don't start with "//". */
+ snprintf (bp, buflen, "%s/", dir);
len = strlen (bp);
bp += len;
buflen -= len;
*bp = '\0';
buflen--;
continue;
- } else {
+ }
+ {
PM pm;
char *s = "";
break;
case 'p':
- /* insert part number withouth leading dot */
+ /* insert part number without leading dot */
if (ct->c_partno)
strncpy (bp, ct->c_partno, buflen);
break;
free(cp);
return;
}
- mh_xfree(cp);
+ free(cp);
}
/*
ct->c_storeproc = mh_xstrdup(cp);
}
- mh_xfree(cp);
+ free(cp);
}
default:
/* Should never get here. */
- advise (NULL, "will not overwrite %s, invalid clobber policy", buffer);
+ inform("will not overwrite %s, invalid clobber policy", buffer);
free (buffer);
return NULL;
}
free (file);
if (version >= max_versions) {
- advise (NULL, "will not overwrite %s, too many versions", buffer);
+ inform("will not overwrite %s, too many versions", buffer);
free (buffer);
buffer = NULL;
}
free (prompt);
} else {
/* Overwrite, that's what nmh used to do. And warn. */
- advise (NULL, "-clobber ask but no tty, so overwrite %s", file);
+ inform("-clobber ask but no tty, so overwrite %s", file);
break;
}
file = NULL;
++info->files_not_clobbered;
} else {
- TrimSuffixC(buf, '\n');
+ trim_suffix_c(buf, '\n');
}
free (file);
if (stat (file, &st) == OK) {
/* Keep count of files that would have been clobbered,
and return that as process exit status. */
- advise (NULL, "will not overwrite %s with -clobber never", file);
+ inform("will not overwrite %s with -clobber never", file);
free (file);
file = NULL;
++info->files_not_clobbered;