- update to 6.0

- include patches 001, 002, 003
This commit is contained in:
Miroslav Lichvar 2009-07-14 16:46:14 +00:00
parent fe45e1c0f6
commit a08828a1d3
20 changed files with 241 additions and 1068 deletions

View File

@ -1 +1 @@
readline-5.2.tar.gz
readline-6.0.tar.gz

View File

@ -1,30 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-001
Bug-Reported-by: ebb9@byu.net
Bug-Reference-ID: <45540862.9030900@byu.net>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html
http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html
Bug-Description:
In some cases, code that is intended to be used in the presence of multibyte
characters is called when no such characters are present, leading to incorrect
display position calculations and incorrect redisplay.
Patch:
*** ../readline-5.2/display.c Thu Sep 14 14:20:12 2006
--- display.c Mon Nov 13 17:55:57 2006
***************
*** 2381,2384 ****
--- 2409,2414 ----
if (end <= start)
return 0;
+ if (MB_CUR_MAX == 1 || rl_byte_oriented)
+ return (end - start);
memset (&ps, 0, sizeof (mbstate_t));

View File

@ -1,49 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-002
Bug-Reported-by: Magnus Svensson <msvensson@mysql.com>
Bug-Reference-ID: <45BDC44D.80609@mysql.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html
Bug-Description:
Readline neglects to reallocate the array it uses to keep track of wrapped
screen lines when increasing its size. This will eventually result in
segmentation faults when given sufficiently long input.
Patch:
*** ../readline-5.2-patched/display.c Thu Sep 14 14:20:12 2006
--- display.c Fri Feb 2 20:23:17 2007
***************
*** 561,574 ****
--- 561,586 ----
wrap_offset = prompt_invis_chars_first_line = 0;
}
+ #if defined (HANDLE_MULTIBYTE)
#define CHECK_INV_LBREAKS() \
do { \
if (newlines >= (inv_lbsize - 2)) \
{ \
inv_lbsize *= 2; \
inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
} \
} while (0)
+ #else
+ #define CHECK_INV_LBREAKS() \
+ do { \
+ if (newlines >= (inv_lbsize - 2)) \
+ { \
+ inv_lbsize *= 2; \
+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+ } \
+ } while (0)
+ #endif /* HANDLE_MULTIBYTE */
#if defined (HANDLE_MULTIBYTE)
#define CHECK_LPOS() \

View File

