]> diplodocus.org Git - nmh/blobdiff - uip/whatnowsbr.c
Checked return value of write() calls in mhfixmsg.c,
[nmh] / uip / whatnowsbr.c
index 774d130c7c7eeead1a4c1fce1eba30f114f494c3..6e08d3eba0935871544ec2003c2c797d6825ade7 100644 (file)
@@ -106,6 +106,7 @@ static void sendit (char *, char **, char *, int);
 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);
@@ -356,6 +357,9 @@ WhatNow (int argc, char **argv)
             *   -n     numbers listing
             */
 
+           if (checkmimeheader(drft))
+               break;
+
            l = (char *)0;
            n = 0;
 
@@ -393,6 +397,9 @@ WhatNow (int argc, char **argv)
             int verbose = 0;
             char **ap;
 
+           if (checkmimeheader(drft))
+               break;
+
            for (ap = argp+1; *ap; ++ap) {
                if (strcmp(*ap, "-v") == 0) {
                    ++argp;
@@ -463,6 +470,9 @@ WhatNow (int argc, char **argv)
             *  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;
@@ -1268,3 +1278,45 @@ removefile (char *drft)
 
     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;
+}