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);
snprintf (prompt, sizeof(prompt), myprompt, invo_name);
for (;;) {
#ifdef READLINE_SUPPORT
- if (!(argp = getans_via_readline (prompt, aleqs))) {
+ if (!(argp = read_switch_multiword_via_readline (prompt, aleqs))) {
#else /* ! READLINE_SUPPORT */
- if (!(argp = getans (prompt, aleqs))) {
+ if (!(argp = read_switch_multiword (prompt, aleqs))) {
#endif /* READLINE_SUPPORT */
(void) m_unlink (LINK);
done (1);
writesomecmd(buf, BUFSIZ, "cd", "pwd", argp);
}
if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) {
- fgets(cwd, sizeof (cwd), f);
+ if (fgets(cwd, sizeof (cwd), f) == NULL) {
+ advise (buf, "fgets");
+ }
if (strchr(cwd, '\n') != (char *)0)
*strchr(cwd, '\n') = '\0';
* -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;
annotate(drft, ATTACH_FIELD, file, 1, 0, -2, 1);
if (verbose) {
ctype = mime_type(file);
- }
-
- if (verbose) {
printf ("Attaching %s as a %s\n", file, ctype);
free (ctype);
}
* 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)
if (atfile) {
(void) m_unlink (linkpath);
if (link (altpath, linkpath) == NOTOK) {
- symlink (altpath, linkpath);
+ if (symlink (altpath, linkpath) < 0) {
+ adios (linkpath, "symlink");
+ }
slinked = 1;
} else {
slinked = 0;
break;
case OK:
- if (cwd)
- chdir (cwd);
+ if (cwd) {
+ if (chdir (cwd) < 0) {
+ advise (cwd, "chdir");
+ }
+ }
if (altmsg) {
if (mp)
m_putenv ("mhfolder", mp->foldpath);
X("tls", TLSminc(-3), TLSSW) \
X("initialtls", TLSminc(-10), INITTLSSW) \
X("notls", TLSminc(-5), NTLSSW) \
+ X("sendmail program", 0, MTSSM) \
X("mts smtp|sendmail/smtp|sendmail/pipe", 2, MTSSW) \
X("messageid localname|random", 2, MESSAGEIDSW) \
case SASLMECHSW:
case USERSW:
case PORTSW:
+ case MTSSM:
case MTSSW:
case MESSAGEIDSW:
vec[vecp++] = --cp;
case OK:
vec = argsplit(whomproc, &program, &vecp);
- vec[vecp++] = file;
if (arg)
while (*arg)
vec[vecp++] = *arg++;
+ vec[vecp++] = file;
vec[vecp] = NULL;
execvp (program, vec);
return OK;
}
+
+
+/*
+ * Return 1 if we already have a MIME-Version 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;
+}