From 32b632dfece97aa49a52344f837c74fc6a5f5c4e Mon Sep 17 00:00:00 2001 From: tjr Date: Fri, 26 Jul 2002 05:25:12 +0000 Subject: Use sigaction(2) instead of signal(3) to avoid the signal handler being re-entered. --- usr.bin/csplit/csplit.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'usr.bin/csplit/csplit.c') 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; -- cgit v1.1