Wrapped setjmp(), sigsetjmp(), and vfork() calls to silence gcc -Wclobbered for good...
authorDavid Levine <levinedl@acm.org>
Tue, 17 Jan 2012 02:58:15 +0000 (20:58 -0600)
committerDavid Levine <levinedl@acm.org>
Tue, 17 Jan 2012 02:58:15 +0000 (20:58 -0600)
29 files changed:
h/Makefile.in
h/m_setjmp.h [new file with mode: 0644]
h/prototypes.h
h/rcvmail.h
sbr/Makefile.in
sbr/ext_hook.c
sbr/folder_delmsgs.c
sbr/getans.c
sbr/m_setjmp.c [new file with mode: 0644]
sbr/m_vfork.c [new file with mode: 0644]
sbr/makedir.c
sbr/refile.c
sbr/showfile.c
uip/mhbuildsbr.c
uip/mhcachesbr.c
uip/mhlsbr.c
uip/mhparse.c
uip/mhshowsbr.c
uip/mhstoresbr.c
uip/msh.c
uip/mshcmds.c
uip/post.c
uip/prompter.c
uip/rcvtty.c
uip/replsbr.c
uip/sendsbr.c
uip/slocal.c
uip/spost.c
uip/whatnowsbr.c

index 7dcbb6f..865df96 100644 (file)
@@ -10,7 +10,7 @@ VPATH  = @srcdir@
 # header files included in distribution
 HDRS =         addrsbr.h aliasbr.h crawl_folders.h dropsbr.h fmt_compile.h fmt_scan.h \
        md5.h mf.h mh.h mhcachesbr.h mhparse.h mime.h msh.h mts.h       \
-       nmh.h picksbr.h popsbr.h prototypes.h rcvmail.h \
+       m_setjmp.h nmh.h picksbr.h popsbr.h prototypes.h rcvmail.h      \
        scansbr.h signals.h tws.h vmhsbr.h utils.h
 
 # auxiliary files
diff --git a/h/m_setjmp.h b/h/m_setjmp.h
new file mode 100644 (file)
index 0000000..767c3f1
--- /dev/null
@@ -0,0 +1,16 @@
+
+/*
+ * m_setjmp.h -- Wraps setjmp() and sigsetjmp(), to help prevent warnings
+ *            -- about arguments and variables that might be clobbered by
+ *            -- a setjmp call with gcc -Wclobbered.
+ *
+ * This code is Copyright (c) 2012, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
+ */
+
+#include <setjmp.h>
+
+int m_setjmp(jmp_buf);
+
+int m_sigsetjmp(sigjmp_buf, int);
index 12124cd..0544306 100644 (file)
@@ -80,6 +80,7 @@ int m_putenv (char *, char *);
 char *m_mktemp(const char *, int *, FILE **);
 char *m_mktemp2(const char *, const char *, int *, FILE **);
 void m_unknown(FILE *);
+pid_t m_vfork ();
 int makedir (char *);
 char *nmh_getpass(const char *);
 char *norm_charmap(char *);
index 37fba4d..275ea74 100644 (file)
@@ -6,7 +6,6 @@
 #if defined(SMTPMTS)
 # include <ctype.h>
 # include <errno.h>
-# include <setjmp.h>
 # include <stdio.h>
 # include <sys/types.h>
 # include <mts/smtp/smtp.h>
index c949469..c65828b 100644 (file)
@@ -62,7 +62,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_maildir.c m_name.c m_setjmp.c m_vfork.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 e94083b..506457d 100644 (file)
@@ -23,7 +23,7 @@ ext_hook(char *hook_name, char *message_file_name_1, char *message_file_name_2)
     if ((hook = context_find(hook_name)) == (char *)0)
        return (OK);
 
