summaryrefslogtreecommitdiffstats
path: root/usr.bin/csplit/csplit.c
diff options
context:
space:
mode:
authortjr <tjr@FreeBSD.org>2002-07-26 05:25:12 +0000
committertjr <tjr@FreeBSD.org>2002-07-26 05:25:12 +0000
commit32b632dfece97aa49a52344f837c74fc6a5f5c4e (patch)
tree72638facbd0e6ae477c2e428d1359733f2cd9de7 /usr.bin/csplit/csplit.c
parent501a9e51e519887695ef6c09e18e34ae1235dd5e (diff)
downloadFreeBSD-src-32b632dfece97aa49a52344f837c74fc6a5f5c4e.zip
FreeBSD-src-32b632dfece97aa49a52344f837c74fc6a5f5c4e.tar.gz
Use sigaction(2) instead of signal(3) to avoid the signal handler being
re-entered.
Diffstat (limited to 'usr.bin/csplit/csplit.c')
-rw-r--r--usr.bin/csplit/csplit.c13
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;
OpenPOWER on IntegriCloud