X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/98782146f689a059d5e81636ff2ab55babc2e8ff..63621a81d16ab743de6b57d47578a9a2c670ad22:/uip/mhshowsbr.c diff --git a/uip/mhshowsbr.c b/uip/mhshowsbr.c index 2ef4734a..ebb295b7 100644 --- a/uip/mhshowsbr.c +++ b/uip/mhshowsbr.c @@ -15,13 +15,14 @@ #include #include #include +#include "mhmisc.h" +#include "mhshowsbr.h" +#include "sbr/m_mktemp.h" #ifdef HAVE_ICONV # include #endif /* ! HAVE_ICONV */ extern int debugsw; -extern int npart; -extern int ntype; int nolist = 0; @@ -31,20 +32,13 @@ char *progsw = NULL; int nomore = 0; char *formsw = NULL; -/* for output markerss and headers */ +/* for output markers and headers */ char *folder = NULL; char *markerform; char *headerform; int headersw = -1; -/* mhmisc.c */ -int part_ok (CT); -int part_exact (CT); -int type_ok (CT, int); -void content_error (char *, CT, char *, ...); -void flush_errors (void); - /* * static prototypes */ @@ -96,7 +90,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; @@ -127,7 +121,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); } } @@ -199,7 +193,7 @@ static void DisplayMsgHeader (CT ct, char *form, int concatsw) { pid_t child_id; - int i, vecp; + int vecp; char **vec; char *file; @@ -223,9 +217,7 @@ DisplayMsgHeader (CT ct, char *form, int concatsw) fflush (stdout); - for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) - sleep (5); - + child_id = fork(); switch (child_id) { case NOTOK: adios ("fork", "unable to"); @@ -342,7 +334,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,7 +362,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); } @@ -402,7 +394,7 @@ show_content_aux2 (CT ct, int alternate, char *cracked, char *buffer, int fd, int xlist, int xstdin, struct format *fmt) { pid_t child_id; - int i, vecp; + int vecp; char **vec, *file; if (debugsw || cracked) { @@ -472,8 +464,7 @@ show_content_aux2 (CT ct, int alternate, char *cracked, char *buffer, fflush (stdout); - for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) - sleep (5); + child_id = fork(); switch (child_id) { case NOTOK: advise ("fork", "unable to"); @@ -497,11 +488,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); @@ -708,7 +703,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; @@ -1214,7 +1209,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);