V10/lbin/Mail/4.2sys.c
#ifndef BSD4_2
#ifndef lint
static char *sccsid = "@(#)4.2sys.c 1.0 3/9/84";
#endif
#include "rcv.h"
/*
* Mail -- a mail program
*
* Simulates some 4.2BSD system calls
*/
int oldbmask = 0; /* previously blocked signals */
int beenhere = 0; /* have we initialized signals? */
int heldsigs[NSIG]; /* list of held signals */
/*
* Add signals to list of those to be blocked
*/
sigblock(smask)
int smask;
{
int retmask;
retmask = oldbmask;
oldbmask |= smask;
blocksig(oldbmask);
return(retmask);
}
/*
* Set signals to be blocked
*/
sigsetmask(smask)
int smask;
{
int retmask;
retmask = oldbmask;
oldbmask = smask;
blocksig(oldbmask);
return(retmask);
}
/*
* Block signals in smask
*/
blocksig(smask)
int smask;
{
int i;
for (i = 0; i < NSIG; i++) {
if (!beenhere) {
sigset(i, sigset(i, SIG_DFL));
heldsigs[i] = 0;
}
if (i != SIGKILL && i != SIGSTOP && i != SIGCONT &&
(smask & mask(i)) && !heldsigs[i]) {
sighold(i);
heldsigs[i] = 1;
}
else if (i != SIGKILL && i != SIGSTOP && i != SIGCONT &&
!(smask & mask(i)) && heldsigs[i]) {
sigrelse(i);
heldsigs[i] = 0;
}
}
beenhere = 1;
}
#endif /* BSD4_2 */