#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);
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
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();
/*
-** 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 */
}
}
- if (buflen <= 0 || (ct->c_termproc && buflen <= strlen(ct->c_termproc))) {
+ if (buflen <= 0 || (ct->c_termproc &&
+ (size_t)buflen <= strlen(ct->c_termproc))) {
/*
** content_error would provide a more useful error message
** here, except that if we got overrun, it probably would
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) {
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);
** 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);
}
sigaddset(&set, SIGINT);
sigaddset(&set, SIGQUIT);
sigaddset(&set, SIGTERM);
- SIGPROCMASK(SIG_BLOCK, &set, &oset);
+ sigprocmask(SIG_BLOCK, &set, &oset);
}
/*
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);
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) {
}
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;
out:
if (!nowserial) {
/* reset the signal mask */
- SIGPROCMASK(SIG_SETMASK, &oset, &set);
+ sigprocmask(SIG_SETMASK, &oset, &set);
}
return result;
}
}
- if (buflen <= 0 ||
- (ct->c_termproc && buflen <= strlen(ct->c_termproc))) {
+ if (buflen <= 0 || (ct->c_termproc &&
+ (size_t)buflen <= strlen(ct->c_termproc))) {
/*
** content_error would provide a more useful error message
** here, except that if we got overrun, it probably would