@ -1,37 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-003
Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
Bug-Reference-ID: <1171795523.8021.18.camel@localhost>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html
Bug-Description:
When moving the cursor, bash sometimes misplaces the cursor when the prompt
contains two or more multibyte characters. The particular circumstance that
uncovered the problem was having the (multibyte) current directory name in
the prompt string.
Patch:
*** ../readline-5.2.2/display.c Fri Jan 19 13:34:50 2007
--- display.c Sat Mar 10 17:25:44 2007
***************
*** 1745,1749 ****
{
dpos = _rl_col_width (data, 0, new);
! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */
{
dpos -= woff;
--- 1745,1752 ----
{
dpos = _rl_col_width (data, 0, new);
! /* Use NEW when comparing against the last invisible character in the
! prompt string, since they're both buffer indices and DPOS is a
! desired display position. */
! if (new > prompt_last_invisible) /* XXX - don't use woff here */
{
dpos -= woff;

View File

@ -1,70 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-004
Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
Bug-Reference-ID: <1173636022.7039.36.camel@localhost>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html
Bug-Description:
When restoring the original prompt after finishing an incremental search,
bash sometimes places the cursor incorrectly if the primary prompt contains
invisible characters.
Patch:
*** ../readline-5.2.3/display.c Fri Apr 20 13:30:16 2007
--- display.c Fri Apr 20 15:17:01 2007
***************
*** 1599,1604 ****
if (temp > 0)
{
_rl_output_some_chars (nfd, temp);
! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
}
}
--- 1599,1618 ----
if (temp > 0)
{
+ /* If nfd begins at the prompt, or before the invisible
+ characters in the prompt, we need to adjust _rl_last_c_pos
+ in a multibyte locale to account for the wrap offset and
+ set cpos_adjusted accordingly. */
_rl_output_some_chars (nfd, temp);
! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
! {
! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
! {
! _rl_last_c_pos -= wrap_offset;
! cpos_adjusted = 1;
! }
! }
! else
! _rl_last_c_pos += temp;
}
}
***************
*** 1608,1613 ****
--- 1622,1639 ----
if (temp > 0)
{
+ /* If nfd begins at the prompt, or before the invisible
+ characters in the prompt, we need to adjust _rl_last_c_pos
+ in a multibyte locale to account for the wrap offset and
+ set cpos_adjusted accordingly. */
_rl_output_some_chars (nfd, temp);
_rl_last_c_pos += col_temp; /* XXX */
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
+ {
+ _rl_last_c_pos -= wrap_offset;
+ cpos_adjusted = 1;
+ }
+ }
}
lendiff = (oe - old) - (ne - new);

View File

@ -1,328 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-005
Bug-Reported-by: Thomas Loeber <ifp@loeber1.de>
Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html
Bug-Description:
When rl_read_key returns -1, indicating that readline's controlling terminal
has been invalidated for some reason (e.g., receiving a SIGHUP), the error
status was not reported correctly to the caller. This could cause input
loops.
Patch:
*** ../readline-5.2/complete.c Fri Jul 28 11:35:49 2006
--- complete.c Tue Mar 13 08:50:16 2007
***************
*** 429,433 ****
if (c == 'n' || c == 'N' || c == RUBOUT)
return (0);
! if (c == ABORT_CHAR)
_rl_abort_internal ();
if (for_pager && (c == NEWLINE || c == RETURN))
--- 440,444 ----
if (c == 'n' || c == 'N' || c == RUBOUT)
return (0);
! if (c == ABORT_CHAR || c < 0)
_rl_abort_internal ();
if (for_pager && (c == NEWLINE || c == RETURN))
*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006
--- input.c Wed May 2 16:07:59 2007
***************
*** 514,518 ****
int size;
{
! int mb_len = 0;
size_t mbchar_bytes_length;
wchar_t wc;
--- 522,526 ----
int size;
{
! int mb_len, c;
size_t mbchar_bytes_length;
wchar_t wc;
***************
*** 521,531 ****
memset(&ps, 0, sizeof (mbstate_t));
memset(&ps_back, 0, sizeof (mbstate_t));
!
while (mb_len < size)
{
RL_SETSTATE(RL_STATE_MOREINPUT);
! mbchar[mb_len++] = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
if (mbchar_bytes_length == (size_t)(-1))
--- 529,545 ----
memset(&ps, 0, sizeof (mbstate_t));
memset(&ps_back, 0, sizeof (mbstate_t));
!
! mb_len = 0;
while (mb_len < size)
{
RL_SETSTATE(RL_STATE_MOREINPUT);
! c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (c < 0)
+ break;
+
+ mbchar[mb_len++] = c;
+
mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
if (mbchar_bytes_length == (size_t)(-1))
***************
*** 565,569 ****
c = first;
memset (mb, 0, mlen);
! for (i = 0; i < mlen; i++)
{
mb[i] = (char)c;
--- 579,583 ----
c = first;
memset (mb, 0, mlen);
! for (i = 0; c >= 0 && i < mlen; i++)
{
mb[i] = (char)c;
*** ../readline-5.2/isearch.c Mon Dec 26 17:18:53 2005
--- isearch.c Fri Mar 9 14:30:59 2007
***************
*** 328,333 ****
f = (rl_command_func_t *)NULL;
!
! /* Translate the keys we do something with to opcodes. */
if (c >= 0 && _rl_keymap[c].type == ISFUNC)
{
--- 328,340 ----
f = (rl_command_func_t *)NULL;
!
! if (c < 0)
! {
! cxt->sflags |= SF_FAILED;
! cxt->history_pos = cxt->last_found_line;
! return -1;
! }
!
! /* Translate the keys we do something with to opcodes. */
if (c >= 0 && _rl_keymap[c].type == ISFUNC)
{
*** ../readline-5.2/misc.c Mon Dec 26 17:20:46 2005
--- misc.c Fri Mar 9 14:44:11 2007
***************
*** 147,150 ****
--- 147,152 ----
rl_clear_message ();
RL_UNSETSTATE(RL_STATE_NUMERICARG);
+ if (key < 0)
+ return -1;
return (_rl_dispatch (key, _rl_keymap));
}
*** ../readline-5.2/readline.c Wed Aug 16 15:00:36 2006
--- readline.c Fri Mar 9 14:47:24 2007
***************
*** 646,649 ****
--- 669,677 ----
{
nkey = _rl_subseq_getchar (cxt->okey);
+ if (nkey < 0)
+ {
+ _rl_abort_internal ();
+ return -1;
+ }
r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
cxt->flags |= KSEQ_DISPATCHED;
*** ../readline-5.2/text.c Fri Jul 28 11:55:27 2006
--- text.c Sun Mar 25 13:41:38 2007
***************
*** 858,861 ****
--- 864,870 ----
RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (c < 0)
+ return -1;
+
#if defined (HANDLE_SIGNALS)
if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
***************
*** 1521,1524 ****
--- 1530,1536 ----
mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);
+ if (mb_len <= 0)
+ return -1;
+
if (count < 0)
return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
***************
*** 1537,1540 ****
--- 1549,1555 ----
RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (c < 0)
+ return -1;
+
if (count < 0)
return (_rl_char_search_internal (-count, bdir, c));
*** ../readline-5.2/vi_mode.c Sat Jul 29 16:42:28 2006
--- vi_mode.c Fri Mar 9 15:02:11 2007
***************
*** 887,890 ****
--- 887,897 ----
c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+ if (c < 0)
+ {
+ *nextkey = 0;
+ return -1;
+ }
+
*nextkey = c;
***************
*** 903,906 ****
--- 910,918 ----
c = rl_read_key (); /* real command */
RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (c < 0)
+ {
+ *nextkey = 0;
+ return -1;
+ }
*nextkey = c;
}
***************
*** 1225,1236 ****
_rl_callback_generic_arg *data;
{
#if defined (HANDLE_MULTIBYTE)
! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
#else
RL_SETSTATE(RL_STATE_MOREINPUT);
! _rl_vi_last_search_char = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
#endif
_rl_callback_func = 0;
_rl_want_redisplay = 1;
--- 1243,1262 ----
_rl_callback_generic_arg *data;
{
+ int c;
#if defined (HANDLE_MULTIBYTE)
! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
#else
RL_SETSTATE(RL_STATE_MOREINPUT);
! c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
#endif
+ if (c <= 0)
+ return -1;
+
+ #if !defined (HANDLE_MULTIBYTE)
+ _rl_vi_last_search_char = c;
+ #endif
+
_rl_callback_func = 0;
_rl_want_redisplay = 1;
***************
*** 1248,1251 ****
--- 1274,1278 ----
int count, key;
{
+ int c;
#if defined (HANDLE_MULTIBYTE)
static char *target;
***************
*** 1294,1302 ****
{
#if defined (HANDLE_MULTIBYTE)
! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
#else
RL_SETSTATE(RL_STATE_MOREINPUT);
! _rl_vi_last_search_char = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
#endif
}
--- 1321,1335 ----
{
#if defined (HANDLE_MULTIBYTE)
! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
! if (c <= 0)
! return -1;
! _rl_vi_last_search_mblen = c;
#else
RL_SETSTATE(RL_STATE_MOREINPUT);
! c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (c < 0)
+ return -1;
+ _rl_vi_last_search_char = c;
#endif
}
***************
*** 1468,1471 ****
--- 1501,1507 ----
RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (c < 0)
+ return -1;
+
#if defined (HANDLE_MULTIBYTE)
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
***************
*** 1486,1489 ****
--- 1522,1528 ----
_rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+ if (c < 0)
+ return -1;
+
_rl_callback_func = 0;
_rl_want_redisplay = 1;
***************
*** 1517,1520 ****
--- 1556,1562 ----
_rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+ if (c < 0)
+ return -1;
+
return (_rl_vi_change_char (count, c, mb));
}
***************
*** 1651,1655 ****
RL_UNSETSTATE(RL_STATE_MOREINPUT);
! if (ch < 'a' || ch > 'z')
{
rl_ding ();
--- 1693,1697 ----
RL_UNSETSTATE(RL_STATE_MOREINPUT);
! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */
{
rl_ding ();
***************
*** 1703,1707 ****
return 0;
}
! else if (ch < 'a' || ch > 'z')
{
rl_ding ();
--- 1745,1749 ----
return 0;
}
! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */
{
rl_ding ();

View File

@ -1,62 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-006
Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
Bug-Reference-ID: <1178376645.9063.25.camel@localhost>
Bug-Reference-URL: http://bugs.gentoo.org/177095
Bug-Description:
The readline display code miscalculated the screen position when performing
a redisplay in which the new text occupies more screen space that the old,
but takes fewer bytes to do so (e.g., when replacing a shorter string
containing multibyte characters with a longer one containing only ASCII).
Patch:
*** ../readline-5.2/display.c Thu Apr 26 11:38:22 2007
--- display.c Thu Jul 12 23:10:10 2007
***************
*** 1519,1527 ****
/* Non-zero if we're increasing the number of lines. */
int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
/* Sometimes it is cheaper to print the characters rather than
use the terminal's capabilities. If we're growing the number
of lines, make sure we actually cause the new line to wrap
around on auto-wrapping terminals. */
! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
{
/* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
--- 1568,1596 ----
/* Non-zero if we're increasing the number of lines. */
int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
+ /* If col_lendiff is > 0, implying that the new string takes up more
+ screen real estate than the old, but lendiff is < 0, meaning that it
+ takes fewer bytes, we need to just output the characters starting
+ from the first difference. These will overwrite what is on the
+ display, so there's no reason to do a smart update. This can really
+ only happen in a multibyte environment. */
+ if (lendiff < 0)
+ {
+ _rl_output_some_chars (nfd, temp);
+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
+ /* If nfd begins before any invisible characters in the prompt,
+ adjust _rl_last_c_pos to account for wrap_offset and set
+ cpos_adjusted to let the caller know. */
+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
+ {
+ _rl_last_c_pos -= wrap_offset;
+ cpos_adjusted = 1;
+ }
+ return;
+ }
/* Sometimes it is cheaper to print the characters rather than
use the terminal's capabilities. If we're growing the number
of lines, make sure we actually cause the new line to wrap
around on auto-wrapping terminals. */
! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
{
/* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and

View File

@ -1,65 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-007
Bug-Reported-by: Tom Bjorkholm <tom.bjorkholm@ericsson.com>
Bug-Reference-ID: <AEA1A32F001C6B4F98614B5B80D7647D01C075E9@esealmw115.eemea.ericsson.se>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html
Bug-Description:
An off-by-one error in readline's input buffering caused readline to drop
each 511th character of buffered input (e.g., when pasting a large amount
of data into a terminal window).
Patch:
*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006
--- input.c Tue Jul 17 09:24:21 2007
***************
*** 134,139 ****
*key = ibuffer[pop_index++];
!
if (pop_index >= ibuffer_len)
pop_index = 0;
--- 134,142 ----
*key = ibuffer[pop_index++];
! #if 0
if (pop_index >= ibuffer_len)
+ #else
+ if (pop_index > ibuffer_len)
+ #endif
pop_index = 0;
***************
*** 251,255 ****
{
k = (*rl_getc_function) (rl_instream);
! rl_stuff_char (k);
if (k == NEWLINE || k == RETURN)
break;
--- 254,259 ----
{
k = (*rl_getc_function) (rl_instream);
! if (rl_stuff_char (k) == 0)
! break; /* some problem; no more room */
if (k == NEWLINE || k == RETURN)
break;
***************
*** 374,378 ****
--- 378,386 ----
}
ibuffer[push_index++] = key;
+ #if 0
if (push_index >= ibuffer_len)
+ #else
+ if (push_index > ibuffer_len)
+ #endif
push_index = 0;

View File

@ -1,70 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-008
Bug-Reported-by: dAniel hAhler <ubuntu@thequod.de>
Bug-Reference-ID: <4702ED8A.5000503@thequod.de>
Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938
Bug-Description:
When updating the display after displaying, for instance, a list of possible
completions, readline will place the cursor at the wrong position if the
prompt contains invisible characters and a newline.
Patch:
*** ../readline-5.2-patched/display.c Mon Aug 6 14:26:29 2007
--- display.c Wed Oct 10 22:43:58 2007
***************
*** 1049,1053 ****
else
tx = nleft;
! if (_rl_last_c_pos > tx)
{
_rl_backspace (_rl_last_c_pos - tx); /* XXX */
--- 1049,1053 ----
else
tx = nleft;
! if (tx >= 0 && _rl_last_c_pos > tx)
{
_rl_backspace (_rl_last_c_pos - tx); /* XXX */
***************
*** 1205,1209 ****
{
register char *ofd, *ols, *oe, *nfd, *nls, *ne;
! int temp, lendiff, wsatend, od, nd;
int current_invis_chars;
int col_lendiff, col_temp;
--- 1205,1209 ----
{
register char *ofd, *ols, *oe, *nfd, *nls, *ne;
! int temp, lendiff, wsatend, od, nd, o_cpos;
int current_invis_chars;
int col_lendiff, col_temp;
***************
*** 1466,1469 ****
--- 1466,1471 ----
}
+ o_cpos = _rl_last_c_pos;
+
/* When this function returns, _rl_last_c_pos is correct, and an absolute
cursor postion in multibyte mode, but a buffer index when not in a
***************
*** 1475,1479 ****
invisible characters in the prompt string. Let's see if setting this when
we make sure we're at the end of the drawn prompt string works. */
! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars)
cpos_adjusted = 1;
#endif
--- 1477,1483 ----
invisible characters in the prompt string. Let's see if setting this when
we make sure we're at the end of the drawn prompt string works. */
! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 &&
! (_rl_last_c_pos > 0 || o_cpos > 0) &&
! _rl_last_c_pos == prompt_physical_chars)
cpos_adjusted = 1;
#endif

View File

@ -1,45 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-009
Bug-Reported-by: dAniel hAhler <ubuntu@thequod.de>
Bug-Reference-ID:
Bug-Reference-URL:
Bug-Description:
Under some circumstances, readline will incorrectly display a prompt string
containing invisible characters after the final newline.
Patch:
*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400
--- display.c 2007-11-10 17:51:29.000000000 -0500
***************
*** 392,396 ****
local_prompt = expand_prompt (p, &prompt_visible_length,
&prompt_last_invisible,
! (int *)NULL,
&prompt_physical_chars);
c = *t; *t = '\0';
--- 420,424 ----
local_prompt = expand_prompt (p, &prompt_visible_length,
&prompt_last_invisible,
! &prompt_invis_chars_first_line,
&prompt_physical_chars);
c = *t; *t = '\0';
***************
*** 399,403 ****
local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
(int *)NULL,
! &prompt_invis_chars_first_line,
(int *)NULL);
*t = c;
--- 427,431 ----
local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
(int *)NULL,
! (int *)NULL,
(int *)NULL);
*t = c;

View File

@ -1,47 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-010
Bug-Reported-by: Miroslav Lichvar <mlichvar@redhat.com>
Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html
Bug-Description:
In certain cases when outputting characters at the end of the line,
e.g., when displaying the prompt string, readline positions the cursor
incorrectly if the prompt string contains invisible characters and the
text being drawn begins before the last invisible character in the line.
Patch:
*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400
--- display.c 2007-11-10 17:51:29.000000000 -0500
***************
*** 1566,1574 ****
else
{
- /* We have horizontal scrolling and we are not inserting at
- the end. We have invisible characters in this line. This
- is a dumb update. */
_rl_output_some_chars (nfd, temp);
_rl_last_c_pos += col_temp;
return;
}
--- 1619,1632 ----
else
{
_rl_output_some_chars (nfd, temp);
_rl_last_c_pos += col_temp;
+ /* If nfd begins before any invisible characters in the prompt,
+ adjust _rl_last_c_pos to account for wrap_offset and set
+ cpos_adjusted to let the caller know. */
+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
+ {
+ _rl_last_c_pos -= wrap_offset;
+ cpos_adjusted = 1;
+ }
return;
}

View File

@ -1,32 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 5.2
Patch-ID: readline52-011
Bug-Reported-by: Uwe Doering <gemini@geminix.org>
Bug-Reference-ID: <46F3DD72.2090801@geminix.org>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html
Bug-Description:
There is an off-by-one error in the code that buffers characters received
very quickly in succession, causing characters to be dropped.
Patch:
*** ../readline-5.2-patched/input.c 2007-08-25 13:47:10.000000000 -0400
--- input.c 2007-10-12 22:55:25.000000000 -0400
***************
*** 155,159 ****
pop_index--;
if (pop_index < 0)
! pop_index = ibuffer_len - 1;
ibuffer[pop_index] = key;
return (1);
--- 155,159 ----
pop_index--;
if (pop_index < 0)
! pop_index = ibuffer_len;
ibuffer[pop_index] = key;
return (1);

View File

@ -1,164 +0,0 @@
GDB PR 544: gdb.cp/annota2.exp and gdb.cp/annota3.exp sometimes FAIL with:
FAIL: gdb.cp/annota3.exp: annotate-quit (pattern 1)
One can put `sleep (1)' at the end of _RL_OUTPUT_SOME_CHARS and type
p 1<enter><ctrl-c>
to abort the prompt printing. Before the patch:
(gdb) p 1
$1 = 1
Quit) (gdb)
(gdb) _
After the patch:
[bash]jkratoch@host0.dyn.jankratochvil.net:/home/jkratoch/redhat/sources/readline# ../gdb/gdb -nx -silent(gdb) p 1
$1 = 1
(gdb) Quit
(gdb) _
The readline patch posted upstream:
http://sourceware.org/ml/gdb-patches/2008-03/msg00317.html
On Fri, 21 Mar 2008 19:37:31 +0100, Chet Ramey wrote:
> I will add something like your block_sigint/release_sigint changes around
> the guts of rl_redisplay. That's the right thing to do anyway. It will
> probably not come out as a patch for readline-5.2; you can use your
> current patch (though the names will change to _rl_block_sigint and
> _rl_release_sigint -- fair warning).
Application cannot easily supply its own RL_REDISPLAY_FUNCTION as a custom
function there changes the readline behavior:
http://sourceware.org/ml/gdb-patches/2008-03/msg00340.html
BLOCK_SIGINT / RELEASE_SIGINT: Make it public and prefix it by `_rl_'.
RL_REDISPLAY: Wrap it by _RL_BLOCK_SIGINT / _RL_RELEASE_SIGINT.
--- readline-5.2-orig/display.c 2008-03-23 20:52:12.000000000 +0100
+++ readline-5.2/display.c 2008-03-23 20:56:58.000000000 +0100
@@ -472,6 +472,10 @@ rl_redisplay ()
if (!readline_echoing_p)
return;
+ /* Signals are blocked through this function as the global data structures
+ could get corrupted upon modifications from an invoked signal handler. */
+ _rl_block_sigint ();
+
if (!rl_display_prompt)
rl_display_prompt = "";
@@ -1180,6 +1184,8 @@ rl_redisplay ()
else
visible_wrap_offset = wrap_offset;
}
+
+ _rl_release_sigint ();
}
/* PWP: update_line() is based on finding the middle difference of each
--- readline-5.2-orig/rltty.c 2005-12-26 23:21:50.000000000 +0100
+++ readline-5.2/rltty.c 2008-03-23 20:57:26.000000000 +0100
@@ -52,8 +52,8 @@ extern int errno;
rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal;
rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal;
-static void block_sigint PARAMS((void));
-static void release_sigint PARAMS((void));
+void _rl_block_sigint PARAMS((void));
+void _rl_release_sigint PARAMS((void));
static void set_winsize PARAMS((int));
@@ -74,9 +74,9 @@ static int sigint_oldmask;
static int sigint_blocked;
/* Cause SIGINT to not be delivered until the corresponding call to
- release_sigint(). */
-static void
-block_sigint ()
+ _rl_release_sigint(). */
+void
+_rl_block_sigint ()
{
if (sigint_blocked)
return;
@@ -100,8 +100,8 @@ block_sigint ()
}
/* Allow SIGINT to be delivered. */
-static void
-release_sigint ()
+void
+_rl_release_sigint ()
{
if (sigint_blocked == 0)
return;
@@ -663,7 +663,7 @@ rl_prep_terminal (meta_flag)
return;
/* Try to keep this function from being INTerrupted. */
- block_sigint ();
+ _rl_block_sigint ();
tty = fileno (rl_instream);
@@ -676,7 +676,7 @@ rl_prep_terminal (meta_flag)
if (errno == ENOTTY)
#endif
readline_echoing_p = 1; /* XXX */
- release_sigint ();
+ _rl_release_sigint ();
return;
}
@@ -711,7 +711,7 @@ rl_prep_terminal (meta_flag)
if (set_tty_settings (tty, &tio) < 0)
{
- release_sigint ();
+ _rl_release_sigint ();
return;
}
@@ -722,7 +722,7 @@ rl_prep_terminal (meta_flag)
terminal_prepped = 1;
RL_SETSTATE(RL_STATE_TERMPREPPED);
- release_sigint ();
+ _rl_release_sigint ();
}
/* Restore the terminal's normal settings and modes. */
@@ -735,7 +735,7 @@ rl_deprep_terminal ()
return;
/* Try to keep this function from being interrupted. */
- block_sigint ();
+ _rl_block_sigint ();
tty = fileno (rl_instream);
@@ -746,14 +746,14 @@ rl_deprep_terminal ()
if (set_tty_settings (tty, &otio) < 0)
{
- release_sigint ();
+ _rl_release_sigint ();
return;
}
terminal_prepped = 0;
RL_UNSETSTATE(RL_STATE_TERMPREPPED);
- release_sigint ();
+ _rl_release_sigint ();
}
#endif /* !NO_TTY_DRIVER */
--- readline-5.2-orig/rltty.h 2003-02-01 04:43:11.000000000 +0100
+++ readline-5.2/rltty.h 2008-03-23 20:57:30.000000000 +0100
@@ -79,4 +79,7 @@ typedef struct _rl_tty_chars {
unsigned char t_status;
} _RL_TTY_CHARS;
+extern void _rl_block_sigint PARAMS((void));
+extern void _rl_release_sigint PARAMS((void));
+
#endif /* _RLTTY_H_ */

View File

@ -1,38 +0,0 @@
--- readline-5.2/support/shlib-install.shlib 2006-01-03 20:06:27.000000000 +0100
+++ readline-5.2/support/shlib-install 2006-11-13 13:51:02.000000000 +0100
@@ -71,7 +71,7 @@
case "$host_os" in
hpux*|darwin*|macosx*|linux*)
if [ -z "$uninstall" ]; then
- chmod 555 ${INSTALLDIR}/${LIBNAME}
+ chmod 755 ${INSTALLDIR}/${LIBNAME}
fi ;;
cygwin*)
IMPLIBNAME=`echo ${LIBNAME} \
--- readline-5.2/support/shobj-conf.shlib 2006-04-11 15:15:43.000000000 +0200
+++ readline-5.2/support/shobj-conf 2007-03-15 14:11:36.000000000 +0100
@@ -108,10 +108,11 @@
linux*-*|gnu*-*|k*bsd*-gnu-*)
SHOBJ_CFLAGS=-fPIC
SHOBJ_LD='${CC}'
- SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
+ SHOBJ_LDFLAGS='$(CFLAGS) -shared -Wl,-soname,$@'
- SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
+ SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
+ SHLIB_LIBS='-ltinfo'
;;
freebsd2* | netbsd*)
--- readline-5.2/shlib/Makefile.in.shlib 2005-08-12 05:56:10.000000000 +0200
+++ readline-5.2/shlib/Makefile.in 2007-11-05 18:59:14.000000000 +0100
@@ -168,7 +168,7 @@ $(SHARED_READLINE): $(SHARED_OBJ)
$(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so
$(RM) $@
- $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so $(SHLIB_LIBS)
+ $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so
# Since tilde.c is shared between readline and bash, make sure we compile
# it with the right flags when it's built as part of readline

41
readline-6.0-shlib.patch Normal file
View File

@ -0,0 +1,41 @@
diff -up readline-6.0/shlib/Makefile.in.shlib readline-6.0/shlib/Makefile.in
--- readline-6.0/shlib/Makefile.in.shlib 2009-01-06 18:03:22.000000000 +0100
+++ readline-6.0/shlib/Makefile.in 2009-07-02 14:36:15.000000000 +0200
@@ -169,7 +169,7 @@ $(SHARED_READLINE): $(SHARED_OBJ)
$(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so
$(RM) $@
- $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so $(SHLIB_LIBS)
+ $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so
# Since tilde.c is shared between readline and bash, make sure we compile
# it with the right flags when it's built as part of readline
diff -up readline-6.0/support/shlib-install.shlib readline-6.0/support/shlib-install
--- readline-6.0/support/shlib-install.shlib 2008-07-20 01:16:05.000000000 +0200
+++ readline-6.0/support/shlib-install 2009-07-02 14:37:59.000000000 +0200
@@ -71,7 +71,7 @@ fi
case "$host_os" in
hpux*|darwin*|macosx*|linux*)
if [ -z "$uninstall" ]; then
- chmod 555 ${INSTALLDIR}/${LIBNAME}
+ chmod 755 ${INSTALLDIR}/${LIBNAME}
fi ;;
cygwin*|mingw*)
IMPLIBNAME=`echo ${LIBNAME} \
diff -up readline-6.0/support/shobj-conf.shlib readline-6.0/support/shobj-conf
--- readline-6.0/support/shobj-conf.shlib 2009-01-04 20:32:42.000000000 +0100
+++ readline-6.0/support/shobj-conf 2009-07-02 14:40:06.000000000 +0200
@@ -112,10 +112,11 @@ sunos5*|solaris2*)
linux*-*|gnu*-*|k*bsd*-gnu-*)
SHOBJ_CFLAGS=-fPIC
SHOBJ_LD='${CC}'
- SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
+ SHOBJ_LDFLAGS='$(CFLAGS) -shared -Wl,-soname,$@'
- SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
+ SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
+ SHLIB_LIBS='-ltinfo'
;;
freebsd2*)

View File

@ -1,24 +1,16 @@
Summary: A library for editing typed command lines
Name: readline
Version: 5.2
Release: 14%{?dist}
License: GPLv2+
Version: 6.0
Release: 1%{?dist}
License: GPLv3+
Group: System Environment/Libraries
URL: http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
Source: ftp://ftp.gnu.org/gnu/readline/readline-%{version}.tar.gz
Patch1: readline-5.2-shlib.patch
Patch2: readline-5.2-001.patch
Patch3: readline-5.2-002.patch
Patch4: readline-5.2-003.patch
Patch5: readline-5.2-004.patch
Patch6: readline-5.2-005.patch
Patch7: readline-5.2-006.patch
Patch8: readline-5.2-007.patch
Patch9: readline-5.2-008.patch
Patch10: readline-5.2-009.patch
Patch11: readline-5.2-010.patch
Patch12: readline-5.2-011.patch
Patch13: readline-5.2-redisplay-sigint.patch
Patch1: ftp://ftp.gnu.org/gnu/readline/readline-6.0-patches/readline60-001
Patch2: ftp://ftp.gnu.org/gnu/readline/readline-6.0-patches/readline60-002
Patch3: ftp://ftp.gnu.org/gnu/readline/readline-6.0-patches/readline60-003
# fix file permissions, remove RPATH, use CFLAGS
Patch20: readline-6.0-shlib.patch
Requires(post): /sbin/install-info
Requires(preun): /sbin/install-info
BuildRequires: ncurses-devel
@ -57,19 +49,10 @@ library.
%prep
%setup -q
%patch1 -p1 -b .shlib
%patch2 -p0 -b .001
%patch3 -p0 -b .002
%patch4 -p0 -b .003
%patch5 -p0 -b .004
%patch6 -p0 -b .005
%patch7 -p0 -b .006
%patch8 -p0 -b .007
%patch9 -p0 -b .008
%patch10 -p0 -b .009
%patch11 -p0 -b .010
%patch12 -p0 -b .011
%patch13 -p1 -b .redisplay-sigint
%patch1 -p0 -b .001
%patch2 -p0 -b .002
%patch3 -p0 -b .003
%patch20 -p1 -b .shlib
pushd examples
rm -f rlfe/configure
@ -95,6 +78,7 @@ for l in $RPM_BUILD_ROOT%{_libdir}/libreadline.so; do
sed 's,\(^/\|\)[^/][^/]*,..,g')/%{_lib}/$(readlink $l) $l
done
rm -rf $RPM_BUILD_ROOT%{_datadir}/readline
rm -f $RPM_BUILD_ROOT%{_infodir}/dir
%clean
@ -146,6 +130,10 @@ fi
%{_libdir}/lib*.a
%changelog
* Tue Jul 14 2009 Miroslav Lichvar <mlichvar@redhat.com> 6.0-1
- update to 6.0
- include patches 001, 002, 003
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 5.2-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild

79
readline60-001 Normal file
View File

@ -0,0 +1,79 @@
READLINE PATCH REPORT
=====================
Readline-Release: 6.0
Patch-ID: readline60-001
Bug-Reported-by: Nicolai Lissner <nlissne@linux01.org>
Bug-Reference-ID: <20090412020510.GA29658@lilith>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-04/msg00104.html
Bug-Description:
If a SIGWINCH arrives while bash is performing redisplay, multi-line prompts
are displayed incorrectly due to the display code being called recursively.
Patch:
*** ../readline-6.0/readline.h 2009-01-04 14:32:33.000000000 -0500
--- readline.h 2009-04-13 08:47:00.000000000 -0400
***************
*** 815,820 ****
#define RL_STATE_MULTIKEY 0x200000 /* reading multiple-key command */
#define RL_STATE_VICMDONCE 0x400000 /* entered vi command mode at least once */
! #define RL_STATE_DONE 0x800000 /* done; accepted line */
#define RL_SETSTATE(x) (rl_readline_state |= (x))
--- 815,821 ----
#define RL_STATE_MULTIKEY 0x200000 /* reading multiple-key command */
#define RL_STATE_VICMDONCE 0x400000 /* entered vi command mode at least once */
+ #define RL_STATE_REDISPLAYING 0x800000 /* updating terminal display */
! #define RL_STATE_DONE 0x1000000 /* done; accepted line */
#define RL_SETSTATE(x) (rl_readline_state |= (x))
*** ../readline-6.0/display.c 2009-01-04 14:32:32.000000000 -0500
--- display.c 2009-04-13 08:29:54.000000000 -0400
***************
*** 513,516 ****
--- 513,517 ----
data structures. */
_rl_block_sigint ();
+ RL_SETSTATE (RL_STATE_REDISPLAYING);
if (!rl_display_prompt)
***************
*** 1237,1240 ****
--- 1238,1242 ----
}
+ RL_UNSETSTATE (RL_STATE_REDISPLAYING);
_rl_release_sigint ();
}
*** ../readline-6.0/terminal.c 2009-01-04 14:32:34.000000000 -0500
--- terminal.c 2009-04-13 08:43:00.000000000 -0400
***************
*** 356,360 ****
if (CUSTOM_REDISPLAY_FUNC ())
rl_forced_update_display ();
! else
_rl_redisplay_after_sigwinch ();
}
--- 356,360 ----
if (CUSTOM_REDISPLAY_FUNC ())
rl_forced_update_display ();
! else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0)
_rl_redisplay_after_sigwinch ();
}
*** ../readline-6.0/patchlevel 2008-11-18 11:01:14.000000000 -0500
--- patchlevel 2009-05-09 12:01:06.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 0
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 1