-    switch (pid = vfork()) {
+    switch (pid = m_vfork()) {
     case -1:
        status = NOTOK;
        advise(NULL, "external database may be out-of-date.");
index 6bde76f..b812def 100644 (file)
@@ -57,7 +57,7 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook)
        fflush (stdout);
        vec[0] = r1bindex (rmmproc, '/');
 
-       switch (pid = vfork()) {
+       switch (pid = m_vfork()) {
        case -1:
            advise ("fork", "unable to");
            return -1;
index 173e1b4..95e34c4 100644 (file)
@@ -9,7 +9,7 @@
 
 #include <h/mh.h>
 #include <h/signals.h>
-#include <setjmp.h>
+#include <h/m_setjmp.h>
 #include <signal.h>
 
 static char ansbuf[BUFSIZ];
@@ -28,7 +28,7 @@ getans (char *prompt, struct swit *ansp)
     SIGNAL_HANDLER istat = NULL;
     char *cp, **cpp;
 
-    if (!(setjmp (sigenv))) {
+    if (!(m_setjmp (sigenv))) {
        istat = SIGNAL (SIGINT, intrser);
     } else {
        SIGNAL (SIGINT, istat);
diff --git a/sbr/m_setjmp.c b/sbr/m_setjmp.c
new file mode 100644 (file)
index 0000000..f19546b
--- /dev/null
@@ -0,0 +1,25 @@
+
+/*
+ * m_setjmp.h -- Wraps setjmp() and sigsetjmp(), to help prevent warnings
+ *            -- about arguments and variables that might be clobbered by
+ *            -- a setjmp call with gcc -Wclobbered.
+ *
+ * This code is Copyright (c) 2012, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
+ */
+
+#include <h/m_setjmp.h>
+
+
+int
+m_setjmp(jmp_buf env) {
+  return setjmp(env);
+}
+
+
+int
+m_sigsetjmp(sigjmp_buf env, int savesigs) {
+  return sigsetjmp(env, savesigs);
+}
+
diff --git a/sbr/m_vfork.c b/sbr/m_vfork.c
new file mode 100644 (file)
index 0000000..e35f0bc
--- /dev/null
@@ -0,0 +1,17 @@
+
+/*
+ * m_vfork.c -- Wraps vfork(), to help prevent warnings about arguments
+ *           -- and variables that might be clobbered by a vfork call
+ *           -- with gcc -Wclobbered.
+ *
+ * This code is Copyright (c) 2012, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
+ */
+
+#include <h/mh.h>
+
+pid_t
+m_vfork() {
+  return vfork();
+}
index 4337b7c..bbeef80 100644 (file)
@@ -85,7 +85,7 @@ makedir (char *dir)
           nested directories like the above code can.
 
           -- Dan Harkless <dan-nmh@dilvish.speed.net> */
-       switch (pid = vfork()) {
+       switch (pid = m_vfork()) {
            case -1: 
                advise ("fork", "unable to");
                return 0;
index fc2793c..a2a958d 100644 (file)
@@ -34,7 +34,7 @@ refile (char **arg, char *file)
     context_save();    /* save the context file */
     fflush(stdout);
 
-    switch (pid = vfork()) {
+    switch (pid = m_vfork()) {
        case -1: 
            advise ("fork", "unable to");
            return -1;
index 59ae795..17f84b9 100644 (file)
@@ -28,7 +28,7 @@ showfile (char **arg, char *file)
     if (!strcmp (r1bindex (lproc, '/'), "mhl"))
        lproc = mhlproc;
 
-    switch (pid = vfork()) {
+    switch (pid = m_vfork()) {
     case -1:
        /* fork error */
        advise ("fork", "unable to");
index 87ebf16..d417bef 100644 (file)
@@ -988,8 +988,7 @@ compose_content (CT ct)
     default:
        if (!ce->ce_file) {
            pid_t child_id;
-           int i, len, buflen;
-           volatile int xstdout;
+           int i, xstdout, len, buflen;
            char *bp, **ap, *cp;
            char *vec[4], buffer[BUFSIZ];
            FILE *out;
@@ -1088,7 +1087,7 @@ raw:
            if ((out = fopen (ce->ce_file, "w")) == NULL)
                adios (ce->ce_file, "unable to open for writing");
 
-           for (i = 0; (child_id = vfork()) == NOTOK && i > 5; i++)
+           for (i = 0; (child_id = m_vfork()) == NOTOK && i > 5; i++)
                sleep (5);
            switch (child_id) {
            case NOTOK:
index cf9087b..eee8631 100644 (file)
@@ -12,7 +12,6 @@
 #include <h/signals.h>
 #include <h/md5.h>
 #include <errno.h>
-#include <setjmp.h>
 #include <signal.h>
 #include <h/mts.h>
 #include <h/tws.h>
index 4c2558f..b494812 100644 (file)
@@ -13,7 +13,7 @@
 #include <h/fmt_scan.h>
 #include <h/tws.h>
 #include <h/utils.h>
-#include <setjmp.h>
+#include <h/m_setjmp.h>
 #include <signal.h>
 
 /*
@@ -790,13 +790,13 @@ parse (void)
 
 
 static void
-process (char *folder, char *volatile fname, int ofilen, int ofilec)
+process (char *folder, char *fname, int ofilen, int ofilec)
 {
     char *cp = NULL;
     FILE *fp = NULL;
     struct mcomp *c1;
 
-    switch (setjmp (env)) {
+    switch (m_setjmp (env)) {
        case OK: 
            if (fname) {
                fp = mhl_action ? (*mhl_action) (fname) : fopen (fname, "r");
@@ -1587,7 +1587,7 @@ doface (struct mcomp *c1)
        return NOTOK;
     }
 
-    for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
+    for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
        sleep (5);
 
     switch (child_id) {
@@ -1682,7 +1682,7 @@ mhlsbr (int argc, char **argv, FILE *(*action)())
     char *cp = NULL;
     struct mcomp *c1;
 
-    switch (setjmp (mhlenv)) {
+    switch (m_setjmp (mhlenv)) {
        case OK: 
            cp = invo_name;
            sleepsw = 0;        /* XXX */
@@ -1761,7 +1761,7 @@ m_popen (char *name)
     if (pipe (pd) == NOTOK)
        adios ("pipe", "unable to");
 
-    switch (m_pid = vfork ()) {
+    switch (m_pid = m_vfork()) {
        case NOTOK: 
            adios ("fork", "unable to");
 
index ea78b42..265276d 100644 (file)
@@ -12,7 +12,6 @@
 #include <h/signals.h>
 #include <h/md5.h>
 #include <errno.h>
-#include <setjmp.h>
 #include <signal.h>
 #include <h/mts.h>
 #include <h/tws.h>
@@ -2472,8 +2471,7 @@ InitFTP (CT ct)
 static int
 openFTP (CT ct, char **file)
 {
-    int        cachetype, fd;
-    volatile int caching;
+    int        cachetype, caching, fd;
     int len, buflen;
     char *bp, *ftp, *user, *pass;
     char buffer[BUFSIZ], cachefile[BUFSIZ];
@@ -2606,7 +2604,7 @@ openFTP (CT ct, char **file)
 
        fflush (stdout);
 
-       for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)
+       for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
            sleep (5);
        switch (child_id) {
            case NOTOK:
@@ -2748,7 +2746,7 @@ openMail (CT ct, char **file)
     vec[vecp++] = e->eb_body;
     vec[vecp] = NULL;
 
-    for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)
+    for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
        sleep (5);
     switch (child_id) {
        case NOTOK:
index 6f511f3..ae90a7b 100644 (file)
@@ -12,7 +12,7 @@
 #include <h/signals.h>
 #include <h/md5.h>
 #include <errno.h>
-#include <setjmp.h>
+#include <h/m_setjmp.h>
 #include <signal.h>
 #include <h/mts.h>
 #include <h/tws.h>
@@ -197,7 +197,7 @@ DisplayMsgHeader (CT ct, char *form)
 
     fflush (stdout);
 
-    for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
+    for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
        sleep (5);
 
     switch (child_id) {
@@ -541,7 +541,7 @@ show_content_aux2 (CT ct, int serial, int alternate, char *cracked, char *buffer
            SIGNAL_HANDLER istat;
 
            istat = SIGNAL (SIGINT, intrser);
-           if ((intr = sigsetjmp (intrenv, 1)) == OK) {
+           if ((intr = m_sigsetjmp (intrenv, 1)) == OK) {
                fflush (stdout);
                prompt[0] = 0;
                read (fileno (stdout), prompt, sizeof(prompt));
@@ -564,7 +564,7 @@ show_content_aux2 (CT ct, int serial, int alternate, char *cracked, char *buffer
 
     fflush (stdout);
 
-    for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)
+    for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
        sleep (5);
     switch (child_id) {
        case NOTOK:
index a1b5e2a..5962184 100644 (file)
@@ -12,7 +12,6 @@
 #include <h/signals.h>
 #include <h/md5.h>
 #include <errno.h>
-#include <setjmp.h>
 #include <signal.h>
 #include <h/mts.h>
 #include <h/tws.h>
index 2339821..43530db 100644 (file)
--- a/uip/msh.c
+++ b/uip/msh.c
@@ -25,7 +25,7 @@
 #include <termios.h>
 
 #include <pwd.h>
-#include <setjmp.h>
+#include <h/m_setjmp.h>
 #include <signal.h>
 #include <h/msh.h>
 #include <h/vmhsbr.h>
@@ -1919,7 +1919,7 @@ pFIN (void)
 {
     int status;
 
-    switch (setjmp (peerenv)) {
+    switch (m_setjmp (peerenv)) {
        case OK: 
            SIGNAL (SIGALRM, alrmser);
            alarm (ALARM);
index cec475e..19d8b5b 100644 (file)
@@ -15,7 +15,6 @@
 #include <h/tws.h>
 #include <h/mts.h>
 #include <errno.h>
-#include <setjmp.h>
 #include <signal.h>
 #include <h/msh.h>
 #include <h/picksbr.h>
index 8845560..2449d5f 100644 (file)
@@ -20,7 +20,6 @@
 #include <h/mts.h>
 
 #include <errno.h>
-#include <setjmp.h>
 #include <signal.h>
 
 #ifdef HAVE_SYS_TIME_H
index 981e820..ecfd05f 100644 (file)
@@ -12,7 +12,7 @@
 #include <h/signals.h>
 #include <errno.h>
 #include <signal.h>
-#include <setjmp.h>
+#include <h/m_setjmp.h>
 
 #include <termios.h>
 
@@ -353,7 +353,7 @@ getln (char *buffer, int n)
     cp = buffer;
     *cp = 0;
 
-    switch (setjmp (sigenv)) {
+    switch (m_setjmp (sigenv)) {
        case OK: 
            wtuser = 1;
            break;
index 8ce068d..1ae8576 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <h/mh.h>
 #include <h/signals.h>
+#include <h/m_setjmp.h>
 #include <h/rcvmail.h>
 #include <h/scansbr.h>
 #include <h/tws.h>
@@ -217,21 +218,20 @@ static int
 message_fd (char **vec)
 {
     pid_t child_id;
-    int bytes, seconds;
-    volatile int fd;
+    int bytes, fd, seconds;
     char tmpfil[BUFSIZ];
     struct stat st;
 
     fd = mkstemp (strncpy (tmpfil, "/tmp/rcvttyXXXXX", sizeof(tmpfil)));
     unlink (tmpfil);
 
-    if ((child_id = vfork()) == NOTOK) {
+    if ((child_id = m_vfork()) == NOTOK) {
        /* fork error */
        close (fd);
        return header_fd ();
     } else if (child_id) {
        /* parent process */
-       if (!setjmp (myctx)) {
+       if (!m_setjmp (myctx)) {
            SIGNAL (SIGALRM, alrmser);
            bytes = fstat(fileno (stdin), &st) != NOTOK ? (int) st.st_size : 100;
 
@@ -317,7 +317,7 @@ alert (char *tty, int md)
     if (stat (ttyspec, &st) == NOTOK || (st.st_mode & mask) == 0)
        return;
 
-    if (!setjmp (myctx)) {
+    if (!m_setjmp (myctx)) {
        SIGNAL (SIGALRM, alrmser);
        alarm (2);
        td = open (ttyspec, O_WRONLY);
index ace850d..7365b45 100644 (file)
@@ -466,7 +466,7 @@ replfilter (FILE *in, FILE *out, char *filter)
     rewind (in);
     lseek (fileno(in), (off_t) 0, SEEK_SET);
 
-    switch (pid = vfork ()) {
+    switch (pid = m_vfork()) {
        case NOTOK: 
            adios ("fork", "unable to");
 
index 09126c2..63efbc0 100644 (file)
@@ -9,7 +9,7 @@
 
 #include <h/mh.h>
 #include <h/signals.h>
-#include <setjmp.h>
+#include <h/m_setjmp.h>
 #include <signal.h>
 #include <fcntl.h>
 #include <h/mime.h>
@@ -110,7 +110,7 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st, int rename_drft, cha
     }
 
     done=armed_done;
-    switch (setjmp (env)) {
+    switch (m_setjmp (env)) {
     case OK: 
        /*
         * If given -push and -unique (which is undocumented), then
@@ -771,11 +771,10 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay)
  */
 
 static int
-sendaux (char **vec, int vecp, char *volatile drft, struct stat *st)
+sendaux (char **vec, int vecp, char *drft, struct stat *st)
 {
     pid_t child_id;
-    int i, status;
-    volatile int fd, fd2;
+    int i, status, fd, fd2;
     char backup[BUFSIZ], buf[BUFSIZ];
 
     fd = pushsw ? tmp_fd () : NOTOK;
@@ -795,7 +794,7 @@ sendaux (char **vec, int vecp, char *volatile drft, struct stat *st)
        done (1);
     vec[vecp] = NULL;
 
-    for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
+    for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
        sleep (5);
 
     switch (child_id) {
index f08f2ff..d701e78 100644 (file)
@@ -25,6 +25,7 @@
 #include <h/dropsbr.h>
 #include <h/rcvmail.h>
 #include <h/signals.h>
+#include <h/m_setjmp.h>
 #include <h/tws.h>
 #include <h/mts.h>
 #include <h/utils.h>
@@ -1165,7 +1166,7 @@ usr_pipe (int fd, char *cmd, char *pgm, char **vec, int suppress)
 
        default: 
            /* parent process */
-           if (!setjmp (myctx)) {
+           if (! m_setjmp (myctx)) {
                SIGNAL (SIGALRM, alrmser);
                bytes = fstat (fd, &st) != -1 ? (int) st.st_size : 100;
 
index 187f9a0..6defbac 100644 (file)
@@ -428,7 +428,7 @@ main (int argc, char **argv)
 
     if (pushflg && !(watch || verbose)) {
        /* fork to a child to run sendmail */
-       for (i=0; (pid = vfork()) == NOTOK && i < 5; i++)
+       for (i=0; (pid = m_vfork()) == NOTOK && i < 5; i++)
            sleep(5);
        switch (pid) {
            case NOTOK:
@@ -764,7 +764,7 @@ make_bcc_file (void)
     else {
        vec[0] = r1bindex (mhlproc, '/');
 
-       for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
+       for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
            sleep (5);
        switch (child_id) {
            case NOTOK: 
@@ -825,7 +825,7 @@ fcc (char *file, char *folder)
        printf ("%sFcc: %s\n", msgstate == resent ? "Resent-" : "", folder);
     fflush (stdout);
 
-    for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
+    for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
        sleep (5);
     switch (child_id) {
        case NOTOK: 
index 3009e0f..85c50b3 100644 (file)
@@ -696,7 +696,7 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp,
     context_save ();   /* save the context file */
     fflush (stdout);
 
-    switch (pid = vfork ()) {
+    switch (pid = m_vfork()) {
        case NOTOK:
            advise ("fork", "unable to");
            status = NOTOK;
@@ -811,7 +811,7 @@ copyf (char *ifile, char *ofile)
  */
 
 static int
-sendfile (char **arg, char *file, volatile int pushsw)
+sendfile (char **arg, char *file, int pushsw)
 {
     pid_t child_id;
     int i, vecp;
@@ -846,7 +846,7 @@ sendfile (char **arg, char *file, volatile int pushsw)
     context_save ();   /* save the context file */
     fflush (stdout);
 
-    for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
+    for (i = 0; (child_id = m_vfork()) == NOTOK && i < 5; i++)
        sleep (5);
     switch (child_id) {
        case NOTOK:
@@ -1349,7 +1349,7 @@ whomfile (char **arg, char *file)
     context_save ();   /* save the context file */
     fflush (stdout);
 
-    switch (pid = vfork ()) {
+    switch (pid = m_vfork()) {
        case NOTOK:
            advise ("fork", "unable to");
            return 1;