X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/8a14191c0a0ad15bb8f35b49748c75c1e0a8c2f4..d3e11c5e9:/uip/mhshowsbr.c?ds=sidebyside diff --git a/uip/mhshowsbr.c b/uip/mhshowsbr.c index 3db2348f..6f8a978f 100644 --- a/uip/mhshowsbr.c +++ b/uip/mhshowsbr.c @@ -1,6 +1,4 @@ - -/* - * mhshowsbr.c -- routines to display the contents of MIME messages +/* mhshowsbr.c -- routines to display the contents of MIME messages * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -17,6 +15,8 @@ #include #include #include +#include "mhshowsbr.h" +#include "../sbr/m_mktemp.h" #ifdef HAVE_ICONV # include #endif /* ! HAVE_ICONV */ @@ -98,7 +98,7 @@ static struct param_comp_list *dispo_pc_list = NULL; */ void -show_all_messages (CT *cts, int concatsw, int textonly, int inlineonly) +show_all_messages(CT *cts, int concat, int textonly, int inlineonly) { CT ct, *ctp; struct format *hfmt, *mfmt; @@ -129,7 +129,7 @@ show_all_messages (CT *cts, int concatsw, int textonly, int inlineonly) if (type_ok (ct, 1)) { if (headersw) output_header(ct, hfmt); - show_single_message (ct, formsw, concatsw, textonly, inlineonly, + show_single_message (ct, formsw, concat, textonly, inlineonly, mfmt); } } @@ -344,7 +344,7 @@ show_content_aux (CT ct, int alternate, char *cp, char *cracked, struct format * { int fd; int xstdin = 0, xlist = 0; - char *file = NULL, buffer[BUFSIZ]; + char *file = NULL, buffer[NMH_BUFSIZ]; if (!ct->c_ceopenfnx) { if (!alternate) @@ -370,9 +370,9 @@ show_content_aux (CT ct, int alternate, char *cp, char *cracked, struct format * return NOTOK; } else { char *charset = content_charset (ct); - admonish (NULL, "unable to convert character set%s%s from %s", + inform("unable to convert character set%s%s from %s, continuing...", ct->c_partno ? " of part " : "", - ct->c_partno ? ct->c_partno : "", + FENDNULL(ct->c_partno), charset); free (charset); } @@ -385,7 +385,7 @@ show_content_aux (CT ct, int alternate, char *cp, char *cracked, struct format * if (parse_display_string (ct, cp, &xstdin, &xlist, file, buffer, sizeof(buffer) - 1, 0)) { - admonish (NULL, "Buffer overflow constructing show command!\n"); + inform("Buffer overflow constructing show command, continuing..."); return NOTOK; } @@ -499,11 +499,15 @@ show_content_aux2 (CT ct, int alternate, char *cracked, char *buffer, default: { int status; + char *display_prog = vecp > 2 && vec[2][0] != '\0' + /* Copy the real display program name. This relies on the + specific construction of vec[] by argsplit(). */ + ? vec[2] + : NULL; - arglist_free(file, vec); - - pidcheck ((status = pidXwait (child_id, NULL))); + pidcheck ((status = pidXwait (child_id, display_prog))); + arglist_free(file, vec); if (fd != NOTOK) (*ct->c_ceclosefnx) (ct); return (alternate ? OK : status); @@ -720,7 +724,7 @@ show_multi_aux (CT ct, int alternate, char *cp, struct format *fmt) if (parse_display_string (ct, cp, &xstdin, &xlist, file, buffer, sizeof(buffer) - 1, 1)) { - admonish (NULL, "Buffer overflow constructing show command!\n"); + inform("Buffer overflow constructing show command, continuing..."); return NOTOK; } @@ -943,8 +947,7 @@ parse_display_string (CT ct, char *cp, int *xstdin, int *xlist, /* This will get confused if there are multiple %{}'s, but its real purpose is to avoid doing bad things above if a closing brace wasn't found. */ - admonish(NULL, - "no closing brace for display string escape %s", + inform("no closing brace for display string escape %s, continuing...", cp); } break; @@ -993,8 +996,8 @@ parse_display_string (CT ct, char *cp, int *xstdin, int *xlist, quote. */ memmove (pp, pp-1, len+1); *(pp++-1) = '\\'; - buflen -= 1; - bp += 1; + buflen--; + bp++; } } /* If pp is still set, that means we ran out of space. */ @@ -1179,11 +1182,10 @@ iconv_start: inform("convert_charset: errno = %d", errno); status = NOTOK; break; - } else { - if (write (fd, dest_buffer, outbytes_before - outbytes) - < 0) { - advise (dest, "write"); - } + } + + if (write (fd, dest_buffer, outbytes_before - outbytes) < 0) { + advise (dest, "write"); } }