* static prototypes
*/
static int init_decoded_content (CT);
-static void setup_attach_content(CT, const char *);
+static void setup_attach_content(CT, char *);
static char *fgetstr (char *, int, FILE *);
static int user_content (FILE *, char *, char *, CT *);
static void set_id (CT, int);
*/
CT
-build_mime (char *infile, int directives, int header_encoding)
+build_mime (char *infile, int autobuild, int directives, int header_encoding)
{
int compnum, state;
char buf[BUFSIZ], name[NAMESZ];
case FLDPLUS:
compnum++;
- /* abort if draft has Mime-Version header field */
- if (!strcasecmp (name, VRSN_FIELD))
- adios (NULL, "draft shouldn't contain %s: field", VRSN_FIELD);
-
- /* abort if draft has Content-Transfer-Encoding header field */
- if (!strcasecmp (name, ENCODING_FIELD))
- adios (NULL, "draft shouldn't contain %s: field", ENCODING_FIELD);
+ /* abort if draft has Mime-Version or C-T-E header field */
+ if (strcasecmp (name, VRSN_FIELD) == 0 ||
+ strcasecmp (name, ENCODING_FIELD) == 0) {
+ if (autobuild) {
+ fclose(in);
+ return NULL;
+ } else {
+ adios (NULL, "draft shouldn't contain %s: field", name);
+ }
+ }
/* ignore any Content-Type fields in the header */
if (!strcasecmp (name, TYPE_FIELD)) {
/* if this wasn't the last header field, then continue */
continue;
- case FILEEOF:
- adios (NULL, "draft has empty body -- no directives!");
- /* NOTREACHED */
-
case BODY:
fseek (in, (long) (-strlen (buf)), SEEK_CUR);
+ /* fall through */
+ case FILEEOF:
break;
case LENERR:
*/
static void
-setup_attach_content(CT ct, const char *filename)
+setup_attach_content(CT ct, char *filename)
{
- char *type, **ap, **ep;
+ char *type, **ap, **ep, *simplename = r1bindex(filename, '/');
struct str2init *s2i;
if (! (type = mime_type(filename))) {
if (strcasecmp(*ap, "name") == 0) {
if (*ep)
free(*ep);
- *ep = getcpy(filename);
+ *ep = getcpy(simplename);
break;
}
}
if (*ap == NULL) {
*ap = getcpy("name");
- *ep = getcpy(filename);
+ *ep = getcpy(simplename);
}
- ct->c_descr = getcpy(filename);
+ ct->c_descr = getcpy(simplename);
+ ct->c_descr = add("\n", ct->c_descr);
ct->c_cefile.ce_file = getcpy(filename);
/*
ct->c_dispo = getcpy("attachment; filename=\"");
}
- ct->c_dispo = add(filename, ct->c_dispo);
- ct->c_dispo = add("\"", ct->c_dispo);
+ ct->c_dispo = add(simplename, ct->c_dispo);
+ ct->c_dispo = add("\"\n", ct->c_dispo);
}