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);
char *l; /* set on -l to alist command */
int n; /* set on -n to alist command */
+ /* Need this if called from what_now(). */
+ invo_name = r1bindex (argv[0], '/');
+
arguments = getarguments (invo_name, argc, argv, 1);
argp = arguments;
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;
* 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);
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;
+}