svn commit: r260654 - head/bin/sh

Jilles Tjoelker jilles at FreeBSD.org
Tue Jan 14 22:56:26 UTC 2014


Author: jilles
Date: Tue Jan 14 22:56:25 2014
New Revision: 260654
URL: http://svnweb.freebsd.org/changeset/base/260654

Log:
  sh: Remove SIGWINCH handler and just check for resize before every read.
  
  The SIGWINCH handler triggers breakage in libedit which is hard to fix; see
  PR bin/169773.
  
  Also, window size changes while a program is in foreground (and it rather
  than sh will receive SIGWINCH) will now be picked up automatically.
  
  Downside: it is now certain that a resize is only processed after pressing
  <Enter>. If libedit is fixed, sh will most likely have to be changed also.
  
  PR:		bin/180146

Modified:
  head/bin/sh/input.c
  head/bin/sh/trap.c
  head/bin/sh/trap.h

Modified: head/bin/sh/input.c
==============================================================================
--- head/bin/sh/input.c	Tue Jan 14 22:46:23 2014	(r260653)
+++ head/bin/sh/input.c	Tue Jan 14 22:56:25 2014	(r260654)
@@ -162,20 +162,16 @@ preadfd(void)
 	int nr;
 	parsenextc = parsefile->buf;
 
-#ifndef NO_HISTORY
-	if (el != NULL && gotwinch) {
-		gotwinch = 0;
-		el_resize(el);
-	}
-#endif
 retry:
 #ifndef NO_HISTORY
 	if (parsefile->fd == 0 && el) {
 		static const char *rl_cp;
 		static int el_len;
 
-		if (rl_cp == NULL)
+		if (rl_cp == NULL) {
+			el_resize(el);
 			rl_cp = el_gets(el, &el_len);
+		}
 		if (rl_cp == NULL)
 			nr = el_len == 0 ? 0 : -1;
 		else {

Modified: head/bin/sh/trap.c
==============================================================================
--- head/bin/sh/trap.c	Tue Jan 14 22:46:23 2014	(r260653)
+++ head/bin/sh/trap.c	Tue Jan 14 22:56:25 2014	(r260654)
@@ -80,7 +80,6 @@ static char *volatile trap[NSIG];	/* tra
 static volatile sig_atomic_t gotsig[NSIG];
 				/* indicates specified signal received */
 static int ignore_sigchld;	/* Used while handling SIGCHLD traps. */
-volatile sig_atomic_t gotwinch;
 static int last_trapsig;
 
 static int exiting;		/* exitshell() has been called */
@@ -293,12 +292,6 @@ setsignal(int signo)
 				action = S_IGN;
 			break;
 #endif
-#ifndef NO_HISTORY
-		case SIGWINCH:
-			if (rootshell && iflag)
-				action = S_CATCH;
-			break;
-#endif
 		}
 	}
 
@@ -400,11 +393,6 @@ onsig(int signo)
 		gotsig[signo] = 1;
 		pendingsig = signo;
 	}
-
-#ifndef NO_HISTORY
-	if (signo == SIGWINCH)
-		gotwinch = 1;
-#endif
 }
 
 
@@ -490,9 +478,6 @@ setinteractive(int on)
 	setsignal(SIGINT);
 	setsignal(SIGQUIT);
 	setsignal(SIGTERM);
-#ifndef NO_HISTORY
-	setsignal(SIGWINCH);
-#endif
 	is_interactive = on;
 }
 

Modified: head/bin/sh/trap.h
==============================================================================
--- head/bin/sh/trap.h	Tue Jan 14 22:46:23 2014	(r260653)
+++ head/bin/sh/trap.h	Tue Jan 14 22:56:25 2014	(r260654)
@@ -36,7 +36,6 @@
 extern volatile sig_atomic_t pendingsig;
 extern volatile sig_atomic_t pendingsig_waitcmd;
 extern int in_dotrap;
-extern volatile sig_atomic_t gotwinch;
 
 void clear_traps(void);
 int have_traps(void);


More information about the svn-src-all mailing list