svn commit: r391782 - in head/net-im: finch libpurple/files

Joe Marcus Clarke marcus at FreeBSD.org
Sun Jul 12 16:02:29 UTC 2015


Author: marcus
Date: Sun Jul 12 16:02:28 2015
New Revision: 391782
URL: https://svnweb.freebsd.org/changeset/ports/391782

Log:
  Fix a crash caused by changing window size.
  
  PR:		200936

Added:
  head/net-im/libpurple/files/patch-finch_libgnt_gntmain.c   (contents, props changed)
Modified:
  head/net-im/finch/Makefile

Modified: head/net-im/finch/Makefile
==============================================================================
--- head/net-im/finch/Makefile	Sun Jul 12 13:05:02 2015	(r391781)
+++ head/net-im/finch/Makefile	Sun Jul 12 16:02:28 2015	(r391782)
@@ -3,6 +3,7 @@
 #   $MCom: ports-stable/net-im/gaim-consoleui-devel/Makefile,v 1.2 2006/10/29 18:55:28 marcus Exp $
 
 PORTNAME=	finch
+PORTREVISION=	1
 
 MAINTAINER=	marcus at FreeBSD.org
 COMMENT=	Finch multi-protocol messaging client (Console UI)

Added: head/net-im/libpurple/files/patch-finch_libgnt_gntmain.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net-im/libpurple/files/patch-finch_libgnt_gntmain.c	Sun Jul 12 16:02:28 2015	(r391782)
@@ -0,0 +1,74 @@
+--- 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)


More information about the svn-ports-all mailing list