|
|
|
@ -115,7 +115,7 @@ basenam(const char *s)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
gen_attachment(const char *filename)
|
|
|
|
|
gen_attachment(const char *filename, char *content_disposition)
|
|
|
|
|
{
|
|
|
|
|
const char *s = filename;
|
|
|
|
|
int quote = 0;
|
|
|
|
@ -128,12 +128,12 @@ gen_attachment(const char *filename)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// filename SHOULD be an atom if possible
|
|
|
|
|
printf("Content-Disposition: attachment; filename=%s%s%s\n",
|
|
|
|
|
printf("Content-Disposition: %s; filename=%s%s%s\n", content_disposition,
|
|
|
|
|
quote ? "\"" : "", filename, quote ? "\"" : "");
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
rfc2231:
|
|
|
|
|
printf("Content-Disposition: attachment");
|
|
|
|
|
printf("Content-Disposition: %s", content_disposition);
|
|
|
|
|
int i = 0;
|
|
|
|
|
int d = 0;
|
|
|
|
|
|
|
|
|
@ -162,6 +162,20 @@ gen_file(char *file, char *ct)
|
|
|
|
|
uint8_t *content;
|
|
|
|
|
off_t size;
|
|
|
|
|
|
|
|
|
|
char *cd = "attachment";
|
|
|
|
|
char *s = strchr(ct, '#');
|
|
|
|
|
if (s) {
|
|
|
|
|
*s = 0;
|
|
|
|
|
cd = s + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char *filename = basenam(file);
|
|
|
|
|
s = strchr(file, '>');
|
|
|
|
|
if (s) {
|
|
|
|
|
*s = 0;
|
|
|
|
|
filename = s + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int r = slurp(file, (char **)&content, &size);
|
|
|
|
|
if (r != 0) {
|
|
|
|
|
fprintf(stderr, "mmime: error attaching file '%s': %s\n",
|
|
|
|
@ -191,7 +205,7 @@ gen_file(char *file, char *ct)
|
|
|
|
|
bithigh++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gen_attachment(basenam(file));
|
|
|
|
|
gen_attachment(filename, cd);
|
|
|
|
|
|
|
|
|
|
if (bitlow == 0 && bithigh == 0 &&
|
|
|
|
|
maxlinelen <= 78 && content[size-1] == '\n') {
|
|
|
|
|