X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/fe86b6d55ac470e6e832c53ea2c71e680efe5274..bddd9ca00cd2e2e73aded115a59614af3a74a6cb:/uip/mhshowsbr.c diff --git a/uip/mhshowsbr.c b/uip/mhshowsbr.c index d820667d..99bb4067 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) @@ -372,7 +372,7 @@ show_content_aux (CT ct, int alternate, char *cp, char *cracked, struct format * char *charset = content_charset (ct); 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); } @@ -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); @@ -710,7 +714,7 @@ show_multi_aux (CT ct, int alternate, char *cp, struct format *fmt) if ((*p->c_ceopenfnx) (p, &file) == NOTOK) return NOTOK; - p->c_storage = add (file, NULL); + p->c_storage = mh_xstrdup(FENDNULL(file)); if (p->c_showproc && !strcmp (p->c_showproc, "true")) return OK; @@ -992,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. */ @@ -1178,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"); } } @@ -1217,7 +1220,7 @@ iconv_start: replace_param(&ct->c_ctinfo.ci_first_pm, &ct->c_ctinfo.ci_last_pm, "charset", dest_charset, 0); - outline = output_params(strlen(TYPE_FIELD) + 1 + strlen(ctline), + outline = output_params(LEN(TYPE_FIELD) + 1 + strlen(ctline), ct->c_ctinfo.ci_first_pm, NULL, 0); if (outline) { ctline = add(outline, ctline);