| 38 |
|
|
| 39 |
|
char *libpath; /* library directory list */ |
| 40 |
|
|
| 41 |
– |
int diemask = 0; /* signals we catch */ |
| 41 |
|
char *sigerr[NSIG]; /* signal error messages */ |
| 42 |
|
|
| 43 |
|
extern int stderr_v(); /* standard error output */ |
| 345 |
|
#endif |
| 346 |
|
#if RPICT |
| 347 |
|
signal(SIGALRM, report); |
| 349 |
– |
#ifdef BSD |
| 350 |
– |
diemask |= sigmask(SIGALRM); |
| 351 |
– |
#endif |
| 348 |
|
#else |
| 349 |
|
sigdie(SIGALRM, "Alarm clock"); |
| 350 |
|
#endif |
| 450 |
|
onsig(signo) /* fatal signal */ |
| 451 |
|
int signo; |
| 452 |
|
{ |
| 453 |
< |
#ifdef BSD |
| 454 |
< |
sigblock(diemask); |
| 455 |
< |
#endif |
| 453 |
> |
static int gotsig = 0; |
| 454 |
> |
|
| 455 |
> |
if (gotsig++) /* two signals and we're gone! */ |
| 456 |
> |
_exit(127); |
| 457 |
> |
|
| 458 |
|
eputs("signal - "); |
| 459 |
|
eputs(sigerr[signo]); |
| 460 |
|
eputs("\n"); |
| 468 |
|
{ |
| 469 |
|
if (signal(signo, onsig) == SIG_IGN) |
| 470 |
|
signal(signo, SIG_IGN); |
| 473 |
– |
#ifdef BSD |
| 474 |
– |
else |
| 475 |
– |
diemask |= sigmask(signo); |
| 476 |
– |
#endif |
| 471 |
|
sigerr[signo] = msg; |
| 472 |
|
} |
| 473 |
|
|