We are making POSIX signal support a requirement.
[mmh] / uip / mhshowsbr.c
index b7452d8..ea9f72e 100644 (file)
 #include <errno.h>
 #include <setjmp.h>
 #include <signal.h>
-#include <h/mts.h>
 #include <h/tws.h>
 #include <h/mime.h>
 #include <h/mhparse.h>
 #include <h/utils.h>
-
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
-/*
-** Just use sigjmp/longjmp on older machines that
-** don't have sigsetjmp/siglongjmp.
-*/
-#ifndef HAVE_SIGSETJMP
-# define sigjmp_buf jmp_buf
-# define sigsetjmp(env,mask) setjmp(env)
-# define siglongjmp(env,val) longjmp(env,val)
-#endif
+#include <sys/wait.h>
 
 extern int debugsw;
 
 int serialsw = 0;
 int nolist   = 0;
-
-char *progsw = NULL;
-
-/* flags for moreproc/header display */
-int nomore   = 0;
 char *formsw = NULL;
-
 pid_t xpid = 0;
 
 
-/* termsbr.c */
-int SOprintf(char *, ...);
-
 /* mhparse.c */
 int pidcheck(int);
 
@@ -126,12 +103,7 @@ static void
 show_single_message(CT ct, char *form)
 {
        sigset_t set, oset;
-
-#ifdef HAVE_UNION_WAIT
-       union wait status;
-#else
        int status;
-#endif
 
        /*
        ** Allow user executable bit so that temporary directories created by
@@ -164,19 +136,15 @@ show_single_message(CT ct, char *form)
        sigaddset(&set, SIGINT);
        sigaddset(&set, SIGQUIT);
        sigaddset(&set, SIGTERM);
-       SIGPROCMASK(SIG_BLOCK, &set, &oset);
+       sigprocmask(SIG_BLOCK, &set, &oset);
 
        while (wait(&status) != NOTOK) {
-#ifdef HAVE_UNION_WAIT
-               pidcheck(status.w_status);
-#else
                pidcheck(status);
-#endif
                continue;
        }
 
        /* reset the signal mask */
-       SIGPROCMASK(SIG_SETMASK, &oset, &set);
+       sigprocmask(SIG_SETMASK, &oset, &set);
 
        xpid = 0;
        flush_errors();
@@ -184,49 +152,34 @@ show_single_message(CT ct, char *form)
 
 
 /*
-** Use the mhlproc to show the header fields
+** Use mhl to show the header fields
 */
-
 static void
 DisplayMsgHeader(CT ct, char *form)
 {
        pid_t child_id;
-       int i, vecp;
+       int vecp;
        char *vec[8];
 
        vecp = 0;
-       vec[vecp++] = mhbasename(mhlproc);
+       vec[vecp++] = "mhl";
        vec[vecp++] = "-form";
        vec[vecp++] = form;
        vec[vecp++] = "-nobody";
        vec[vecp++] = ct->c_file;
-
-       /*
-       ** If we've specified -(no)moreproc,
-       ** then just pass that along.
-       */
-       if (nomore) {
-               vec[vecp++] = "-nomoreproc";
-       } else if (progsw) {
-               vec[vecp++] = "-moreproc";
-               vec[vecp++] = progsw;
-       }
        vec[vecp] = NULL;
 
        fflush(stdout);
 
-       for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
-               sleep(5);
-
-       switch (child_id) {
+       switch (child_id = fork()) {
        case NOTOK:
                adios("fork", "unable to");
                /* NOTREACHED */
 
        case OK:
-               execvp(mhlproc, vec);
+               execvp("mhl", vec);
                fprintf(stderr, "unable to exec ");
-               perror(mhlproc);
+               perror("mhl");
                _exit(-1);
                /* NOTREACHED */
 
@@ -529,7 +482,6 @@ show_content_aux2(CT ct, int serial, int alternate, char *cracked,
        char *buffer, int fd, int xlist, int xstdin, int xtty)
 {
        pid_t child_id;
-       int i;
        char *vec[4], exec[BUFSIZ + sizeof "exec "];
 
        if (debugsw || cracked) {
@@ -569,9 +521,7 @@ show_content_aux2(CT ct, int serial, int alternate, char *cracked,
 
        fflush(stdout);
 
-       for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
-               sleep(5);
-       switch (child_id) {
+       switch (child_id = fork()) {
        case NOTOK:
                advise("fork", "unable to");
                (*ct->c_ceclosefnx) (ct);
@@ -631,9 +581,7 @@ show_text(CT ct, int serial, int alternate)
        ** if it is not a text part of a multipart/alternative
        */
        if (!alternate || ct->c_subtype == TEXT_PLAIN) {
-               snprintf(buffer, sizeof(buffer), "%%p%s '%%F'",
-                               progsw ? progsw : moreproc && *moreproc ?
-                               moreproc : "more");
+               snprintf(buffer, sizeof(buffer), "%%p%s '%%F'", defaultpager);
                cp = (ct->c_showproc = getcpy(buffer));
                return show_content_aux(ct, serial, alternate, cp, NULL);
        }
@@ -717,7 +665,7 @@ show_multi_internal(CT ct, int serial, int alternate)
                sigaddset(&set, SIGINT);
                sigaddset(&set, SIGQUIT);
                sigaddset(&set, SIGTERM);
-               SIGPROCMASK(SIG_BLOCK, &set, &oset);
+               sigprocmask(SIG_BLOCK, &set, &oset);
        }
 
 /*
@@ -730,7 +678,7 @@ show_multi_internal(CT ct, int serial, int alternate)
        for (part = m->mp_parts; part; part = part->mp_next) {
                p = part->mp_part;
 
-               if (part_ok(p, 0) && type_ok(p, 0)) {
+               if (part_ok(p, 1) && type_ok(p, 1)) {
                        int inneresult;
 
                        inneresult = show_switch(p, nowserial, nowalternate);
@@ -769,11 +717,7 @@ show_multi_internal(CT ct, int serial, int alternate)
        if (serial && !nowserial) {
                pid_t pid;
                int kids;
-#ifdef HAVE_UNION_WAIT
-               union wait status;
-#else
                int status;
-#endif
 
                kids = 0;
                for (part = m->mp_parts; part; part = part->mp_next) {
@@ -788,11 +732,7 @@ show_multi_internal(CT ct, int serial, int alternate)
                }
 
                while (kids > 0 && (pid = wait(&status)) != NOTOK) {
-#ifdef HAVE_UNION_WAIT
-                       pidcheck(status.w_status);
-#else
                        pidcheck(status);
-#endif
 
                        for (part = m->mp_parts; part; part = part->mp_next) {
                                p = part->mp_part;
@@ -811,7 +751,7 @@ show_multi_internal(CT ct, int serial, int alternate)
 out:
        if (!nowserial) {
                /* reset the signal mask */
-               SIGPROCMASK(SIG_SETMASK, &oset, &set);
+               sigprocmask(SIG_SETMASK, &oset, &set);
        }
 
        return result;