Added default_content_type argument to
[mmh] / uip / sendsbr.c
index d866ebc..08dc766 100644 (file)
@@ -35,8 +35,8 @@ char *distfile = NULL;
 
 static jmp_buf env;
 
-static char    body_file_name[MAXPATHLEN + 1];         /* name of temporary file for body content */
-static char    composition_file_name[MAXPATHLEN + 1];  /* name of mhbuild composition temporary file */
+static char    body_file_name[PATH_MAX + 1];           /* name of temporary file for body content */
+static char    composition_file_name[PATH_MAX + 1];    /* name of mhbuild composition temporary file */
 static int     field_size;                             /* size of header field buffer */
 static char    *field;                                 /* header field buffer */
 static FILE    *draft_file;                            /* draft file pointer */
@@ -63,7 +63,7 @@ static int sendaux (char **, int, char *, struct stat *);
 static int     attach(char *, char *, int);
 static void    clean_up_temporary_files(void);
 static int     get_line(void);
-static void    make_mime_composition_file_entry(char *, int);
+static void    make_mime_composition_file_entry(char *, int, char *);
 
 
 /*
@@ -186,7 +186,7 @@ static      int
 attach(char *attachment_header_field_name, char *draft_file_name,
        int attachformat)
 {
-    char               buf[MAXPATHLEN + 6];    /* miscellaneous buffer */
+    char               buf[PATH_MAX + 6];      /* miscellaneous buffer */
     int                        c;                      /* current character for body copy */
     int                        has_attachment;         /* draft has at least one attachment */
     int                        has_body;               /* draft has a message body */
@@ -292,10 +292,13 @@ attach(char *attachment_header_field_name, char *draft_file_name,
 
     /*
      * Add a mhbuild MIME composition file line for the body if there was one.
+     *  Set the default content type to text/plain so that mhbuild takes care
+     *  of any necessary encoding.
      */
 
     if (has_body)
-       make_mime_composition_file_entry(body_file_name, attachformat);
+       make_mime_composition_file_entry(body_file_name, attachformat,
+                                        "text/plain");
 
     /*
      * Now, go back to the beginning of the draft file and look for header fields
@@ -314,7 +317,10 @@ attach(char *attachment_header_field_name, char *draft_file_name,
            for (p = field + length + 1; *p == ' ' || *p == '\t'; p++)
                ;
 
-           make_mime_composition_file_entry(p, attachformat);
+           /* Don't set the default content type so take
+              make_mime_composition_file_entry() will try to infer it
+              from the file type. */
+           make_mime_composition_file_entry(p, attachformat, 0);
        }
     }
 
@@ -382,18 +388,19 @@ get_line(void)
 }
 
 static void
-make_mime_composition_file_entry(char *file_name, int attachformat)
+make_mime_composition_file_entry(char *file_name, int attachformat,
+                                 char *default_content_type)
 {
     int                        binary;                 /* binary character found flag */
     int                        c;                      /* current character */
-    char               cmd[MAXPATHLEN + 6];    /* file command buffer */
+    char               cmd[PATH_MAX + 6];      /* file command buffer */
     char               *content_type;          /* mime content type */
     FILE               *fp;                    /* content and pipe file pointer */
     struct     node    *np;                    /* context scan node pointer */
     char               *p;                     /* miscellaneous string pointer */
     struct     stat    st;                     /* file status buffer */
 
-    content_type = (char *)0;
+    content_type = default_content_type;
 
     /*
      * Check the file name for a suffix.  Scan the context for that suffix on a
@@ -456,7 +463,7 @@ make_mime_composition_file_entry(char *file_name, int attachformat)
         (void)fprintf(composition_file, "#%s; name=\"%s\"; x-unix-mode=0%.3ho",
             content_type, ((p = strrchr(file_name, '/')) == (char *)0) ? file_name : p + 1, (unsigned short)(st.st_mode & 0777));
 
-        if (strlen(file_name) > MAXPATHLEN) {
+        if (strlen(file_name) > PATH_MAX) {
             clean_up_temporary_files();
             adios((char *)0, "attachment file name `%s' too long.", file_name);
         }
@@ -502,10 +509,12 @@ make_mime_composition_file_entry(char *file_name, int attachformat)
         } else {
             /* Suppress Content-Id, insert simple Content-Disposition
                and Content-Description with filename. */
+            p = strrchr(file_name, '/');
             (void) fprintf (composition_file,
-                            "#%1$s; name=\"%2$s\" <> [%2$s]{attachment}",
+                            "#%s; name=\"%s\" <> [%s]{attachment}",
                             content_type,
-                            ((p = strrchr(file_name, '/')) == (char *)0) ? file_name : p + 1);
+                            (p == (char *)0) ? file_name : p + 1,
+                            (p == (char *)0) ? file_name : p + 1);
         }
 
         break;
@@ -519,10 +528,12 @@ make_mime_composition_file_entry(char *file_name, int attachformat)
         } else {
             /* Suppress Content-Id, insert Content-Disposition with
                modification date and Content-Description wtih filename. */
+            p = strrchr(file_name, '/');
             (void) fprintf (composition_file,
-                            "#%1$s; name=\"%2$s\" <>[%2$s]{attachment; modification-date=\"%3$s\"}",
+                            "#%s; name=\"%s\" <>[%s]{attachment; modification-date=\"%s\"}",
                             content_type,
-                            ((p = strrchr(file_name, '/')) == (char *)0) ? file_name : p + 1,
+                            (p == (char *)0) ? file_name : p + 1,
+                            (p == (char *)0) ? file_name : p + 1,
                             dtime (&st.st_mtime, 0));
         }
 
@@ -674,8 +685,7 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay)
        vec[vecp++] = "-queued";
 
     time (&clock);
-    snprintf (msgid, sizeof(msgid), "<%d.%ld@%s>",
-               (int) getpid(), (long) clock, LocalName(1));
+    snprintf (msgid, sizeof(msgid), "%s", message_id (clock, 0));
 
     fseek (in, start, SEEK_SET);
     for (partno = 1; partno <= nparts; partno++) {