source:
patches/readline-5.2-fixes-5.patch@
8377528
Last change on this file since 8377528 was 44972a7, checked in by , 16 years ago | |
---|---|
|
|
File size: 21.3 KB |
-
readline-5.2
Submitted By: Jim Gifford (jim at linuxfromscratch dot org) Date: 12-20-2008 Initial Package Version: 5.2 Origin: Upstream Upstream Status: Applied Description: Contains all upstream patches up to 5.2-013 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 391 391 t = ++p; 392 392 local_prompt = expand_prompt (p, &prompt_visible_length, 393 393 &prompt_last_invisible, 394 (int *)NULL,394 &prompt_invis_chars_first_line, 395 395 &prompt_physical_chars); 396 396 c = *t; *t = '\0'; 397 397 /* The portion of the prompt string up to and including the 398 398 final newline is now null-terminated. */ 399 399 local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, 400 400 (int *)NULL, 401 &prompt_invis_chars_first_line,401 (int *)NULL, 402 402 (int *)NULL); 403 403 *t = c; 404 404 local_prompt_len = local_prompt ? strlen (local_prompt) : 0; … … 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() \ … … 898 910 second and subsequent lines start at inv_lbreaks[N], offset by 899 911 OFFSET (which has already been calculated above). */ 900 912 913 #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) 914 #define WRAP_OFFSET(line, offset) ((line == 0) \ 915 ? (offset ? INVIS_FIRST() : 0) \ 916 : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) 901 917 #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) 902 918 #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) 903 919 #define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l]) … … 932 948 _rl_last_c_pos != o_cpos && 933 949 _rl_last_c_pos > wrap_offset && 934 950 o_cpos < prompt_last_invisible) 935 _rl_last_c_pos -= wrap_offset; 951 _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ 952 else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && 953 (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && 954 cpos_adjusted == 0 && 955 _rl_last_c_pos != o_cpos && 956 _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) 957 _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); 936 958 937 959 /* If this is the line with the prompt, we might need to 938 960 compensate for invisible characters in the new line. Do … … 1036 1058 tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset; 1037 1059 else 1038 1060 tx = nleft; 1039 if ( _rl_last_c_pos > tx)1061 if (tx >= 0 && _rl_last_c_pos > tx) 1040 1062 { 1041 1063 _rl_backspace (_rl_last_c_pos - tx); /* XXX */ 1042 1064 _rl_last_c_pos = tx; … … 1192 1214 int current_line, omax, nmax, inv_botlin; 1193 1215 { 1194 1216 register char *ofd, *ols, *oe, *nfd, *nls, *ne; 1195 int temp, lendiff, wsatend, od, nd ;1217 int temp, lendiff, wsatend, od, nd, twidth, o_cpos; 1196 1218 int current_invis_chars; 1197 1219 int col_lendiff, col_temp; 1198 1220 #if defined (HANDLE_MULTIBYTE) … … 1208 1230 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1209 1231 temp = _rl_last_c_pos; 1210 1232 else 1211 temp = _rl_last_c_pos - W _OFFSET(_rl_last_v_pos, visible_wrap_offset);1233 temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); 1212 1234 if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode 1213 1235 && _rl_last_v_pos == current_line - 1) 1214 1236 { … … 1453 1475 _rl_last_c_pos = lendiff; 1454 1476 } 1455 1477 1478 o_cpos = _rl_last_c_pos; 1479 1456 1480 /* When this function returns, _rl_last_c_pos is correct, and an absolute 1457 1481 cursor postion in multibyte mode, but a buffer index when not in a 1458 1482 multibyte locale. */ … … 1462 1486 /* We need to indicate that the cursor position is correct in the presence of 1463 1487 invisible characters in the prompt string. Let's see if setting this when 1464 1488 we make sure we're at the end of the drawn prompt string works. */ 1465 if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) 1489 if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && 1490 (_rl_last_c_pos > 0 || o_cpos > 0) && 1491 _rl_last_c_pos == prompt_physical_chars) 1466 1492 cpos_adjusted = 1; 1467 1493 #endif 1468 1494 #endif … … 1506 1532 { 1507 1533 /* Non-zero if we're increasing the number of lines. */ 1508 1534 int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; 1535 /* If col_lendiff is > 0, implying that the new string takes up more 1536 screen real estate than the old, but lendiff is < 0, meaning that it 1537 takes fewer bytes, we need to just output the characters starting 1538 from the first difference. These will overwrite what is on the 1539 display, so there's no reason to do a smart update. This can really 1540 only happen in a multibyte environment. */ 1541 if (lendiff < 0) 1542 { 1543 _rl_output_some_chars (nfd, temp); 1544 _rl_last_c_pos += _rl_col_width (nfd, 0, temp); 1545 /* If nfd begins before any invisible characters in the prompt, 1546 adjust _rl_last_c_pos to account for wrap_offset and set 1547 cpos_adjusted to let the caller know. */ 1548 if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) 1549 { 1550 _rl_last_c_pos -= wrap_offset; 1551 cpos_adjusted = 1; 1552 } 1553 return; 1554 } 1509 1555 /* Sometimes it is cheaper to print the characters rather than 1510 1556 use the terminal's capabilities. If we're growing the number 1511 1557 of lines, make sure we actually cause the new line to wrap 1512 1558 around on auto-wrapping terminals. */ 1513 if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))1559 else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) 1514 1560 { 1515 1561 /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and 1516 1562 _rl_horizontal_scroll_mode == 1, inserting the characters with … … 1533 1579 } 1534 1580 else 1535 1581 { 1536 /* We have horizontal scrolling and we are not inserting at1537 the end. We have invisible characters in this line. This1538 is a dumb update. */1539 1582 _rl_output_some_chars (nfd, temp); 1540 1583 _rl_last_c_pos += col_temp; 1584 /* If nfd begins before any invisible characters in the prompt, 1585 adjust _rl_last_c_pos to account for wrap_offset and set 1586 cpos_adjusted to let the caller know. */ 1587 if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) 1588 { 1589 _rl_last_c_pos -= wrap_offset; 1590 cpos_adjusted = 1; 1591 } 1541 1592 return; 1542 1593 } 1543 1594 /* Copy (new) chars to screen from first diff to last match. */ … … 1545 1596 if ((temp - lendiff) > 0) 1546 1597 { 1547 1598 _rl_output_some_chars (nfd + lendiff, temp - lendiff); 1548 #if 11549 1599 /* XXX -- this bears closer inspection. Fixes a redisplay bug 1550 1600 reported against bash-3.0-alpha by Andreas Schwab involving 1551 1601 multibyte characters and prompt strings with invisible 1552 1602 characters, but was previously disabled. */ 1553 _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); 1554 #else 1555 _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); 1556 #endif 1603 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1604 twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); 1605 else 1606 twidth = temp - lendiff; 1607 _rl_last_c_pos += twidth; 1557 1608 } 1558 1609 } 1559 1610 else … … 1586 1637 temp = nls - nfd; 1587 1638 if (temp > 0) 1588 1639 { 1640 /* If nfd begins at the prompt, or before the invisible 1641 characters in the prompt, we need to adjust _rl_last_c_pos 1642 in a multibyte locale to account for the wrap offset and 1643 set cpos_adjusted accordingly. */ 1589 1644 _rl_output_some_chars (nfd, temp); 1590 _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; 1645 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1646 { 1647 _rl_last_c_pos += _rl_col_width (nfd, 0, temp); 1648 if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) 1649 { 1650 _rl_last_c_pos -= wrap_offset; 1651 cpos_adjusted = 1; 1652 } 1653 } 1654 else 1655 _rl_last_c_pos += temp; 1591 1656 } 1592 1657 } 1593 1658 /* Otherwise, print over the existing material. */ … … 1595 1660 { 1596 1661 if (temp > 0) 1597 1662 { 1663 /* If nfd begins at the prompt, or before the invisible 1664 characters in the prompt, we need to adjust _rl_last_c_pos 1665 in a multibyte locale to account for the wrap offset and 1666 set cpos_adjusted accordingly. */ 1598 1667 _rl_output_some_chars (nfd, temp); 1599 1668 _rl_last_c_pos += col_temp; /* XXX */ 1669 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1670 { 1671 if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) 1672 { 1673 _rl_last_c_pos -= wrap_offset; 1674 cpos_adjusted = 1; 1675 } 1676 } 1600 1677 } 1601 1678 lendiff = (oe - old) - (ne - new); 1602 1679 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) … … 1721 1798 int woff; /* number of invisible chars on current line */ 1722 1799 int cpos, dpos; /* current and desired cursor positions */ 1723 1800 1724 woff = W _OFFSET (_rl_last_v_pos, wrap_offset);1801 woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); 1725 1802 cpos = _rl_last_c_pos; 1726 1803 #if defined (HANDLE_MULTIBYTE) 1727 1804 /* If we have multibyte characters, NEW is indexed by the buffer point in … … 1732 1809 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) 1733 1810 { 1734 1811 dpos = _rl_col_width (data, 0, new); 1735 if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ 1812 /* Use NEW when comparing against the last invisible character in the 1813 prompt string, since they're both buffer indices and DPOS is a 1814 desired display position. */ 1815 if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ 1816 (prompt_physical_chars > _rl_screenwidth && 1817 _rl_last_v_pos == prompt_last_screen_line && 1818 wrap_offset != woff && 1819 new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) 1736 1820 { 1737 1821 dpos -= woff; 1738 1822 /* Since this will be assigned to _rl_last_c_pos at the end (more … … 2380 2464 2381 2465 if (end <= start) 2382 2466 return 0; 2467 if (MB_CUR_MAX == 1 || rl_byte_oriented) 2468 return (end - start); 2383 2469 2384 2470 memset (&ps, 0, sizeof (mbstate_t)); 2385 2471 -
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); … … 151 154 { 152 155 pop_index--; 153 156 if (pop_index < 0) 154 pop_index = ibuffer_len - 1;157 pop_index = ibuffer_len; 155 158 ibuffer[pop_index] = key; 156 159 return (1); 157 160 } … … 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 } -
support/shobj-conf
diff -Naur readline-5.2.orig/support/shobj-conf readline-5.2/support/shobj-conf
old new 10 10 # Chet Ramey 11 11 # chet@po.cwru.edu 12 12 13 # Copyright (C) 1996-200 2Free Software Foundation, Inc.13 # Copyright (C) 1996-2007 Free Software Foundation, Inc. 14 14 # 15 15 # This program is free software; you can redistribute it and/or modify 16 16 # it under the terms of the GNU General Public License as published by … … 114 114 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 115 115 ;; 116 116 117 freebsd2* | netbsd*)117 freebsd2*) 118 118 SHOBJ_CFLAGS=-fpic 119 119 SHOBJ_LD=ld 120 120 SHOBJ_LDFLAGS='-x -Bshareable' … … 125 125 126 126 # FreeBSD-3.x ELF 127 127 freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) 128 SHOBJ_CFLAGS=-f pic128 SHOBJ_CFLAGS=-fPIC 129 129 SHOBJ_LD='${CC}' 130 130 131 131 if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then … … 142 142 ;; 143 143 144 144 # Darwin/MacOS X 145 darwin 8*)145 darwin[89]*) 146 146 SHOBJ_STATUS=supported 147 147 SHLIB_STATUS=supported 148 148 … … 153 153 SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)' 154 154 SHLIB_LIBSUFF='dylib' 155 155 156 SHOBJ_LDFLAGS='- undefined dynamic_lookup'156 SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`' 157 157 SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' 158 158 159 159 SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 … … 171 171 SHLIB_LIBSUFF='dylib' 172 172 173 173 case "${host_os}" in 174 darwin[78 ]*) SHOBJ_LDFLAGS=''174 darwin[789]*) SHOBJ_LDFLAGS='' 175 175 SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' 176 176 ;; 177 177 *) SHOBJ_LDFLAGS='-dynamic' … … 182 182 SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 183 183 ;; 184 184 185 openbsd* )185 openbsd*|netbsd*) 186 186 SHOBJ_CFLAGS=-fPIC 187 187 SHOBJ_LD='${CC}' 188 188 SHOBJ_LDFLAGS='-shared' … … 247 247 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 248 248 ;; 249 249 250 aix4.[2-9]*-*gcc* ) # lightly tested by jik@cisco.com250 aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com 251 251 SHOBJ_CFLAGS=-fpic 252 252 SHOBJ_LD='ld' 253 253 SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' … … 258 258 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 259 259 ;; 260 260 261 aix4.[2-9]* )261 aix4.[2-9]*|aix[5-9].*) 262 262 SHOBJ_CFLAGS=-K 263 263 SHOBJ_LD='ld' 264 264 SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' … … 329 329 SHOBJ_LD='${CC}' 330 330 # if you have problems linking here, moving the `-Wl,+h,$@' from 331 331 # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work 332 SHOBJ_LDFLAGS='-shared - Wl,-b -Wl,+s'332 SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' 333 333 334 334 SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' 335 335 SHLIB_LIBSUFF='sl' -
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.