X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhshowsbr.c;h=13a65e40cdc222934fe963d669a7a46f511c49ec;hp=fe3afc4c7cf37e7c7952443a2ef93a7afd43dbd2;hb=0da86af19c369b20713d0cedf7b0b3319560f69e;hpb=2433122c20baccb10b70b49c04c6b0497b5b3b60 diff --git a/uip/mhshowsbr.c b/uip/mhshowsbr.c index fe3afc4..13a65e4 100644 --- a/uip/mhshowsbr.c +++ b/uip/mhshowsbr.c @@ -22,7 +22,6 @@ extern int debugsw; int nolist = 0; char *formsw = NULL; -pid_t xpid = 0; /* mhparse.c */ @@ -51,7 +50,7 @@ static void show_single_message(CT, char *); static void DisplayMsgHeader(CT, char *); static int show_switch(CT, int); static int show_content(CT, int); -static int show_content_aux2(CT, int, char *, char *, int, int, int, int); +static int show_content_aux2(CT, int, char *, char *, int, int, int); static int show_text(CT, int); static int show_multi(CT, int); static int show_multi_internal(CT, int); @@ -86,9 +85,16 @@ show_all_messages(CT *cts) for (ctp = cts; *ctp; ctp++) { ct = *ctp; - /* if top-level type is ok, then display message */ - if (type_ok(ct, 1)) - show_single_message(ct, formsw); + if (!type_ok(ct, 1)) { /* top-level type */ + continue; + } + if (cts[1]) { + if (ctp != cts) { + printf("\n\n"); + } + printf(">>> Message %s\n\n", ct->c_file); + } + show_single_message(ct, formsw); } } @@ -100,9 +106,6 @@ show_all_messages(CT *cts) static void show_single_message(CT ct, char *form) { - sigset_t set, oset; - int status; - /* ** Allow user executable bit so that temporary directories created by ** the viewer (e.g., lynx) are going to be accessible @@ -115,8 +118,6 @@ show_single_message(CT ct, char *form) */ if (form) DisplayMsgHeader(ct, form); - else - xpid = 0; /* Show the body of the message */ show_switch(ct, 0); @@ -128,23 +129,6 @@ show_single_message(CT ct, char *form) if (ct->c_ceclosefnx) (*ct->c_ceclosefnx) (ct); - /* block a few signals */ - sigemptyset(&set); - sigaddset(&set, SIGHUP); - sigaddset(&set, SIGINT); - sigaddset(&set, SIGQUIT); - sigaddset(&set, SIGTERM); - sigprocmask(SIG_BLOCK, &set, &oset); - - while (wait(&status) != NOTOK) { - pidcheck(status); - continue; - } - - /* reset the signal mask */ - sigprocmask(SIG_SETMASK, &oset, &set); - - xpid = 0; flush_errors(); } @@ -182,7 +166,7 @@ DisplayMsgHeader(CT ct, char *form) /* NOTREACHED */ default: - xpid = -child_id; + pidcheck(pidwait(child_id, NOTOK)); break; } } @@ -273,12 +257,11 @@ show_content(CT ct, int alternate) /* ** Parse the display string for displaying generic content */ - int show_content_aux(CT ct, int alternate, char *cp, char *cracked) { int fd, len, buflen, quoted; - int xstdin, xlist, xtty; + int xstdin, xlist; char *bp, *pp, *file, buffer[BUFSIZ]; CI ci = &ct->c_ctinfo; @@ -298,7 +281,6 @@ show_content_aux(CT ct, int alternate, char *cp, char *cracked) xlist = 0; xstdin = 0; - xtty = 0; if (cracked) { strncpy(buffer, cp, sizeof(buffer)); @@ -337,9 +319,8 @@ show_content_aux(CT ct, int alternate, char *cp, char *cracked) case 'c': /* insert charset */ - if (ct->c_charset) { - strncpy(bp, ct->c_charset, buflen); - } + strncpy(bp, ct->c_charset ? ct->c_charset : + "US-ASCII", buflen); break; case 'd': @@ -353,15 +334,9 @@ show_content_aux(CT ct, int alternate, char *cp, char *cracked) } break; - case 'e': - /* exclusive execution */ - xtty = 1; - break; - case 'F': - /* %e, %f, and stdin is terminal not content */ + /* %f, and stdin is terminal not content */ xstdin = 1; - xtty = 1; /* and fall... */ case 'f': @@ -380,7 +355,6 @@ show_content_aux(CT ct, int alternate, char *cp, char *cracked) pp = bp; break; - case 'p': case 'l': /* ** display listing prior to displaying content @@ -455,20 +429,18 @@ raw: got_command: return show_content_aux2(ct, alternate, cracked, buffer, - fd, xlist, xstdin, xtty); + fd, xlist, xstdin); } /* ** Routine to actually display the content */ - static int show_content_aux2(CT ct, int alternate, char *cracked, - char *buffer, int fd, int xlist, int xstdin, int xtty) + char *buffer, int fd, int xlist, int xstdin) { pid_t child_id; - char *vec[4], exec[BUFSIZ + sizeof "exec "]; if (debugsw || cracked) { fflush(stdout); @@ -484,13 +456,6 @@ show_content_aux2(CT ct, int alternate, char *cracked, fprintf(stderr, " using command %s\n", buffer); } - if (xpid < 0 || (xtty && xpid)) { - if (xpid < 0) - xpid = -xpid; - pidcheck(pidwait(xpid, NOTOK)); - xpid = 0; - } - if (xlist) { if (ct->c_type == CT_MULTIPART) list_content(ct, -1, 1, 0, 0); @@ -498,13 +463,6 @@ show_content_aux2(CT ct, int alternate, char *cracked, list_switch(ct, -1, 1, 0, 0); } - snprintf(exec, sizeof(exec), "exec %s", buffer); - - vec[0] = "/bin/sh"; - vec[1] = "-c"; - vec[2] = exec; - vec[3] = NULL; - fflush(stdout); switch (child_id = fork()) { @@ -519,7 +477,7 @@ show_content_aux2(CT ct, int alternate, char *cracked, if (!xstdin) dup2(fd, 0); close(fd); - execvp("/bin/sh", vec); + execlp("/bin/sh", "/bin/sh", "-c", buffer, NULL); fprintf(stderr, "unable to exec "); perror("/bin/sh"); _exit(-1); @@ -561,7 +519,8 @@ show_text(CT ct, int alternate) ** if it is not a text part of a multipart/alternative */ if (!alternate || ct->c_subtype == TEXT_PLAIN) { - if (!check_charset(ct->c_charset, strlen(ct->c_charset))) { + if (ct->c_charset && !check_charset(ct->c_charset, + strlen(ct->c_charset))) { snprintf(buffer, sizeof(buffer), "%%liconv -f '%s'", ct->c_charset); } else { @@ -699,7 +658,7 @@ static int show_multi_aux(CT ct, int alternate, char *cp) { int len, buflen, quoted; - int xlist, xtty; + int xlist; char *bp, *pp, *file, buffer[BUFSIZ]; struct multipart *m = (struct multipart *) ct->c_ctparams; struct part *part; @@ -730,7 +689,6 @@ show_multi_aux(CT ct, int alternate, char *cp) } xlist = 0; - xtty = 0; /* get buffer ready to go */ bp = buffer; @@ -763,9 +721,8 @@ show_multi_aux(CT ct, int alternate, char *cp) case 'c': /* insert charset */ - if (ct->c_charset) { - strncpy(bp, ct->c_charset, buflen); - } + strncpy(bp, ct->c_charset ? ct->c_charset : + "US-ASCII", buflen); break; case 'd': @@ -779,16 +736,7 @@ show_multi_aux(CT ct, int alternate, char *cp) } break; - case 'e': - /* exclusive execution */ - xtty = 1; - break; - case 'F': - /* %e and %f */ - xtty = 1; - /* and fall... */ - case 'f': /* insert filename(s) containing content */ { @@ -814,7 +762,6 @@ show_multi_aux(CT ct, int alternate, char *cp) } break; - case 'p': case 'l': /* ** display listing prior to displaying content @@ -888,7 +835,7 @@ raw: } return show_content_aux2(ct, alternate, NULL, buffer, - NOTOK, xlist, 0, xtty); + NOTOK, xlist, 0); } @@ -918,7 +865,7 @@ show_message_rfc822(CT ct, int alternate) /* default method for message/rfc822 */ if (ct->c_subtype == MESSAGE_RFC822) { - cp = (ct->c_showproc = getcpy("%pshow -file '%F'")); + cp = (ct->c_showproc = getcpy("%lshow -file %F")); return show_content_aux(ct, alternate, cp, NULL); }