mirror of
https://git.freebsd.org/ports.git
synced 2025-05-25 07:26:29 -04:00
74 lines
1.7 KiB
C
74 lines
1.7 KiB
C
--- finch/libgnt/gntmain.c.orig 2015-07-10 05:07:01.325805007 -0400
|
|
+++ finch/libgnt/gntmain.c 2015-07-10 13:05:46.746810688 -0400
|
|
@@ -407,10 +407,11 @@ raise:
|
|
|
|
#ifdef SIGWINCH
|
|
static void (*org_winch_handler)(int);
|
|
+static void (*org_winch_handler_sa)(int, siginfo_t *, void *);
|
|
#endif
|
|
|
|
static void
|
|
-sighandler(int sig)
|
|
+sighandler(int sig, siginfo_t *info, void *data)
|
|
{
|
|
switch (sig) {
|
|
#ifdef SIGWINCH
|
|
@@ -419,16 +420,15 @@ sighandler(int sig)
|
|
g_idle_add((GSourceFunc)refresh_screen, NULL);
|
|
if (org_winch_handler)
|
|
org_winch_handler(sig);
|
|
- signal(SIGWINCH, sighandler);
|
|
+ if (org_winch_handler_sa)
|
|
+ org_winch_handler_sa(sig, info, data);
|
|
break;
|
|
#endif
|
|
case SIGCHLD:
|
|
clean_pid();
|
|
- signal(SIGCHLD, sighandler);
|
|
break;
|
|
case SIGINT:
|
|
ask_before_exit();
|
|
- signal(SIGINT, sighandler);
|
|
break;
|
|
}
|
|
}
|
|
@@ -456,6 +456,10 @@ void gnt_init()
|
|
{
|
|
char *filename;
|
|
const char *locale;
|
|
+ struct sigaction act;
|
|
+#ifdef SIGWINCH
|
|
+ struct sigaction oact;
|
|
+#endif
|
|
|
|
if (channel)
|
|
return;
|
|
@@ -501,11 +505,25 @@ void gnt_init()
|
|
werase(stdscr);
|
|
wrefresh(stdscr);
|
|
|
|
+ act.sa_sigaction = sighandler;
|
|
+ sigemptyset(&act.sa_mask);
|
|
+ act.sa_flags = SA_SIGINFO;
|
|
+
|
|
#ifdef SIGWINCH
|
|
- org_winch_handler = signal(SIGWINCH, sighandler);
|
|
+ org_winch_handler = NULL;
|
|
+ org_winch_handler_sa = NULL;
|
|
+ sigaction(SIGWINCH, &act, &oact);
|
|
+ if (oact.sa_flags & SA_SIGINFO)
|
|
+ {
|
|
+ org_winch_handler_sa = oact.sa_sigaction;
|
|
+ }
|
|
+ else if (oact.sa_handler != SIG_DFL && oact.sa_handler != SIG_IGN)
|
|
+ {
|
|
+ org_winch_handler = oact.sa_handler;
|
|
+ }
|
|
#endif
|
|
- signal(SIGCHLD, sighandler);
|
|
- signal(SIGINT, sighandler);
|
|
+ sigaction(SIGCHLD, &act, NULL);
|
|
+ sigaction(SIGINT, &act, NULL);
|
|
signal(SIGPIPE, SIG_IGN);
|
|
|
|
#if !GLIB_CHECK_VERSION(2, 36, 0)
|