#include <fcntl.h>
#include <h/signals.h>
#include <h/md5.h>
-#include <errno.h>
-#include <signal.h>
#include <h/mts.h>
#include <h/tws.h>
#include <h/mime.h>
FILE *fp;
int status;
- if ((fp = fopen (file, "w")) == NULL) {
+ if (! strcmp (file, "-")) {
+ fp = stdout;
+ } else if ((fp = fopen (file, "w")) == NULL) {
advise (file, "unable to open for writing");
return NOTOK;
}
status = output_message_fp(ct, fp, file);
- fclose(fp);
+ if (strcmp (file, "-")) fclose(fp);
return status;
}
{
int result = 0;
CI ci = &ct->c_ctinfo;
+ char *boundary = ci->ci_values[0], **ap, **vp;
+
+ for (ap = ci->ci_attrs, vp = ci->ci_values; *ap; ++ap, ++vp) {
+ if (! strcasecmp ("boundary", *ap)) {
+ boundary = *vp;
+ break;
+ }
+ }
/*
* Output all header fields for this content
putc ('\n', out);
m = (struct multipart *) ct->c_ctparams;
+
+ if (m->mp_content_before) {
+ fprintf (out, "%s", m->mp_content_before);
+ }
+
for (part = m->mp_parts; part; part = part->mp_next) {
CT p = part->mp_part;
- fprintf (out, "\n--%s\n", ci->ci_values[0]);
+ fprintf (out, "\n--%s\n", boundary);
if (output_content (p, out) == NOTOK)
return NOTOK;
}
- fprintf (out, "\n--%s--\n", ci->ci_values[0]);
+ fprintf (out, "\n--%s--\n", boundary);
+
+ if (m->mp_content_after) {
+ fprintf (out, "%s", m->mp_content_after);
+ }
}
break;
default:
switch (ct->c_encoding) {
case CE_7BIT:
- putc ('\n', out);
+ /* Special case: if this is a non-MIME message with no
+ body, don't emit the newline that would appear between
+ the headers and body. In that case, the call to
+ write8Bit() shouldn't be needed, but is harmless. */
+ if (ct->c_ctinfo.ci_attrs[0] != NULL ||
+ ct->c_begin != ct->c_end) {
+ putc ('\n', out);
+ }
result = write8Bit (ct, out);
break;
case 'N':
for (ap = ci2->ci_attrs, ep = ci2->ci_values; *ap; ap++, ep++)
- if (!mh_strcasecmp (*ap, "name")) {
+ if (!strcasecmp (*ap, "name")) {
fprintf (out, "%s", *ep);
break;
}
write8Bit (CT ct, FILE *out)
{
int fd;
+ size_t inbytes;
char c, *file, buffer[BUFSIZ];
- CE ce = ct->c_cefile;
+ CE ce = &ct->c_cefile;
file = NULL;
if ((fd = (*ct->c_ceopenfnx) (ct, &file)) == NOTOK)
return NOTOK;
c = '\n';
- while (fgets (buffer, sizeof(buffer) - 1, ce->ce_fp)) {
- c = buffer[strlen (buffer) - 1];
- fputs (buffer, out);
+ while ((inbytes = fread (buffer, 1, sizeof buffer, ce->ce_fp)) > 0) {
+ c = buffer[inbytes - 1];
+ fwrite (buffer, 1, inbytes, out);
}
if (c != '\n')
putc ('\n', out);
int fd;
char *cp, *file;
char c, buffer[BUFSIZ];
- CE ce = ct->c_cefile;
+ CE ce = &ct->c_cefile;
file = NULL;
if ((fd = (*ct->c_ceopenfnx) (ct, &file)) == NOTOK)
{
int fd, result;
char *file;
- CE ce = ct->c_cefile;
+ CE ce = &ct->c_cefile;
file = NULL;
if ((fd = (*ct->c_ceopenfnx) (ct, &file)) == NOTOK)