nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit cab33779ae237720cfeeeb32c084a6b16a68a1a0
parent 7c2cfd6e0ca151c803a48057c3cc8cade4914be6
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Tue, 21 Feb 2017 17:04:47 -0500

handle deficient signal systems

Pull in the sigaction module from gnulib, and add ifdef checks
for a bunch of signals that don't exist on Windows.

Diffstat:
Mautogen.sh | 1+
Msrc/nano.c | 14++++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/autogen.sh b/autogen.sh @@ -13,6 +13,7 @@ modules=" iswblank lstat regex + sigaction snprintf-posix stdarg strcase diff --git a/src/nano.c b/src/nano.c @@ -1173,11 +1173,15 @@ void signal_init(void) memset(&act, 0, sizeof(struct sigaction)); act.sa_handler = SIG_IGN; sigaction(SIGINT, &act, NULL); +#ifdef SIGQUIT sigaction(SIGQUIT, &act, NULL); +#endif /* Trap SIGHUP and SIGTERM because we want to write the file out. */ act.sa_handler = handle_hupterm; +#ifdef SIGHUP sigaction(SIGHUP, &act, NULL); +#endif sigaction(SIGTERM, &act, NULL); #ifndef NANO_TINY @@ -1189,17 +1193,23 @@ void signal_init(void) /* Trap normal suspend (^Z) so we can handle it ourselves. */ if (!ISSET(SUSPEND)) { act.sa_handler = SIG_IGN; +#ifdef SIGTSTP sigaction(SIGTSTP, &act, NULL); +#endif } else { /* Block all other signals in the suspend and continue handlers. * If we don't do this, other stuff interrupts them! */ sigfillset(&act.sa_mask); act.sa_handler = do_suspend; +#ifdef SIGTSTP sigaction(SIGTSTP, &act, NULL); +#endif act.sa_handler = do_continue; +#ifdef SIGCONT sigaction(SIGCONT, &act, NULL); +#endif } } @@ -1231,11 +1241,15 @@ RETSIGTYPE do_suspend(int signal) /* Trap SIGHUP and SIGTERM so we can properly deal with them while * suspended. */ act.sa_handler = handle_hupterm; +#ifdef SIGHUP sigaction(SIGHUP, &act, NULL); +#endif sigaction(SIGTERM, &act, NULL); /* Do what mutt does: send ourselves a SIGSTOP. */ +#ifdef SIGSTOP kill(0, SIGSTOP); +#endif } /* The version of above function that is bound to a key. */