source:
patches/readline-5.2-fixes-3.patch@
2978738
Last change on this file since 2978738 was c30178f, checked in by , 17 years ago | |
---|---|
|
|
File size: 12.5 KB |
-
readline-5.2
Submitted By: Jim Gifford (jim at linuxfromscratch dot org) Date: 2007-09-03 Initial Package Version: 5.2 Origin: ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches Upstream Status: From Upstream Description: Contains patches 001-007 from upstream diff -Naur readline-5.2.orig/complete.c readline-5.2/complete.c
old new 428 428 return (1); 429 429 if (c == 'n' || c == 'N' || c == RUBOUT) 430 430 return (0); 431 if (c == ABORT_CHAR )431 if (c == ABORT_CHAR || c < 0) 432 432 _rl_abort_internal (); 433 433 if (for_pager && (c == NEWLINE || c == RETURN)) 434 434 return (2); -
readline-5.2
diff -Naur readline-5.2.orig/display.c readline-5.2/display.c
old new 561 561 wrap_offset = prompt_invis_chars_first_line = 0; 562 562 } 563 563 564 #if defined (HANDLE_MULTIBYTE) 565 #define CHECK_INV_LBREAKS() \ 566 do { \ 567 if (newlines >= (inv_lbsize - 2)) \ 568 { \ 569 inv_lbsize *= 2; \ 570 inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ 571 _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ 572 } \ 573 } while (0) 574 #else 564 575 #define CHECK_INV_LBREAKS() \ 565 576 do { \ 566 577 if (newlines >= (inv_lbsize - 2)) \ … … 569 580 inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ 570 581 } \ 571 582 } while (0) 583 #endif /* HANDLE_MULTIBYTE */ 572 584 573 585 #if defined (HANDLE_MULTIBYTE) 574 586 #define CHECK_LPOS() \ … … 1506 1518 { 1507 1519 /* Non-zero if we're increasing the number of lines. */ 1508 1520 int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; 1521 /* If col_lendiff is > 0, implying that the new string takes up more 1522 screen real estate than the old, but lendiff is < 0, meaning that it 1523 takes fewer bytes, we need to just output the characters starting 1524 from the first difference. These will overwrite what is on the 1525 display, so there's no reason to do a smart update. This can really 1526 only happen in a multibyte environment. */ 1527 if (lendiff < 0) 1528 { 1529 _rl_output_some_chars (nfd, temp); 1530 _rl_last_c_pos += _rl_col_width (nfd, 0, temp); 1531 /* If nfd begins before any invisible characters in the prompt, 1532 adjust _rl_last_c_pos to account for wrap_offset and set 1533 cpos_adjusted to let the caller know. */ 1534 if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) 1535 { 1536 _rl_last_c_pos -= wrap_offset; 1537 cpos_adjusted = 1; 1538 } 1539 return; 1540 } 1509 1541 /* Sometimes it is cheaper to print the characters rather than 1510 1542 use the terminal's capabilities. If we're growing the number 1511 1543 of lines, make sure we actually cause the new line to wrap 1512 1544 around on auto-wrapping terminals. */ 1513 if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))1545 else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) 1514 1546 { 1515 1547 /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and 1516 1548 _rl_horizontal_scroll_mode == 1, inserting the characters with … … 1586 1618 temp = nls - nfd; 1587 1619 if (temp > 0) 1588 1620 { 1621 /* If nfd begins at the prompt, or before the invisible 1622 characters in the prompt, we need to adjust _rl_last_c_pos 1623 in a multibyte locale to account for the wrap offset and 1624 set cpos_adjusted accordingly. */ 1589 1625 _rl_output_some_chars (nfd, temp); 1590 _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; 1626 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1627 { 1628 _rl_last_c_pos += _rl_col_width (nfd, 0, temp); 1629 if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) 1630 { 1631 _rl_last_c_pos -= wrap_offset; 1632 cpos_adjusted = 1; 1633 } 1634 } 1635 else 1636 _rl_last_c_pos += temp; 1591 1637 } 1592 1638 } 1593 1639 /* Otherwise, print over the existing material. */ … … 1595 1641 { 1596 1642 if (temp > 0) 1597 1643 { 1644 /* If nfd begins at the prompt, or before the invisible 1645 characters in the prompt, we need to adjust _rl_last_c_pos 1646 in a multibyte locale to account for the wrap offset and 1647 set cpos_adjusted accordingly. */ 1598 1648 _rl_output_some_chars (nfd, temp); 1599 1649 _rl_last_c_pos += col_temp; /* XXX */ 1650 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1651 { 1652 if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) 1653 { 1654 _rl_last_c_pos -= wrap_offset; 1655 cpos_adjusted = 1; 1656 } 1657 } 1600 1658 } 1601 1659 lendiff = (oe - old) - (ne - new); 1602 1660 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) … … 1732 1790 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1733 1791 { 1734 1792 dpos = _rl_col_width (data, 0, new); 1735 if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ 1793 /* Use NEW when comparing against the last invisible character in the 1794 prompt string, since they're both buffer indices and DPOS is a 1795 desired display position. */ 1796 if (new > prompt_last_invisible) /* XXX - don't use woff here */ 1736 1797 { 1737 1798 dpos -= woff; 1738 1799 /* Since this will be assigned to _rl_last_c_pos at the end (more … … 2380 2441 2381 2442 if (end <= start) 2382 2443 return 0; 2444 if (MB_CUR_MAX == 1 || rl_byte_oriented) 2445 return (end - start); 2383 2446 2384 2447 memset (&ps, 0, sizeof (mbstate_t)); 2385 2448 -
readline-5.2
diff -Naur readline-5.2.orig/input.c readline-5.2/input.c
old new 133 133 return (0); 134 134 135 135 *key = ibuffer[pop_index++]; 136 136 #if 0 137 137 if (pop_index >= ibuffer_len) 138 #else 139 if (pop_index > ibuffer_len) 140 #endif 138 141 pop_index = 0; 139 142 140 143 return (1); … … 250 253 while (chars_avail--) 251 254 { 252 255 k = (*rl_getc_function) (rl_instream); 253 rl_stuff_char (k); 256 if (rl_stuff_char (k) == 0) 257 break; /* some problem; no more room */ 254 258 if (k == NEWLINE || k == RETURN) 255 259 break; 256 260 } … … 373 377 RL_SETSTATE (RL_STATE_INPUTPENDING); 374 378 } 375 379 ibuffer[push_index++] = key; 380 #if 0 376 381 if (push_index >= ibuffer_len) 382 #else 383 if (push_index > ibuffer_len) 384 #endif 377 385 push_index = 0; 378 386 379 387 return 1; … … 513 521 char *mbchar; 514 522 int size; 515 523 { 516 int mb_len = 0;524 int mb_len, c; 517 525 size_t mbchar_bytes_length; 518 526 wchar_t wc; 519 527 mbstate_t ps, ps_back; 520 528 521 529 memset(&ps, 0, sizeof (mbstate_t)); 522 530 memset(&ps_back, 0, sizeof (mbstate_t)); 523 531 532 mb_len = 0; 524 533 while (mb_len < size) 525 534 { 526 535 RL_SETSTATE(RL_STATE_MOREINPUT); 527 mbchar[mb_len++]= rl_read_key ();536 c = rl_read_key (); 528 537 RL_UNSETSTATE(RL_STATE_MOREINPUT); 529 538 539 if (c < 0) 540 break; 541 542 mbchar[mb_len++] = c; 543 530 544 mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); 531 545 if (mbchar_bytes_length == (size_t)(-1)) 532 546 break; /* invalid byte sequence for the current locale */ … … 564 578 565 579 c = first; 566 580 memset (mb, 0, mlen); 567 for (i = 0; i < mlen; i++)581 for (i = 0; c >= 0 && i < mlen; i++) 568 582 { 569 583 mb[i] = (char)c; 570 584 memset (&ps, 0, sizeof (mbstate_t)); -
readline-5.2
diff -Naur readline-5.2.orig/isearch.c readline-5.2/isearch.c
old new 327 327 rl_command_func_t *f; 328 328 329 329 f = (rl_command_func_t *)NULL; 330 331 /* Translate the keys we do something with to opcodes. */ 330 331 if (c < 0) 332 { 333 cxt->sflags |= SF_FAILED; 334 cxt->history_pos = cxt->last_found_line; 335 return -1; 336 } 337 338 /* Translate the keys we do something with to opcodes. */ 332 339 if (c >= 0 && _rl_keymap[c].type == ISFUNC) 333 340 { 334 341 f = _rl_keymap[c].function; -
readline-5.2
diff -Naur readline-5.2.orig/misc.c readline-5.2/misc.c
old new 146 146 rl_restore_prompt (); 147 147 rl_clear_message (); 148 148 RL_UNSETSTATE(RL_STATE_NUMERICARG); 149 if (key < 0) 150 return -1; 149 151 return (_rl_dispatch (key, _rl_keymap)); 150 152 } 151 153 } -
readline-5.2
diff -Naur readline-5.2.orig/readline.c readline-5.2/readline.c
old new 645 645 if ((cxt->flags & KSEQ_DISPATCHED) == 0) 646 646 { 647 647 nkey = _rl_subseq_getchar (cxt->okey); 648 if (nkey < 0) 649 { 650 _rl_abort_internal (); 651 return -1; 652 } 648 653 r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); 649 654 cxt->flags |= KSEQ_DISPATCHED; 650 655 } -
readline-5.2
diff -Naur readline-5.2.orig/text.c readline-5.2/text.c
old new 857 857 c = rl_read_key (); 858 858 RL_UNSETSTATE(RL_STATE_MOREINPUT); 859 859 860 if (c < 0) 861 return -1; 862 860 863 #if defined (HANDLE_SIGNALS) 861 864 if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) 862 865 _rl_restore_tty_signals (); … … 1520 1523 1521 1524 mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); 1522 1525 1526 if (mb_len <= 0) 1527 return -1; 1528 1523 1529 if (count < 0) 1524 1530 return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); 1525 1531 else … … 1536 1542 c = rl_read_key (); 1537 1543 RL_UNSETSTATE(RL_STATE_MOREINPUT); 1538 1544 1545 if (c < 0) 1546 return -1; 1547 1539 1548 if (count < 0) 1540 1549 return (_rl_char_search_internal (-count, bdir, c)); 1541 1550 else -
readline-5.2
diff -Naur readline-5.2.orig/vi_mode.c readline-5.2/vi_mode.c
old new 886 886 RL_SETSTATE(RL_STATE_MOREINPUT); 887 887 c = rl_read_key (); 888 888 RL_UNSETSTATE(RL_STATE_MOREINPUT); 889 890 if (c < 0) 891 { 892 *nextkey = 0; 893 return -1; 894 } 895 889 896 *nextkey = c; 890 897 891 898 if (!member (c, vi_motion)) … … 902 909 RL_SETSTATE(RL_STATE_MOREINPUT); 903 910 c = rl_read_key (); /* real command */ 904 911 RL_UNSETSTATE(RL_STATE_MOREINPUT); 912 if (c < 0) 913 { 914 *nextkey = 0; 915 return -1; 916 } 905 917 *nextkey = c; 906 918 } 907 919 else if (key == c && (key == 'd' || key == 'y' || key == 'c')) … … 1224 1236 _rl_vi_callback_char_search (data) 1225 1237 _rl_callback_generic_arg *data; 1226 1238 { 1239 int c; 1227 1240 #if defined (HANDLE_MULTIBYTE) 1228 _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);1241 c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); 1229 1242 #else 1230 1243 RL_SETSTATE(RL_STATE_MOREINPUT); 1231 _rl_vi_last_search_char= rl_read_key ();1244 c = rl_read_key (); 1232 1245 RL_UNSETSTATE(RL_STATE_MOREINPUT); 1233 1246 #endif 1234 1247 1248 if (c <= 0) 1249 return -1; 1250 1251 #if !defined (HANDLE_MULTIBYTE) 1252 _rl_vi_last_search_char = c; 1253 #endif 1254 1235 1255 _rl_callback_func = 0; 1236 1256 _rl_want_redisplay = 1; 1237 1257 … … 1247 1267 rl_vi_char_search (count, key) 1248 1268 int count, key; 1249 1269 { 1270 int c; 1250 1271 #if defined (HANDLE_MULTIBYTE) 1251 1272 static char *target; 1252 1273 static int tlen; … … 1293 1314 else 1294 1315 { 1295 1316 #if defined (HANDLE_MULTIBYTE) 1296 _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); 1317 c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); 1318 if (c <= 0) 1319 return -1; 1320 _rl_vi_last_search_mblen = c; 1297 1321 #else 1298 1322 RL_SETSTATE(RL_STATE_MOREINPUT); 1299 _rl_vi_last_search_char= rl_read_key ();1323 c = rl_read_key (); 1300 1324 RL_UNSETSTATE(RL_STATE_MOREINPUT); 1325 if (c < 0) 1326 return -1; 1327 _rl_vi_last_search_char = c; 1301 1328 #endif 1302 1329 } 1303 1330 } … … 1467 1494 c = rl_read_key (); 1468 1495 RL_UNSETSTATE(RL_STATE_MOREINPUT); 1469 1496 1497 if (c < 0) 1498 return -1; 1499 1470 1500 #if defined (HANDLE_MULTIBYTE) 1471 1501 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1472 1502 c = _rl_read_mbstring (c, mb, mlen); … … 1485 1515 1486 1516 _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); 1487 1517 1518 if (c < 0) 1519 return -1; 1520 1488 1521 _rl_callback_func = 0; 1489 1522 _rl_want_redisplay = 1; 1490 1523 … … 1516 1549 else 1517 1550 _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); 1518 1551 1552 if (c < 0) 1553 return -1; 1554 1519 1555 return (_rl_vi_change_char (count, c, mb)); 1520 1556 } 1521 1557 … … 1650 1686 ch = rl_read_key (); 1651 1687 RL_UNSETSTATE(RL_STATE_MOREINPUT); 1652 1688 1653 if (ch < 'a' || ch > 'z')1689 if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ 1654 1690 { 1655 1691 rl_ding (); 1656 1692 return -1; … … 1702 1738 rl_point = rl_mark; 1703 1739 return 0; 1704 1740 } 1705 else if (ch < 'a' || ch > 'z')1741 else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ 1706 1742 { 1707 1743 rl_ding (); 1708 1744 return -1;
Note:
See TracBrowser
for help on using the repository browser.