version 1.2, 1996/06/11 12:53:35 |
version 1.3, 1997/04/10 15:33:50 |
|
|
char linebuf[LINESIZE], *cp; |
char linebuf[LINESIZE], *cp; |
extern char *tempMail; |
extern char *tempMail; |
char getsub; |
char getsub; |
sigset_t oset, nset; |
int omask; |
#if __GNUC__ |
#if __GNUC__ |
/* Avoid longjmp clobbering */ |
/* Avoid longjmp clobbering */ |
(void) &escape; |
(void) &escape; |
|
|
* Start catching signals from here, but we're still die on interrupts |
* Start catching signals from here, but we're still die on interrupts |
* until we're in the main loop. |
* until we're in the main loop. |
*/ |
*/ |
sigemptyset(&nset); |
omask = sigblock(sigmask(SIGINT) | sigmask(SIGHUP)); |
sigaddset(&nset, SIGINT); |
|
sigaddset(&nset, SIGHUP); |
|
sigprocmask(SIG_BLOCK, &nset, &oset); |
|
if ((saveint = signal(SIGINT, SIG_IGN)) != SIG_IGN) |
if ((saveint = signal(SIGINT, SIG_IGN)) != SIG_IGN) |
signal(SIGINT, collint); |
signal(SIGINT, collint); |
if ((savehup = signal(SIGHUP, SIG_IGN)) != SIG_IGN) |
if ((savehup = signal(SIGHUP, SIG_IGN)) != SIG_IGN) |
|
|
rm(tempMail); |
rm(tempMail); |
goto err; |
goto err; |
} |
} |
sigprocmask(SIG_SETMASK, &oset, NULL); |
sigsetmask(omask & ~(sigmask(SIGINT) | sigmask(SIGHUP))); |
|
|
noreset++; |
noreset++; |
if ((collf = Fopen(tempMail, "w+")) == NULL) { |
if ((collf = Fopen(tempMail, "w+")) == NULL) { |
|
|
if (collf != NULL) |
if (collf != NULL) |
rewind(collf); |
rewind(collf); |
noreset--; |
noreset--; |
sigemptyset(&nset); |
sigblock(sigmask(SIGINT) | sigmask(SIGHUP)); |
sigaddset(&nset, SIGINT); |
|
sigaddset(&nset, SIGHUP); |
|
sigprocmask(SIG_BLOCK, &nset, &oset); |
|
signal(SIGINT, saveint); |
signal(SIGINT, saveint); |
signal(SIGHUP, savehup); |
signal(SIGHUP, savehup); |
signal(SIGTSTP, savetstp); |
signal(SIGTSTP, savetstp); |
signal(SIGTTOU, savettou); |
signal(SIGTTOU, savettou); |
signal(SIGTTIN, savettin); |
signal(SIGTTIN, savettin); |
sigprocmask(SIG_SETMASK, &oset, NULL); |
sigsetmask(omask); |
return collf; |
return collf; |
} |
} |
|
|