X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/2c52944b55b2c515e6f46a56e15a4bcece704e63..9cc2510:/uip/mhoutsbr.c?ds=sidebyside diff --git a/uip/mhoutsbr.c b/uip/mhoutsbr.c index 8f19702c..ca1acf83 100644 --- a/uip/mhoutsbr.c +++ b/uip/mhoutsbr.c @@ -317,7 +317,9 @@ write8Bit (CT ct, FILE *out) c = '\n'; while ((inbytes = fread (buffer, 1, sizeof buffer, ce->ce_fp)) > 0) { c = buffer[inbytes - 1]; - fwrite (buffer, 1, inbytes, out); + if (fwrite (buffer, 1, inbytes, out) < inbytes) { + advise ("write8Bit", "fwrite"); + } } if (c != '\n') putc ('\n', out); @@ -336,26 +338,35 @@ writeQuoted (CT ct, FILE *out) { int fd; char *cp, *file; - char c = '\0', buffer[BUFSIZ]; + char c = '\0'; CE ce = &ct->c_cefile; int n = 0; + char *bufp = NULL; + size_t buflen; + ssize_t gotlen; file = NULL; if ((fd = (*ct->c_ceopenfnx) (ct, &file)) == NOTOK) return NOTOK; - while (fgets (buffer, sizeof(buffer) - 1, ce->ce_fp)) { + while ((gotlen = getline(&bufp, &buflen, ce->ce_fp)) != -1) { - cp = buffer + strlen (buffer) - 1; + cp = bufp + gotlen - 1; if ((c = *cp) == '\n') - *cp = '\0'; - - if (strncmp (cp = buffer, "From ", sizeof("From ") - 1) == 0) { - fprintf (out, "=%02X", *cp++ & 0xff); + gotlen--; + + /* + * if the line starts with "From ", encode the 'F' so it + * doesn't falsely match an mbox delimiter. + */ + cp = bufp; + if (gotlen >= 5 && strncmp (cp, "From ", 5) == 0) { + fprintf (out, "=%02X", 'F'); + cp++; n += 3; } - for (; *cp; cp++) { + for (; cp < bufp + gotlen; cp++) { if (n > CPERLIN - 3) { fputs ("=\n", out); n = 0; @@ -384,7 +395,7 @@ three_print: } if (c == '\n') { - if (cp > buffer && (*--cp == ' ' || *cp == '\t')) + if (cp > bufp && (*--cp == ' ' || *cp == '\t')) fputs ("=\n", out); putc ('\n', out);