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