44
readline60-002 Normal file
View File

@ -0,0 +1,44 @@
READLINE PATCH REPORT
=====================
Readline-Release: 6.0
Patch-ID: readline60-002
Bug-Reported-by: Matt Zyzik <matt.zyzik@nyu.edu>
Bug-Reference-ID: <20090319015542.696F62B8E8@ice.filescope.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00149.html
Bug-Description:
When not in a locale supporting multibyte characters, readline will occasionally
not erase characters between the cursor position and the end of the line
when killing text backwards.
Patch:
*** ../readline-6.0/display.c 2009-01-04 14:32:32.000000000 -0500
--- display.c 2009-04-14 14:00:18.000000000 -0400
***************
*** 1775,1779 ****
adjust col_lendiff based on the difference between _rl_last_c_pos
and _rl_screenwidth */
! if (col_lendiff && (_rl_last_c_pos < _rl_screenwidth))
#endif
{
--- 1775,1779 ----
adjust col_lendiff based on the difference between _rl_last_c_pos
and _rl_screenwidth */
! if (col_lendiff && ((MB_CUR_MAX == 1 || rl_byte_oriented) || (_rl_last_c_pos < _rl_screenwidth)))
#endif
{
*** ../readline-6.0/patchlevel 2008-11-18 11:01:14.000000000 -0500
--- patchlevel 2009-05-09 12:01:06.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 1
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 2

58
readline60-003 Normal file
View File

@ -0,0 +1,58 @@
READLINE PATCH REPORT
=====================
Readline-Release: 6.0
Patch-ID: readline60-003
Bug-Reported-by: Andreas Schwab <schwab@linux-m68k.org>
Bug-Reference-ID: <m21vrhhx08.fsf@igel.home>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-04/msg00160.html
Bug-Description:
If the prompt length exactly matches the screen width, and the prompt ends
with invisible characters, readline positions the cursor incorrectly.
Patch:
*** ../readline-6.0/display.c 2009-01-04 14:32:32.000000000 -0500
--- display.c 2009-04-25 21:42:18.000000000 -0400
***************
*** 1895,1898 ****
--- 1897,1904 ----
woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset);
cpos = _rl_last_c_pos;
+
+ if (cpos == 0 && cpos == new)
+ return;
+
#if defined (HANDLE_MULTIBYTE)
/* If we have multibyte characters, NEW is indexed by the buffer point in
***************
*** 1908,1914 ****
desired display position. */
if ((new > prompt_last_invisible) || /* XXX - don't use woff here */
! (prompt_physical_chars > _rl_screenwidth &&
_rl_last_v_pos == prompt_last_screen_line &&
! wrap_offset >= woff &&
new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset)))
/* XXX last comparison might need to be >= */
--- 1914,1920 ----
desired display position. */
if ((new > prompt_last_invisible) || /* XXX - don't use woff here */
! (prompt_physical_chars >= _rl_screenwidth &&
_rl_last_v_pos == prompt_last_screen_line &&
! wrap_offset >= woff && dpos >= woff &&
new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset)))
/* XXX last comparison might need to be >= */
*** ../readline-6.0/patchlevel 2008-11-18 11:01:14.000000000 -0500
--- patchlevel 2009-05-09 12:01:06.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 2
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 3

View File

@ -1 +1 @@
e39331f32ad14009b9ff49cc10c5e751 readline-5.2.tar.gz
b7f65a48add447693be6e86f04a63019 readline-6.0.tar.gz