static int buildfile (char **, char *);
static int whomfile (char **, char *);
static int removefile (char *);
+static int checkmimeheader (char *);
static void writelscmd(char *, int, char *, char **);
static void writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp);
static FILE* popen_in_dir(const char *dir, const char *cmd, const char *type);
* -n numbers listing
*/
+ if (checkmimeheader(drft))
+ break;
+
l = (char *)0;
n = 0;
int verbose = 0;
char **ap;
+ if (checkmimeheader(drft))
+ break;
+
for (ap = argp+1; *ap; ++ap) {
if (strcmp(*ap, "-v") == 0) {
++argp;
* so this catches a -n anywhere in the argument list.
*/
+ if (checkmimeheader(drft))
+ break;
+
for (n = 0, arguments = argp + 1; *arguments != (char *)0; arguments++) {
if (strcmp(*arguments, "-n") == 0) {
n = 1;
int slinked = 0;
/* Was there a previous edit session? */
- if (reedit) {
+ if (reedit && (*ed || edsave)) {
if (!*ed) { /* no explicit editor */
*ed = edsave; /* so use the previous one */
if ((cp = r1bindex (*ed, '/')) == NULL)
return OK;
}
+
+
+/*
+ * Return 1 if we already have a MIME-Verson header, 0 otherwise.
+ */
+
+static int
+checkmimeheader (char *drft)
+{
+ FILE *f;
+ m_getfld_state_t gstate = 0;
+ char buf[BUFSIZ], name[NAMESZ];
+ int state, retval = 0;
+
+ if ((f = fopen(drft, "r")) == NULL) {
+ admonish(drft, "unable to read draft");
+ return (0);
+ }
+
+ for (;;) {
+ int bufsz = sizeof(buf);
+ switch (state = m_getfld(&gstate, name, buf, &bufsz, f)) {
+ case FLD:
+ case FLDPLUS:
+ if (strcasecmp(name, VRSN_FIELD) == 0) {
+ advise(NULL, "Cannot use attach commands with already-"
+ "formatted MIME message \"%s\"", drft);
+ retval = 1;
+ break;
+ }
+ continue;
+ default:
+ break;
+ }
+ break;
+ }
+
+ m_getfld_state_destroy(&gstate);
+ fclose(f);
+
+ return retval;
+}