aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-07-18 22:53:06 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-07-18 22:53:06 +0200
commit55241fa2e0a623c6f3f3f9c6e430d72bc10858bc (patch)
treefc8334e2cfd277eb237c1d35f902f2ebda19addb /libbb
parentb9e35dc15dbf8aa22dbc260d121ad8f7a34017de (diff)
downloadbusybox-w32-55241fa2e0a623c6f3f3f9c6e430d72bc10858bc.tar.gz
busybox-w32-55241fa2e0a623c6f3f3f9c6e430d72bc10858bc.tar.bz2
busybox-w32-55241fa2e0a623c6f3f3f9c6e430d72bc10858bc.zip
lineedit: limit ASK_TERMINAL to the case when we can't find out the width
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r--libbb/lineedit.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index 3905b8cc4..a62ab6d29 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -149,6 +149,7 @@ struct lineedit_statics {
149 CHAR_T delbuf[DELBUFSIZ]; /* a place to store deleted characters */ 149 CHAR_T delbuf[DELBUFSIZ]; /* a place to store deleted characters */
150#endif 150#endif
151#if ENABLE_FEATURE_EDITING_ASK_TERMINAL 151#if ENABLE_FEATURE_EDITING_ASK_TERMINAL
152 smallint unknown_width;
152 smallint sent_ESC_br6n; 153 smallint sent_ESC_br6n;
153#endif 154#endif
154 155
@@ -1610,14 +1611,16 @@ static void ask_terminal(void)
1610 * poll([{fd=0, events=POLLIN}], 1, 4294967295) = 1 ([{fd=0, revents=POLLIN}]) 1611 * poll([{fd=0, events=POLLIN}], 1, 4294967295) = 1 ([{fd=0, revents=POLLIN}])
1611 * read(0, "\n", 1) = 1 <-- oh crap, user's input got in first 1612 * read(0, "\n", 1) = 1 <-- oh crap, user's input got in first
1612 */ 1613 */
1613 struct pollfd pfd; 1614 if (S.unknown_width) { /* only if window size is not known */
1614 1615 struct pollfd pfd;
1615 pfd.fd = STDIN_FILENO; 1616
1616 pfd.events = POLLIN; 1617 pfd.fd = STDIN_FILENO;
1617 if (safe_poll(&pfd, 1, 0) == 0) { 1618 pfd.events = POLLIN;
1618 S.sent_ESC_br6n = 1; 1619 if (safe_poll(&pfd, 1, 0) == 0) {
1619 fputs("\033" "[6n", stdout); 1620 S.sent_ESC_br6n = 1;
1620 fflush_all(); /* make terminal see it ASAP! */ 1621 fputs("\033" "[6n", stdout);
1622 fflush_all(); /* make terminal see it ASAP! */
1623 }
1621 } 1624 }
1622} 1625}
1623#else 1626#else
@@ -1763,11 +1766,13 @@ static void cmdedit_setwidth(unsigned w, int redraw_flg)
1763 1766
1764static void win_changed(int nsig) 1767static void win_changed(int nsig)
1765{ 1768{
1769 int sv_errno = errno;
1766 unsigned width; 1770 unsigned width;
1767 get_terminal_width_height(0, &width, NULL); 1771 IF_FEATURE_EDITING_ASK_TERMINAL(S.unknown_width =) get_terminal_width_height(0, &width, NULL);
1768 cmdedit_setwidth(width, nsig /* - just a yes/no flag */); 1772 cmdedit_setwidth(width, nsig /* - just a yes/no flag */);
1769 if (nsig == SIGWINCH) 1773 if (nsig == SIGWINCH)
1770 signal(SIGWINCH, win_changed); /* rearm ourself */ 1774 signal(SIGWINCH, win_changed); /* rearm ourself */
1775 errno = sv_errno;
1771} 1776}
1772 1777
1773static int lineedit_read_key(char *read_key_buffer) 1778static int lineedit_read_key(char *read_key_buffer)