]> diplodocus.org Git - nmh/blobdiff - uip/mhshowsbr.c
Added const to char * arguments of uprf().
[nmh] / uip / mhshowsbr.c
index 720ba9bc0fbfaf801722c5aac51925969959ddbe..a9aa9c0b7c6a91bdc6ee53bb0ad82e3c38862726 100644 (file)
@@ -11,7 +11,6 @@
 #include <fcntl.h>
 #include <h/signals.h>
 #include <h/md5.h>
-#include <setjmp.h>
 #include <h/mts.h>
 #include <h/tws.h>
 #include <h/mime.h>
@@ -354,10 +353,12 @@ show_content_aux (CT ct, int alternate, char *cp, char *cracked, struct format *
             if ((fd = (*ct->c_ceopenfnx) (ct, &file)) == NOTOK)
                 return NOTOK;
         } else {
+            char *charset = content_charset (ct);
             admonish (NULL, "unable to convert character set%s%s to %s",
                       ct->c_partno  ?  " of part "  :  "",
                       ct->c_partno  ?  ct->c_partno  :  "",
-                      content_charset (ct));
+                      charset);
+            free (charset);
         }
     }
 
@@ -424,7 +425,9 @@ show_content_aux2 (CT ct, int alternate, char *cracked, char *buffer,
        }
 
        while ((cc = read(fd, readbuf, sizeof(readbuf))) > 0) {
-           fwrite(readbuf, sizeof(char), cc, stdout);
+           if ((ssize_t) fwrite(readbuf, sizeof(char), cc, stdout) < cc) {
+               advise ("putline", "fwrite");
+           }
            lastchar = readbuf[cc - 1];
        }
 
@@ -565,7 +568,7 @@ show_multi_internal (CT ct, int alternate, int concatsw, int textonly,
     int        alternating, nowalternate, result;
     struct multipart *m = (struct multipart *) ct->c_ctparams;
     struct part *part;
-    int any_part_ok;
+    int request_matched;
     CT p;
 
     alternating = 0;
@@ -576,13 +579,13 @@ show_multi_internal (CT ct, int alternate, int concatsw, int textonly,
        alternating  = 1;
     }
 
-/*
- * alternate   -> we are a part inside an multipart/alternative
- * alternating -> we are a multipart/alternative
- */
+    /*
    * alternate   -> we are a part inside an multipart/alternative
    * alternating -> we are a multipart/alternative
    */
 
     result = alternate ? NOTOK : OK;
-    any_part_ok = 0;
+    request_matched = 0;
 
     for (part = m->mp_parts; part; part = part->mp_next) {
        p = part->mp_part;
@@ -590,7 +593,7 @@ show_multi_internal (CT ct, int alternate, int concatsw, int textonly,
        if (part_ok (p, 1) && type_ok (p, 1)) {
            int inneresult;
 
-           any_part_ok = 1;
+           request_matched = 1;
 
            inneresult = show_switch (p, nowalternate, concatsw, textonly,
                                      inlineonly, fmt);
@@ -619,7 +622,7 @@ show_multi_internal (CT ct, int alternate, int concatsw, int textonly,
        }
     }
 
-    if (alternating && !part && any_part_ok) {
+    if (alternating && !part && request_matched) {
        if (!alternate)
            content_error (NULL, ct, "don't know how to display any of the contents");
        result = NOTOK;
@@ -627,7 +630,9 @@ show_multi_internal (CT ct, int alternate, int concatsw, int textonly,
     }
 
 out:
-    return result;
+    /* if no parts matched what was requested, there can't have been
+     * any display errors, so we report OK. */
+    return request_matched ? result : OK;
 }
 
 
@@ -1035,6 +1040,7 @@ convert_charset (CT ct, char *dest_charset, int *message_mods) {
         if ((conv_desc = iconv_open (dest_charset, src_charset)) ==
             (iconv_t) -1) {
             advise (NULL, "Can't convert %s to %s", src_charset, dest_charset);
+            free (src_charset);
             return NOTOK;
         }
 
@@ -1175,6 +1181,7 @@ iconv_start:
 #endif /* ! HAVE_ICONV */
     }
 
+    free (src_charset);
     return status;
 }
 
@@ -1199,9 +1206,8 @@ convert_content_charset (CT ct, char **file) {
         } else {
             status = NOTOK;
         }
-
-        free (charset);
     }
+    free (charset);
 #else  /* ! HAVE_ICONV */
     NMH_UNUSED (ct);
     NMH_UNUSED (file);