diff options
-rw-r--r-- | usr.bin/csplit/csplit.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/usr.bin/csplit/csplit.c b/usr.bin/csplit/csplit.c index dfc8f5b..35614be 100644 --- a/usr.bin/csplit/csplit.c +++ b/usr.bin/csplit/csplit.c @@ -94,6 +94,7 @@ int doclean; /* Should cleanup() remove output? */ int main(int argc, char *argv[]) { + struct sigaction sa; long i; int ch; const char *expr; @@ -145,9 +146,15 @@ main(int argc, char *argv[]) if (!kflag) { doclean = 1; atexit(cleanup); - signal(SIGHUP, handlesig); - signal(SIGINT, handlesig); - signal(SIGTERM, handlesig); + sa.sa_flags = 0; + sa.sa_handler = handlesig; + sigemptyset(&sa.sa_mask); + sigaddset(&sa.sa_mask, SIGHUP); + sigaddset(&sa.sa_mask, SIGINT); + sigaddset(&sa.sa_mask, SIGTERM); + sigaction(SIGHUP, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); } lineno = 0; |