Clean up process wait to use POSIX waitpid() interface.
authorLyndon Nerenberg <lyndon@orthanc.ca>
Sun, 25 Dec 2011 20:09:21 +0000 (12:09 -0800)
committerKen Hornstein <kenh@pobox.com>
Wed, 4 Jan 2012 03:06:30 +0000 (22:06 -0500)
20 files changed:
configure.in
h/prototypes.h
sbr/Makefile.in
sbr/lock_file.c
sbr/pidstatus.c
sbr/pidwait.c
uip/mhbuild.c
uip/mhbuildsbr.c
uip/mhcachesbr.c
uip/mhlist.c
uip/mhn.c
uip/mhoutsbr.c
uip/mhparse.c
uip/mhshow.c
uip/mhshowsbr.c
uip/mhstore.c
uip/mhtest.c
uip/rcvtty.c
uip/spost.c
uip/viamail.c

index 01dbcf8..a933613 100644 (file)
@@ -806,34 +806,6 @@ AC_CHECK_MEMBERS(struct tm.tm_gmtoff,,,
 
 AC_CHECK_MEMBERS(struct utmp.ut_type,,,[#include <utmp.h>])
 
-AC_MSG_CHECKING(for union wait)
-AC_CACHE_VAL(nmh_cv_union_wait, [dnl
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
-#include <sys/wait.h>]],
-    [[union wait status; int pid; pid = wait (&status);
-#ifdef WEXITSTATUS
-/* Some POSIXoid systems have both the new-style macros and the old
-   union wait type, and they do not work together.  If union wait
-   conflicts with WEXITSTATUS et al, we don't want to use it at all.  */
-        if (WEXITSTATUS (status) != 0) pid = -1;
-#ifdef WTERMSIG
-        /* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */
-        -- blow chunks here --
-#endif
-#endif
-#ifdef HAVE_WAITPID
-        /* Make sure union wait works with waitpid.  */
-        pid = waitpid (-1, &status, 0);
-#endif
-      ]])],
-    [nmh_cv_union_wait=yes],
-    [nmh_cv_union_wait=no])])
-if test "$nmh_cv_union_wait" = yes; then
-  AC_DEFINE(HAVE_UNION_WAIT, 1,
-    [Define to 1 if you have the \`union wait' type in <sys/wait.h>.])
-fi
-AC_MSG_RESULT($nmh_cv_union_wait)
-
 CHECK_TYPE_STRUCT_DIRENT_D_TYPE()
 
 dnl -------------
index d88cf8e..1c55136 100644 (file)
@@ -77,8 +77,6 @@ char *m_maildir (char *);
 char *m_mailpath (char *);
 char *m_name (int);
 int m_putenv (char *, char *);
-char *m_scratch (char *, char *);
-char *m_tmpfil (char *);
 char *m_mktemp(const char *, int *, FILE **);
 char *m_mktemp2(const char *, const char *, int *, FILE **);
 void m_unknown(FILE *);
index 5bb3f22..83af141 100644 (file)
@@ -61,7 +61,7 @@ SRCS = addrsbr.c ambigsw.c atooi.c brkstring.c                        \
        fmt_addr.c fmt_compile.c fmt_new.c fmt_rfc2047.c                \
        fmt_scan.c lock_file.c m_atoi.c m_backup.c                      \
        m_convert.c m_draft.c m_getfld.c m_gmprot.c                     \
-       m_maildir.c m_name.c m_scratch.c m_tmpfil.c                     \
+       m_maildir.c m_name.c                                            \
        makedir.c mts.c norm_charmap.c                                  \
        path.c peekc.c pidwait.c pidstatus.c                            \
        print_help.c print_sw.c print_version.c push.c                  \
index 0e14e8d..83cf01a 100644 (file)
@@ -431,18 +431,8 @@ lockit (struct lockinfo *li)
     curlock = li->curlock;
     tmplock = li->tmplock;
 
-#ifdef HAVE_MKSTEMP
     if ((fd = mkstemp(tmplock)) == -1)
        return -1;
-#else
-    if (mktemp(tmplock) == NULL)
-       return -1;
-    if (unlink(tmplock) == -1 && errno != ENOENT)
-       return -1;
-    /* create the temporary lock file */
-    if ((fd = creat(tmplock, 0600)) == -1)
-       return -1;
-#endif
 
 #if 0
     /* write our process id into lock file */
index f16f7e0..7da78ac 100644 (file)
  */
 #include <sigmsg.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 #ifndef WTERMSIG
 # define WTERMSIG(s) ((int)((s) & 0x7F))
 #endif
index ef42e1a..f454161 100644 (file)
 #include <errno.h>
 #include <signal.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 int
 pidwait (pid_t id, int sigsok)
 {
     pid_t pid;
     SIGNAL_HANDLER istat = NULL, qstat = NULL;
 
-#ifdef HAVE_UNION_WAIT
-    union wait status;
-#else
     int status;
-#endif
 
     if (sigsok == -1) {
        /* ignore a couple of signals */
@@ -34,13 +26,8 @@ pidwait (pid_t id, int sigsok)
        qstat = SIGNAL (SIGQUIT, SIG_IGN);
     }
 
-#ifdef HAVE_WAITPID
     while ((pid = waitpid(id, &status, 0)) == -1 && errno == EINTR)
        ;
-#else
-    while ((pid = wait(&status)) != -1 && pid != id)
-       continue;
-#endif
 
     if (sigsok == -1) {
        /* reset the signal handlers */
@@ -48,9 +35,5 @@ pidwait (pid_t id, int sigsok)
        SIGNAL (SIGQUIT, qstat);
     }
 
-#ifdef HAVE_UNION_WAIT
-    return (pid == -1 ? -1 : status.w_status);
-#else
     return (pid == -1 ? -1 : status);
-#endif
 }
index 1e86290..d7a3cf0 100644 (file)
 #include <h/mhcachesbr.h>
 #include <h/utils.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 static struct swit switches[] = {
 #define        CHECKSW                 0
     { "check", 0 },
index f01abd5..a36941f 100644 (file)
 # endif
 #endif
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 
 extern int debugsw;
 extern int verbosw;
index 2223e80..79d6bda 100644 (file)
 # endif
 #endif
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 extern int debugsw;
 
 extern pid_t xpid;     /* mhshowsbr.c or mhbuildsbr.c */
index cb6a3cf..6ef455d 100644 (file)
 #include <h/mhcachesbr.h>
 #include <h/utils.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 static struct swit switches[] = {
 #define        CHECKSW                 0
     { "check", 0 },
index a7644a3..2ce21d3 100644 (file)
--- a/uip/mhn.c
+++ b/uip/mhn.c
 #include <h/mhcachesbr.h>
 #include <h/utils.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 static struct swit switches[] = {
 #define        AUTOSW                  0
     { "auto", 0 },
index 7e12c46..2651452 100644 (file)
 #include <h/mime.h>
 #include <h/mhparse.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 
 extern int ebcdicsw;
 
index d40d78c..14322ab 100644 (file)
 #include <h/mhparse.h>
 #include <h/utils.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 
 extern int debugsw;
 
index 191eeff..722dcf6 100644 (file)
 #include <h/mhcachesbr.h>
 #include <h/utils.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 static struct swit switches[] = {
 #define        CHECKSW                 0
     { "check", 0 },
index 368b25c..d3397ae 100644 (file)
 #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.
@@ -132,11 +128,7 @@ 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
      * the viewer (e.g., lynx) are going to be accessible */
@@ -170,11 +162,7 @@ show_single_message (CT ct, char *form)
     SIGPROCMASK (SIG_BLOCK, &set, &oset);
 
     while (wait (&status) != NOTOK) {
-#ifdef HAVE_UNION_WAIT
-       pidcheck (status.w_status);
-#else
        pidcheck (status);
-#endif
        continue;
     }
 
@@ -783,11 +771,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) {
@@ -802,11 +786,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;
index 7b44a96..5bc8daa 100644 (file)
 #include <h/mhcachesbr.h>
 #include <h/utils.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 static struct swit switches[] = {
 #define        AUTOSW                  0
     { "auto", 0 },
index 5c10b8b..022f6c4 100644 (file)
 #include <h/mhcachesbr.h>
 #include <h/utils.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 static struct swit switches[] = {
 #define        CHECKSW                 0
     { "check", 0 },
index 219af22..07053d2 100644 (file)
@@ -223,13 +223,7 @@ message_fd (char **vec)
     char tmpfil[BUFSIZ];
     struct stat st;
 
-#ifdef HAVE_MKSTEMP
     fd = mkstemp (strncpy (tmpfil, "/tmp/rcvttyXXXXX", sizeof(tmpfil)));
-#else
-    unlink (mktemp (strncpy (tmpfil, "/tmp/rcvttyXXXXX", sizeof(tmpfil))));
-    if ((fd = open (tmpfil, O_RDWR | O_CREAT | O_TRUNC, 0600)) == NOTOK)
-       return header_fd ();
-#endif
     unlink (tmpfil);
 
     if ((child_id = vfork()) == NOTOK) {
index c7582ba..e9e44a8 100644 (file)
@@ -350,15 +350,8 @@ main (int argc, char **argv)
        out = stdout;
     }
     else {
-#ifdef HAVE_MKSTEMP
            if ((out = fdopen( mkstemp (tmpfil), "w" )) == NULL )
                adios (tmpfil, "unable to create");
-#else
-           mktemp (tmpfil);
-           if ((out = fopen (tmpfil, "w")) == NULL)
-               adios (tmpfil, "unable to create");
-           chmod (tmpfil, 0600);
-#endif
        }
 
     hdrtab = (msgstate == normal) ? NHeaders : RHeaders;
@@ -747,15 +740,9 @@ make_bcc_file (void)
     char *vec[6];
     FILE * in, *out;
 
-#ifdef HAVE_MKSTEMP
     fd = mkstemp(bccfil);
     if (fd == -1 || (out = fdopen(fd, "w")) == NULL)
        adios (bccfil, "unable to create");
-#else
-    mktemp (bccfil);
-    if ((out = fopen (bccfil, "w")) == NULL)
-       adios (bccfil, "unable to create");
-#endif
     chmod (bccfil, 0600);
 
     fprintf (out, "Date: %s\n", dtimenow (0));
index aea746d..2e1c51c 100644 (file)
 #include <h/mime.h>
 #include <h/mhparse.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 static struct swit switches[] = {
 #define        TOSW                    0
     { "to mailpath", 0 },