diff options
author | tjr <tjr@FreeBSD.org> | 2002-07-26 05:25:12 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2002-07-26 05:25:12 +0000 |
commit | 32b632dfece97aa49a52344f837c74fc6a5f5c4e (patch) | |
tree | 72638facbd0e6ae477c2e428d1359733f2cd9de7 /usr.bin/csplit | |
parent | 501a9e51e519887695ef6c09e18e34ae1235dd5e (diff) | |
download | FreeBSD-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')
-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; |