date and time created 83/10/02 21:41:04 by sam
[unix-history] / usr / src / usr.bin / mail / fio.c
index 41c677c..baa616d 100644 (file)
@@ -1,4 +1,6 @@
-#
+#ifndef lint
+static char sccsid[] = "@(#)fio.c      2.16 (Berkeley) %G%";
+#endif
 
 #include "rcv.h"
 #include <sys/stat.h>
 
 #include "rcv.h"
 #include <sys/stat.h>
@@ -10,8 +12,6 @@
  * File I/O.
  */
 
  * File I/O.
  */
 
-static char *SccsId = "@(#)fio.c       2.12 %G%";
-
 /*
  * Set up the input pointers while copying the mail file into
  * /tmp.
 /*
  * Set up the input pointers while copying the mail file into
  * /tmp.
@@ -352,11 +352,12 @@ edstop()
        }
        printf("\"%s\" ", editfile);
        flush();
        }
        printf("\"%s\" ", editfile);
        flush();
-       if ((obuf = fopen(editfile, "w")) == NULL) {
+       if ((obuf = fopen(editfile, "r+")) == NULL) {
                perror(editfile);
                relsesigs();
                reset(0);
        }
                perror(editfile);
                relsesigs();
                reset(0);
        }
+       trunc(obuf);
        c = 0;
        for (mp = &message[0]; mp < &message[msgCount]; mp++) {
                if ((mp->m_flag & MDELETED) != 0)
        c = 0;
        for (mp = &message[0]; mp < &message[msgCount]; mp++) {
                if ((mp->m_flag & MDELETED) != 0)
@@ -393,6 +394,8 @@ done:
        relsesigs();
 }
 
        relsesigs();
 }
 
+static int sigdepth = 0;               /* depth of holdsigs() */
+static int sigmask = 0;
 /*
  * Hold signals SIGHUP - SIGQUIT.
  */
 /*
  * Hold signals SIGHUP - SIGQUIT.
  */
@@ -400,14 +403,8 @@ holdsigs()
 {
        register int i;
 
 {
        register int i;
 
-       for (i = SIGHUP; i <= SIGQUIT; i++)
-               /*
-                * This cannot be changed to ``sighold(i)'' because
-                * of a bug in the jobs library.  Sighold does not
-                * record that one is using the new signal mechanisms
-                * so an eventual sigrelse() will fail.
-                */
-               sigset(i, SIG_HOLD);
+       if (sigdepth++ == 0)
+               sigmask = sigblock(mask(SIGHUP)|mask(SIGINT)|mask(SIGQUIT));
 }
 
 /*
 }
 
 /*
@@ -417,8 +414,8 @@ relsesigs()
 {
        register int i;
 
 {
        register int i;
 
-       for (i = SIGHUP; i <= SIGQUIT; i++)
-               sigrelse(i);
+       if (--sigdepth == 0)
+               sigsetmask(sigmask);
 }
 
 /*
 }
 
 /*