aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-08-16 15:27:30 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2016-08-16 15:27:30 +0200
commit110c6bb413ff7363e9b453edef8ae11cf7b64404 (patch)
treece1025c1e15c6be971498d3d60fb46c5bc83e314
parent252559601f12e22ad3a687fb8188fdbf63bbdc45 (diff)
downloadbusybox-w32-110c6bb413ff7363e9b453edef8ae11cf7b64404.tar.gz
busybox-w32-110c6bb413ff7363e9b453edef8ae11cf7b64404.tar.bz2
busybox-w32-110c6bb413ff7363e9b453edef8ae11cf7b64404.zip
less: fix bracket search to match behavior of less 481
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--miscutils/less.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/miscutils/less.c b/miscutils/less.c
index 10e1d8e16..d1d4a71be 100644
--- a/miscutils/less.c
+++ b/miscutils/less.c
@@ -1589,18 +1589,23 @@ static char opp_bracket(char bracket)
1589 1589
1590static void match_right_bracket(char bracket) 1590static void match_right_bracket(char bracket)
1591{ 1591{
1592 unsigned i; 1592 unsigned i = cur_fline;
1593 1593
1594 if (cur_fline >= max_fline 1594 if (i >= max_fline
1595 || strchr(flines[cur_fline], bracket) == NULL 1595 || strchr(flines[i], bracket) == NULL
1596 ) { 1596 ) {
1597 print_statusline("No bracket in top line"); 1597 print_statusline("No bracket in top line");
1598 return; 1598 return;
1599 } 1599 }
1600
1600 bracket = opp_bracket(bracket); 1601 bracket = opp_bracket(bracket);
1601 for (i = cur_fline + 1; i < max_fline; i++) { 1602 for (; i < max_fline; i++) {
1602 if (strchr(flines[i], bracket) != NULL) { 1603 if (strchr(flines[i], bracket) != NULL) {
1603 buffer_line(i); 1604 /*
1605 * Line with matched right bracket becomes
1606 * last visible line
1607 */
1608 buffer_line(i - max_displayed_line);
1604 return; 1609 return;
1605 } 1610 }
1606 } 1611 }
@@ -1609,18 +1614,22 @@ static void match_right_bracket(char bracket)
1609 1614
1610static void match_left_bracket(char bracket) 1615static void match_left_bracket(char bracket)
1611{ 1616{
1612 int i; 1617 int i = cur_fline + max_displayed_line;
1613 1618
1614 if (cur_fline + max_displayed_line >= max_fline 1619 if (i >= max_fline
1615 || strchr(flines[cur_fline + max_displayed_line], bracket) == NULL 1620 || strchr(flines[i], bracket) == NULL
1616 ) { 1621 ) {
1617 print_statusline("No bracket in bottom line"); 1622 print_statusline("No bracket in bottom line");
1618 return; 1623 return;
1619 } 1624 }
1620 1625
1621 bracket = opp_bracket(bracket); 1626 bracket = opp_bracket(bracket);
1622 for (i = cur_fline + max_displayed_line; i >= 0; i--) { 1627 for (; i >= 0; i--) {
1623 if (strchr(flines[i], bracket) != NULL) { 1628 if (strchr(flines[i], bracket) != NULL) {
1629 /*
1630 * Line with matched left bracket becomes
1631 * first visible line
1632 */
1624 buffer_line(i); 1633 buffer_line(i);
1625 return; 1634 return;
1626 } 1635 }