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);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to