aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/nnn.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 30e82cf..6a83e8c 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -539,7 +539,7 @@ static uchar crc8fast(uchar const message[], size_t n)
return remainder;
}
-static void signal_handler(int signum)
+static void sigint_handler(int sig, siginfo_t *siginfo, void *context)
{
interrupted = TRUE;
}
@@ -2961,7 +2961,6 @@ begin:
populate(path, lastname);
if (interrupted) {
interrupted = FALSE;
- signal(SIGINT, &signal_handler);
cfg.apparentsz = 0;
cfg.blkorder = 0;
BLK_SHIFT = 9;
@@ -4222,8 +4221,14 @@ int main(int argc, char *argv[])
if (getenv(env_cfg[NNN_RESTRICT_0B]))
cfg.restrict0b = 1;
- /* Ignore certain signals */
- signal(SIGINT, &signal_handler);
+ /* Ignore/handle certain signals */
+ struct sigaction act = {0};
+ act.sa_sigaction = &sigint_handler;
+ act.sa_flags = SA_SIGINFO;
+ if (sigaction(SIGINT, &act, NULL) < 0) {
+ fprintf(stderr, "sigaction\n");
+ return 1;
+ }
signal(SIGQUIT, SIG_IGN);
/* Test initial path */