]> diplodocus.org Git - nmh/blobdiff - uip/mhoutsbr.c
no-op to force check the buildbots.
[nmh] / uip / mhoutsbr.c
index 9f024e08592c87708dc8af0bdf9a20050096c9f2..ca1acf8374763531fe82e99a07f94647495d9b97 100644 (file)
@@ -231,7 +231,7 @@ output_headers (CT ct, FILE *out)
 static int
 writeExternalBody (CT ct, FILE *out)
 {
-    char *cp;
+    char *cp, *dp;
     struct exbody *e = (struct exbody *) ct->c_ctparams;
                
     putc ('\n', out);
@@ -243,7 +243,7 @@ writeExternalBody (CT ct, FILE *out)
            switch (*++cp) {
            case 'I':
                if (ct2->c_id) {
-                   char *dp = trimcpy (ct2->c_id);
+                   dp = trimcpy (ct2->c_id);
 
                    fputs (dp, out);
                    free (dp);
@@ -251,21 +251,21 @@ writeExternalBody (CT ct, FILE *out)
                continue;
 
            case 'N':
-               cp = get_param(ci2->ci_first_pm, "name", '_', 0);
-               if (cp) {
-                   fputs (cp, out);
-                   free (cp);
+               dp = get_param(ci2->ci_first_pm, "name", '_', 0);
+               if (dp) {
+                   fputs (dp, out);
+                   free (dp);
                }
                continue;
 
            case 'T':
                fprintf (out, "%s/%s", ci2->ci_type, ci2->ci_subtype);
-               cp = output_params(strlen(ci2->ci_type) +
+               dp = output_params(strlen(ci2->ci_type) +
                                   strlen(ci2->ci_subtype) + 1,
                                   ci2->ci_first_pm, NULL, 0);
-               if (cp) {
-                   fputs (cp, out);
-                   free (cp);
+               if (dp) {
+                   fputs (dp, out);
+                   free (dp);
                }
                continue;
 
@@ -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);