extern int debugsw;
int pausesw = 1;
-int serialsw = 0;
int nolist = 0;
char *progsw = NULL;
int nomore = 0;
char *formsw = NULL;
-pid_t xpid = 0;
-
static sigjmp_buf intrenv;
* prototypes
*/
void show_all_messages (CT *);
-int show_content_aux (CT, int, int, char *, char *);
+int show_content_aux (CT, int, char *, char *);
/*
* static prototypes
*/
static void show_single_message (CT, char *);
static void DisplayMsgHeader (CT, char *);
-static int show_switch (CT, int, int);
-static int show_content (CT, int, int);
-static int show_content_aux2 (CT, int, int, char *, char *, int, int, int, int,
- int);
-static int show_text (CT, int, int);
-static int show_multi (CT, int, int);
-static int show_multi_internal (CT, int, int);
-static int show_multi_aux (CT, int, int, char *);
-static int show_message_rfc822 (CT, int, int);
-static int show_partial (CT, int, int);
-static int show_external (CT, int, int);
-static int parse_display_string (CT, char *, int *, int *, int *, int *, 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_text (CT, int);
+static int show_multi (CT, int);
+static int show_multi_internal (CT, int);
+static int show_multi_aux (CT, int, char *);
+static int show_message_rfc822 (CT, int);
+static int show_partial (CT, int);
+static int show_external (CT, int);
+static int parse_display_string (CT, char *, int *, int *, int *, char *,
char *, size_t, int multipart);
static int convert_content_charset (CT, char **);
static void intrser (int);
*/
if (form)
DisplayMsgHeader(ct, form);
- else
- xpid = 0;
/* Show the body of the message */
- show_switch (ct, 1, 0);
+ show_switch (ct, 0);
if (ct->c_fp) {
fclose (ct->c_fp);
/* reset the signal mask */
sigprocmask (SIG_SETMASK, &oset, &set);
- xpid = 0;
flush_errors ();
}
/* NOTREACHED */
default:
- xpid = -child_id;
+ pidcheck(pidwait(child_id, NOTOK));
break;
}
*/
static int
-show_switch (CT ct, int serial, int alternate)
+show_switch (CT ct, int alternate)
{
switch (ct->c_type) {
case CT_MULTIPART:
- return show_multi (ct, serial, alternate);
+ return show_multi (ct, alternate);
case CT_MESSAGE:
switch (ct->c_subtype) {
case MESSAGE_PARTIAL:
- return show_partial (ct, serial, alternate);
+ return show_partial (ct, alternate);
case MESSAGE_EXTERNAL:
- return show_external (ct, serial, alternate);
+ return show_external (ct, alternate);
case MESSAGE_RFC822:
default:
- return show_message_rfc822 (ct, serial, alternate);
+ return show_message_rfc822 (ct, alternate);
}
case CT_TEXT:
- return show_text (ct, serial, alternate);
+ return show_text (ct, alternate);
case CT_AUDIO:
case CT_IMAGE:
case CT_VIDEO:
case CT_APPLICATION:
- return show_content (ct, serial, alternate);
+ return show_content (ct, alternate);
default:
adios (NULL, "unknown content type %d", ct->c_type);
*/
static int
-show_content (CT ct, int serial, int alternate)
+show_content (CT ct, int alternate)
{
char *cp, buffer[BUFSIZ];
CI ci = &ct->c_ctinfo;
snprintf (buffer, sizeof(buffer), "%s-show-%s/%s",
invo_name, ci->ci_type, ci->ci_subtype);
if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
/* Check for invo_name-show-type */
snprintf (buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
if ((cp = ct->c_showproc))
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
/* complain if we are not a part of a multipart/alternative */
if (!alternate)
*/
int
-show_content_aux (CT ct, int serial, int alternate, char *cp, char *cracked)
+show_content_aux (CT ct, int alternate, char *cp, char *cracked)
{
int fd;
- int xstdin = 0, xlist = 0, xpause = 0, xtty = 0;
+ int xstdin = 0, xlist = 0, xpause = 0;
char *file, buffer[BUFSIZ];
if (!ct->c_ceopenfnx) {
goto got_command;
}
- if (parse_display_string (ct, cp, &xstdin, &xlist, &xpause, &xtty, file,
+ if (parse_display_string (ct, cp, &xstdin, &xlist, &xpause, file,
buffer, sizeof(buffer) - 1, 0)) {
admonish (NULL, "Buffer overflow constructing show command!\n");
return NOTOK;
}
got_command:
- return show_content_aux2 (ct, serial, alternate, cracked, buffer,
- fd, xlist, xpause, xstdin, xtty);
+ return show_content_aux2 (ct, alternate, cracked, buffer,
+ fd, xlist, xpause, xstdin);
}
*/
static int
-show_content_aux2 (CT ct, int serial, int alternate, char *cracked, char *buffer,
- int fd, int xlist, int xpause, int xstdin, int xtty)
+show_content_aux2 (CT ct, int alternate, char *cracked, char *buffer,
+ int fd, int xlist, int xpause, int xstdin)
{
pid_t child_id;
int i, vecp;
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) {
char prompt[BUFSIZ];
default:
arglist_free(file, vec);
- if (!serial) {
- ct->c_pid = child_id;
- if (xtty)
- xpid = child_id;
- } else {
- pidcheck (pidXwait (child_id, NULL));
- }
+ pidcheck (pidXwait (child_id, NULL));
if (fd != NOTOK)
(*ct->c_ceclosefnx) (ct);
*/
static int
-show_text (CT ct, int serial, int alternate)
+show_text (CT ct, int alternate)
{
char *cp, buffer[BUFSIZ];
CI ci = &ct->c_ctinfo;
snprintf (buffer, sizeof(buffer), "%s-show-%s/%s",
invo_name, ci->ci_type, ci->ci_subtype);
if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
/* Check for invo_name-show-type */
snprintf (buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
/*
* Use default method if content is text/plain, or if
snprintf (buffer, sizeof(buffer), "%%p%s %%F", progsw ? progsw :
moreproc && *moreproc ? moreproc : DEFAULT_PAGER);
cp = (ct->c_showproc = add (buffer, NULL));
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
}
return NOTOK;
*/
static int
-show_multi (CT ct, int serial, int alternate)
+show_multi (CT ct, int alternate)
{
char *cp, buffer[BUFSIZ];
CI ci = &ct->c_ctinfo;
snprintf (buffer, sizeof(buffer), "%s-show-%s/%s",
invo_name, ci->ci_type, ci->ci_subtype);
if ((cp = context_find (buffer)) && *cp != '\0')
- return show_multi_aux (ct, serial, alternate, cp);
+ return show_multi_aux (ct, alternate, cp);
/* Check for invo_name-show-type */
snprintf (buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
if ((cp = context_find (buffer)) && *cp != '\0')
- return show_multi_aux (ct, serial, alternate, cp);
+ return show_multi_aux (ct, alternate, cp);
if ((cp = ct->c_showproc))
- return show_multi_aux (ct, serial, alternate, cp);
+ return show_multi_aux (ct, alternate, cp);
/*
* Use default method to display this multipart content. Even
* unknown types are displayable, since they're treated as mixed
* per RFC 2046.
*/
- return show_multi_internal (ct, serial, alternate);
+ return show_multi_internal (ct, alternate);
}
*/
static int
-show_multi_internal (CT ct, int serial, int alternate)
+show_multi_internal (CT ct, int alternate)
{
- int alternating, nowalternate, nowserial, result;
+ int alternating, nowalternate, result;
struct multipart *m = (struct multipart *) ct->c_ctparams;
struct part *part;
CT p;
- sigset_t set, oset;
alternating = 0;
nowalternate = alternate;
- if (ct->c_subtype == MULTI_PARALLEL) {
- nowserial = serialsw;
- } else if (ct->c_subtype == MULTI_ALTERNATE) {
+ if (ct->c_subtype == MULTI_ALTERNATE) {
nowalternate = 1;
alternating = 1;
- nowserial = serial;
- } else {
- /*
- * multipart/mixed
- * mutlipart/digest
- * unknown subtypes of multipart (treat as mixed per rfc2046)
- */
- nowserial = serial;
- }
-
- /* block a few signals */
- if (!nowserial) {
- sigemptyset (&set);
- sigaddset (&set, SIGHUP);
- sigaddset (&set, SIGINT);
- sigaddset (&set, SIGQUIT);
- sigaddset (&set, SIGTERM);
- sigprocmask (SIG_BLOCK, &set, &oset);
}
/*
if (part_ok (p, 1) && type_ok (p, 1)) {
int inneresult;
- inneresult = show_switch (p, nowserial, nowalternate);
+ inneresult = show_switch (p, nowalternate);
switch (inneresult) {
case NOTOK:
if (alternate && !alternating) {
goto out;
}
- if (serial && !nowserial) {
- pid_t pid;
- int kids;
- int status;
-
- kids = 0;
- for (part = m->mp_parts; part; part = part->mp_next) {
- p = part->mp_part;
-
- if (p->c_pid > OK) {
- if (kill (p->c_pid, 0) == NOTOK)
- p->c_pid = 0;
- else
- kids++;
- }
- }
-
- while (kids > 0 && (pid = wait (&status)) != NOTOK) {
- pidcheck (status);
-
- for (part = m->mp_parts; part; part = part->mp_next) {
- p = part->mp_part;
-
- if (xpid == pid)
- xpid = 0;
- if (p->c_pid == pid) {
- p->c_pid = 0;
- kids--;
- break;
- }
- }
- }
- }
-
out:
- if (!nowserial) {
- /* reset the signal mask */
- sigprocmask (SIG_SETMASK, &oset, &set);
- }
-
return result;
}
*/
static int
-show_multi_aux (CT ct, int serial, int alternate, char *cp)
+show_multi_aux (CT ct, int alternate, char *cp)
{
/* xstdin is only used in the call to parse_display_string():
its value is ignored in the function. */
- int xstdin = 0, xlist = 0, xpause = 0, xtty = 0;
+ int xstdin = 0, xlist = 0, xpause = 0;
char *file, buffer[BUFSIZ];
struct multipart *m = (struct multipart *) ct->c_ctparams;
struct part *part;
}
}
- if (parse_display_string (ct, cp, &xstdin, &xlist, &xpause, &xtty, file,
+ if (parse_display_string (ct, cp, &xstdin, &xlist, &xpause, file,
buffer, sizeof(buffer) - 1, 1)) {
admonish (NULL, "Buffer overflow constructing show command!\n");
return NOTOK;
}
- return show_content_aux2 (ct, serial, alternate, NULL, buffer,
- NOTOK, xlist, xpause, 0, xtty);
+ return show_content_aux2 (ct, alternate, NULL, buffer,
+ NOTOK, xlist, xpause, 0);
}
*/
static int
-show_message_rfc822 (CT ct, int serial, int alternate)
+show_message_rfc822 (CT ct, int alternate)
{
char *cp, buffer[BUFSIZ];
CI ci = &ct->c_ctinfo;
snprintf (buffer, sizeof(buffer), "%s-show-%s/%s",
invo_name, ci->ci_type, ci->ci_subtype);
if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
/* Check for invo_name-show-type */
snprintf (buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
if ((cp = ct->c_showproc))
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
/* default method for message/rfc822 */
if (ct->c_subtype == MESSAGE_RFC822) {
cp = (ct->c_showproc = add ("%pecho -file %F", NULL));
- return show_content_aux (ct, serial, alternate, cp, NULL);
+ return show_content_aux (ct, alternate, cp, NULL);
}
/* complain if we are not a part of a multipart/alternative */
*/
static int
-show_partial (CT ct, int serial, int alternate)
+show_partial (CT ct, int alternate)
{
- NMH_UNUSED (serial);
NMH_UNUSED (alternate);
content_error (NULL, ct,
*/
static int
-show_external (CT ct, int serial, int alternate)
+show_external (CT ct, int alternate)
{
struct exbody *e = (struct exbody *) ct->c_ctparams;
CT p = e->eb_content;
if (!type_ok (p, 0))
return OK;
- return show_switch (p, serial, alternate);
+ return show_switch (p, alternate);
}
static int
parse_display_string (CT ct, char *cp, int *xstdin, int *xlist, int *xpause,
- int *xtty, char *file, char *buffer, size_t buflen,
+ char *file, char *buffer, size_t buflen,
int multipart) {
int len, quoted = 0;
char *bp = buffer, *pp;
break;
case 'e':
- /* exclusive execution */
- *xtty = 1;
+ /* no longer implemented */
break;
case 'F':
/* %e, %f, and stdin is terminal not content */
*xstdin = 1;
- *xtty = 1;
/* and fall... */
case 'f':