CRUX-ARM : Home

Home :: Documentation :: Download :: Development :: Community :: Ports :: Packages :: Bugs :: Links :: About :: Donors
rc: updated to upstream 2.24
[crossrootfs.git] / readline / readline-5.2-001-013.patch
CommitLineData
6dca1d21
JB
1 READLINE PATCH REPORT
2 =====================
3
4Readline-Release: 5.2
5Patch-ID: readline52-001
6
7Bug-Reported-by: ebb9@byu.net
8Bug-Reference-ID: <45540862.9030900@byu.net>
9Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html
10 http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html
11
12Bug-Description:
13
14In some cases, code that is intended to be used in the presence of multibyte
15characters is called when no such characters are present, leading to incorrect
16display position calculations and incorrect redisplay.
17
18Patch:
19
20*** ../readline-5.2/display.c Thu Sep 14 14:20:12 2006
21--- display.c Mon Nov 13 17:55:57 2006
22***************
23*** 2381,2384 ****
24--- 2409,2414 ----
25 if (end <= start)
26 return 0;
27+ if (MB_CUR_MAX == 1 || rl_byte_oriented)
28+ return (end - start);
29
30 memset (&ps, 0, sizeof (mbstate_t));
31
32 READLINE PATCH REPORT
33 =====================
34
35Readline-Release: 5.2
36Patch-ID: readline52-002
37
38Bug-Reported-by: Magnus Svensson <msvensson@mysql.com>
39Bug-Reference-ID: <45BDC44D.80609@mysql.com>
40Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html
41
42Bug-Description:
43
44Readline neglects to reallocate the array it uses to keep track of wrapped
45screen lines when increasing its size. This will eventually result in
46segmentation faults when given sufficiently long input.
47
48Patch:
49
50*** ../readline-5.2-patched/display.c Thu Sep 14 14:20:12 2006
51--- display.c Fri Feb 2 20:23:17 2007
52***************
53*** 561,574 ****
54--- 561,586 ----
55 wrap_offset = prompt_invis_chars_first_line = 0;
56 }
57
58+ #if defined (HANDLE_MULTIBYTE)
59 #define CHECK_INV_LBREAKS() \
60 do { \
61 if (newlines >= (inv_lbsize - 2)) \
62 { \
63 inv_lbsize *= 2; \
64 inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
65+ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
66 } \
67 } while (0)
68+ #else
69+ #define CHECK_INV_LBREAKS() \
70+ do { \
71+ if (newlines >= (inv_lbsize - 2)) \
72+ { \
73+ inv_lbsize *= 2; \
74+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
75+ } \
76+ } while (0)
77+ #endif /* HANDLE_MULTIBYTE */
78
79 #if defined (HANDLE_MULTIBYTE)
80 #define CHECK_LPOS() \
81
82 READLINE PATCH REPORT
83 =====================
84
85Readline-Release: 5.2
86Patch-ID: readline52-003
87
88Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
89Bug-Reference-ID: <1171795523.8021.18.camel@localhost>
90Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html
91
92Bug-Description:
93
94When moving the cursor, bash sometimes misplaces the cursor when the prompt
95contains two or more multibyte characters. The particular circumstance that
96uncovered the problem was having the (multibyte) current directory name in
97the prompt string.
98
99Patch:
100
101*** ../readline-5.2.2/display.c Fri Jan 19 13:34:50 2007
102--- display.c Sat Mar 10 17:25:44 2007
103***************
104*** 1745,1749 ****
105 {
106 dpos = _rl_col_width (data, 0, new);
107! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */
108 {
109 dpos -= woff;
110--- 1745,1752 ----
111 {
112 dpos = _rl_col_width (data, 0, new);
113! /* Use NEW when comparing against the last invisible character in the
114! prompt string, since they're both buffer indices and DPOS is a
115! desired display position. */
116! if (new > prompt_last_invisible) /* XXX - don't use woff here */
117 {
118 dpos -= woff;
119
120 READLINE PATCH REPORT
121 =====================
122
123Readline-Release: 5.2
124Patch-ID: readline52-004
125
126Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
127Bug-Reference-ID: <1173636022.7039.36.camel@localhost>
128Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html
129
130Bug-Description:
131
132When restoring the original prompt after finishing an incremental search,
133bash sometimes places the cursor incorrectly if the primary prompt contains
134invisible characters.
135
136Patch:
137
138*** ../readline-5.2.3/display.c Fri Apr 20 13:30:16 2007
139--- display.c Fri Apr 20 15:17:01 2007
140***************
141*** 1599,1604 ****
142 if (temp > 0)
143 {
144 _rl_output_some_chars (nfd, temp);
145! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
146 }
147 }
148--- 1599,1618 ----
149 if (temp > 0)
150 {
151+ /* If nfd begins at the prompt, or before the invisible
152+ characters in the prompt, we need to adjust _rl_last_c_pos
153+ in a multibyte locale to account for the wrap offset and
154+ set cpos_adjusted accordingly. */
155 _rl_output_some_chars (nfd, temp);
156! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
157! {
158! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
159! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
160! {
161! _rl_last_c_pos -= wrap_offset;
162! cpos_adjusted = 1;
163! }
164! }
165! else
166! _rl_last_c_pos += temp;
167 }
168 }
169***************
170*** 1608,1613 ****
171--- 1622,1639 ----
172 if (temp > 0)
173 {
174+ /* If nfd begins at the prompt, or before the invisible
175+ characters in the prompt, we need to adjust _rl_last_c_pos
176+ in a multibyte locale to account for the wrap offset and
177+ set cpos_adjusted accordingly. */
178 _rl_output_some_chars (nfd, temp);
179 _rl_last_c_pos += col_temp; /* XXX */
180+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
181+ {
182+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
183+ {
184+ _rl_last_c_pos -= wrap_offset;
185+ cpos_adjusted = 1;
186+ }
187+ }
188 }
189 lendiff = (oe - old) - (ne - new);
190
191 READLINE PATCH REPORT
192 =====================
193
194Readline-Release: 5.2
195Patch-ID: readline52-005
196
197Bug-Reported-by: Thomas Loeber <ifp@loeber1.de>
198Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de>
199Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html
200
201Bug-Description:
202
203When rl_read_key returns -1, indicating that readline's controlling terminal
204has been invalidated for some reason (e.g., receiving a SIGHUP), the error
205status was not reported correctly to the caller. This could cause input
206loops.
207
208Patch:
209
210*** ../readline-5.2/complete.c Fri Jul 28 11:35:49 2006
211--- complete.c Tue Mar 13 08:50:16 2007
212***************
213*** 429,433 ****
214 if (c == 'n' || c == 'N' || c == RUBOUT)
215 return (0);
216! if (c == ABORT_CHAR)
217 _rl_abort_internal ();
218 if (for_pager && (c == NEWLINE || c == RETURN))
219--- 440,444 ----
220 if (c == 'n' || c == 'N' || c == RUBOUT)
221 return (0);
222! if (c == ABORT_CHAR || c < 0)
223 _rl_abort_internal ();
224 if (for_pager && (c == NEWLINE || c == RETURN))
225*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006
226--- input.c Wed May 2 16:07:59 2007
227***************
228*** 514,518 ****
229 int size;
230 {
231! int mb_len = 0;
232 size_t mbchar_bytes_length;
233 wchar_t wc;
234--- 522,526 ----
235 int size;
236 {
237! int mb_len, c;
238 size_t mbchar_bytes_length;
239 wchar_t wc;
240***************
241*** 521,531 ****
242 memset(&ps, 0, sizeof (mbstate_t));
243 memset(&ps_back, 0, sizeof (mbstate_t));
244!
245 while (mb_len < size)
246 {
247 RL_SETSTATE(RL_STATE_MOREINPUT);
248! mbchar[mb_len++] = rl_read_key ();
249 RL_UNSETSTATE(RL_STATE_MOREINPUT);
250
251 mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
252 if (mbchar_bytes_length == (size_t)(-1))
253--- 529,545 ----
254 memset(&ps, 0, sizeof (mbstate_t));
255 memset(&ps_back, 0, sizeof (mbstate_t));
256!
257! mb_len = 0;
258 while (mb_len < size)
259 {
260 RL_SETSTATE(RL_STATE_MOREINPUT);
261! c = rl_read_key ();
262 RL_UNSETSTATE(RL_STATE_MOREINPUT);
263
264+ if (c < 0)
265+ break;
266+
267+ mbchar[mb_len++] = c;
268+
269 mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
270 if (mbchar_bytes_length == (size_t)(-1))
271***************
272*** 565,569 ****
273 c = first;
274 memset (mb, 0, mlen);
275! for (i = 0; i < mlen; i++)
276 {
277 mb[i] = (char)c;
278--- 579,583 ----
279 c = first;
280 memset (mb, 0, mlen);
281! for (i = 0; c >= 0 && i < mlen; i++)
282 {
283 mb[i] = (char)c;
284*** ../readline-5.2/isearch.c Mon Dec 26 17:18:53 2005
285--- isearch.c Fri Mar 9 14:30:59 2007
286***************
287*** 328,333 ****
288
289 f = (rl_command_func_t *)NULL;
290!
291! /* Translate the keys we do something with to opcodes. */
292 if (c >= 0 && _rl_keymap[c].type == ISFUNC)
293 {
294--- 328,340 ----
295
296 f = (rl_command_func_t *)NULL;
297!
298! if (c < 0)
299! {
300! cxt->sflags |= SF_FAILED;
301! cxt->history_pos = cxt->last_found_line;
302! return -1;
303! }
304!
305! /* Translate the keys we do something with to opcodes. */
306 if (c >= 0 && _rl_keymap[c].type == ISFUNC)
307 {
308*** ../readline-5.2/misc.c Mon Dec 26 17:20:46 2005
309--- misc.c Fri Mar 9 14:44:11 2007
310***************
311*** 147,150 ****
312--- 147,152 ----
313 rl_clear_message ();
314 RL_UNSETSTATE(RL_STATE_NUMERICARG);
315+ if (key < 0)
316+ return -1;
317 return (_rl_dispatch (key, _rl_keymap));
318 }
319*** ../readline-5.2/readline.c Wed Aug 16 15:00:36 2006
320--- readline.c Fri Mar 9 14:47:24 2007
321***************
322*** 646,649 ****
323--- 669,677 ----
324 {
325 nkey = _rl_subseq_getchar (cxt->okey);
326+ if (nkey < 0)
327+ {
328+ _rl_abort_internal ();
329+ return -1;
330+ }
331 r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
332 cxt->flags |= KSEQ_DISPATCHED;
333*** ../readline-5.2/text.c Fri Jul 28 11:55:27 2006
334--- text.c Sun Mar 25 13:41:38 2007
335***************
336*** 858,861 ****
337--- 864,870 ----
338 RL_UNSETSTATE(RL_STATE_MOREINPUT);
339
340+ if (c < 0)
341+ return -1;
342+
343 #if defined (HANDLE_SIGNALS)
344 if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
345***************
346*** 1521,1524 ****
347--- 1530,1536 ----
348 mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);
349
350+ if (mb_len <= 0)
351+ return -1;
352+
353 if (count < 0)
354 return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
355***************
356*** 1537,1540 ****
357--- 1549,1555 ----
358 RL_UNSETSTATE(RL_STATE_MOREINPUT);
359
360+ if (c < 0)
361+ return -1;
362+
363 if (count < 0)
364 return (_rl_char_search_internal (-count, bdir, c));
365*** ../readline-5.2/vi_mode.c Sat Jul 29 16:42:28 2006
366--- vi_mode.c Fri Mar 9 15:02:11 2007
367***************
368*** 887,890 ****
369--- 887,897 ----
370 c = rl_read_key ();
371 RL_UNSETSTATE(RL_STATE_MOREINPUT);
372+
373+ if (c < 0)
374+ {
375+ *nextkey = 0;
376+ return -1;
377+ }
378+
379 *nextkey = c;
380
381***************
382*** 903,906 ****
383--- 910,918 ----
384 c = rl_read_key (); /* real command */
385 RL_UNSETSTATE(RL_STATE_MOREINPUT);
386+ if (c < 0)
387+ {
388+ *nextkey = 0;
389+ return -1;
390+ }
391 *nextkey = c;
392 }
393***************
394*** 1225,1236 ****
395 _rl_callback_generic_arg *data;
396 {
397 #if defined (HANDLE_MULTIBYTE)
398! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
399 #else
400 RL_SETSTATE(RL_STATE_MOREINPUT);
401! _rl_vi_last_search_char = rl_read_key ();
402 RL_UNSETSTATE(RL_STATE_MOREINPUT);
403 #endif
404
405 _rl_callback_func = 0;
406 _rl_want_redisplay = 1;
407--- 1243,1262 ----
408 _rl_callback_generic_arg *data;
409 {
410+ int c;
411 #if defined (HANDLE_MULTIBYTE)
412! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
413 #else
414 RL_SETSTATE(RL_STATE_MOREINPUT);
415! c = rl_read_key ();
416 RL_UNSETSTATE(RL_STATE_MOREINPUT);
417 #endif
418
419+ if (c <= 0)
420+ return -1;
421+
422+ #if !defined (HANDLE_MULTIBYTE)
423+ _rl_vi_last_search_char = c;
424+ #endif
425+
426 _rl_callback_func = 0;
427 _rl_want_redisplay = 1;
428***************
429*** 1248,1251 ****
430--- 1274,1278 ----
431 int count, key;
432 {
433+ int c;
434 #if defined (HANDLE_MULTIBYTE)
435 static char *target;
436***************
437*** 1294,1302 ****
438 {
439 #if defined (HANDLE_MULTIBYTE)
440! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
441 #else
442 RL_SETSTATE(RL_STATE_MOREINPUT);
443! _rl_vi_last_search_char = rl_read_key ();
444 RL_UNSETSTATE(RL_STATE_MOREINPUT);
445 #endif
446 }
447--- 1321,1335 ----
448 {
449 #if defined (HANDLE_MULTIBYTE)
450! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
451! if (c <= 0)
452! return -1;
453! _rl_vi_last_search_mblen = c;
454 #else
455 RL_SETSTATE(RL_STATE_MOREINPUT);
456! c = rl_read_key ();
457 RL_UNSETSTATE(RL_STATE_MOREINPUT);
458+ if (c < 0)
459+ return -1;
460+ _rl_vi_last_search_char = c;
461 #endif
462 }
463***************
464*** 1468,1471 ****
465--- 1501,1507 ----
466 RL_UNSETSTATE(RL_STATE_MOREINPUT);
467
468+ if (c < 0)
469+ return -1;
470+
471 #if defined (HANDLE_MULTIBYTE)
472 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
473***************
474*** 1486,1489 ****
475--- 1522,1528 ----
476 _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
477
478+ if (c < 0)
479+ return -1;
480+
481 _rl_callback_func = 0;
482 _rl_want_redisplay = 1;
483***************
484*** 1517,1520 ****
485--- 1556,1562 ----
486 _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
487
488+ if (c < 0)
489+ return -1;
490+
491 return (_rl_vi_change_char (count, c, mb));
492 }
493***************
494*** 1651,1655 ****
495 RL_UNSETSTATE(RL_STATE_MOREINPUT);
496
497! if (ch < 'a' || ch > 'z')
498 {
499 rl_ding ();
500--- 1693,1697 ----
501 RL_UNSETSTATE(RL_STATE_MOREINPUT);
502
503! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */
504 {
505 rl_ding ();
506***************
507*** 1703,1707 ****
508 return 0;
509 }
510! else if (ch < 'a' || ch > 'z')
511 {
512 rl_ding ();
513--- 1745,1749 ----
514 return 0;
515 }
516! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */
517 {
518 rl_ding ();
519
520 READLINE PATCH REPORT
521 =====================
522
523Readline-Release: 5.2
524Patch-ID: readline52-006
525
526Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
527Bug-Reference-ID: <1178376645.9063.25.camel@localhost>
528Bug-Reference-URL: http://bugs.gentoo.org/177095
529
530Bug-Description:
531
532The readline display code miscalculated the screen position when performing
533a redisplay in which the new text occupies more screen space that the old,
534but takes fewer bytes to do so (e.g., when replacing a shorter string
535containing multibyte characters with a longer one containing only ASCII).
536
537Patch:
538
539*** ../readline-5.2/display.c Thu Apr 26 11:38:22 2007
540--- display.c Thu Jul 12 23:10:10 2007
541***************
542*** 1519,1527 ****
543 /* Non-zero if we're increasing the number of lines. */
544 int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
545 /* Sometimes it is cheaper to print the characters rather than
546 use the terminal's capabilities. If we're growing the number
547 of lines, make sure we actually cause the new line to wrap
548 around on auto-wrapping terminals. */
549! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
550 {
551 /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
552--- 1568,1596 ----
553 /* Non-zero if we're increasing the number of lines. */
554 int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
555+ /* If col_lendiff is > 0, implying that the new string takes up more
556+ screen real estate than the old, but lendiff is < 0, meaning that it
557+ takes fewer bytes, we need to just output the characters starting
558+ from the first difference. These will overwrite what is on the
559+ display, so there's no reason to do a smart update. This can really
560+ only happen in a multibyte environment. */
561+ if (lendiff < 0)
562+ {
563+ _rl_output_some_chars (nfd, temp);
564+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
565+ /* If nfd begins before any invisible characters in the prompt,
566+ adjust _rl_last_c_pos to account for wrap_offset and set
567+ cpos_adjusted to let the caller know. */
568+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
569+ {
570+ _rl_last_c_pos -= wrap_offset;
571+ cpos_adjusted = 1;
572+ }
573+ return;
574+ }
575 /* Sometimes it is cheaper to print the characters rather than
576 use the terminal's capabilities. If we're growing the number
577 of lines, make sure we actually cause the new line to wrap
578 around on auto-wrapping terminals. */
579! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
580 {
581 /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
582
583 READLINE PATCH REPORT
584 =====================
585
586Readline-Release: 5.2
587Patch-ID: readline52-007
588
589Bug-Reported-by: Tom Bjorkholm <tom.bjorkholm@ericsson.com>
590Bug-Reference-ID: <AEA1A32F001C6B4F98614B5B80D7647D01C075E9@esealmw115.eemea.ericsson.se>
591Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html
592
593
594Bug-Description:
595
596An off-by-one error in readline's input buffering caused readline to drop
597each 511th character of buffered input (e.g., when pasting a large amount
598of data into a terminal window).
599
600Patch:
601
602*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006
603--- input.c Tue Jul 17 09:24:21 2007
604***************
605*** 134,139 ****
606
607 *key = ibuffer[pop_index++];
608!
609 if (pop_index >= ibuffer_len)
610 pop_index = 0;
611
612--- 134,142 ----
613
614 *key = ibuffer[pop_index++];
615! #if 0
616 if (pop_index >= ibuffer_len)
617+ #else
618+ if (pop_index > ibuffer_len)
619+ #endif
620 pop_index = 0;
621
622***************
623*** 251,255 ****
624 {
625 k = (*rl_getc_function) (rl_instream);
626! rl_stuff_char (k);
627 if (k == NEWLINE || k == RETURN)
628 break;
629--- 254,259 ----
630 {
631 k = (*rl_getc_function) (rl_instream);
632! if (rl_stuff_char (k) == 0)
633! break; /* some problem; no more room */
634 if (k == NEWLINE || k == RETURN)
635 break;
636***************
637*** 374,378 ****
638--- 378,386 ----
639 }
640 ibuffer[push_index++] = key;
641+ #if 0
642 if (push_index >= ibuffer_len)
643+ #else
644+ if (push_index > ibuffer_len)
645+ #endif
646 push_index = 0;
647
648 READLINE PATCH REPORT
649 =====================
650
651Readline-Release: 5.2
652Patch-ID: readline52-008
653
654Bug-Reported-by: dAniel hAhler <ubuntu@thequod.de>
655Bug-Reference-ID: <4702ED8A.5000503@thequod.de>
656Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938
657
658Bug-Description:
659
660When updating the display after displaying, for instance, a list of possible
661completions, readline will place the cursor at the wrong position if the
662prompt contains invisible characters and a newline.
663
664Patch:
665
666*** ../readline-5.2-patched/display.c Mon Aug 6 14:26:29 2007
667--- display.c Wed Oct 10 22:43:58 2007
668***************
669*** 1049,1053 ****
670 else
671 tx = nleft;
672! if (_rl_last_c_pos > tx)
673 {
674 _rl_backspace (_rl_last_c_pos - tx); /* XXX */
675--- 1049,1053 ----
676 else
677 tx = nleft;
678! if (tx >= 0 && _rl_last_c_pos > tx)
679 {
680 _rl_backspace (_rl_last_c_pos - tx); /* XXX */
681***************
682*** 1205,1209 ****
683 {
684 register char *ofd, *ols, *oe, *nfd, *nls, *ne;
685! int temp, lendiff, wsatend, od, nd;
686 int current_invis_chars;
687 int col_lendiff, col_temp;
688--- 1205,1209 ----
689 {
690 register char *ofd, *ols, *oe, *nfd, *nls, *ne;
691! int temp, lendiff, wsatend, od, nd, o_cpos;
692 int current_invis_chars;
693 int col_lendiff, col_temp;
694***************
695*** 1466,1469 ****
696--- 1466,1471 ----
697 }
698
699+ o_cpos = _rl_last_c_pos;
700+
701 /* When this function returns, _rl_last_c_pos is correct, and an absolute
702 cursor postion in multibyte mode, but a buffer index when not in a
703***************
704*** 1475,1479 ****
705 invisible characters in the prompt string. Let's see if setting this when
706 we make sure we're at the end of the drawn prompt string works. */
707! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars)
708 cpos_adjusted = 1;
709 #endif
710--- 1477,1483 ----
711 invisible characters in the prompt string. Let's see if setting this when
712 we make sure we're at the end of the drawn prompt string works. */
713! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 &&
714! (_rl_last_c_pos > 0 || o_cpos > 0) &&
715! _rl_last_c_pos == prompt_physical_chars)
716 cpos_adjusted = 1;
717 #endif
718
719 READLINE PATCH REPORT
720 =====================
721
722Readline-Release: 5.2
723Patch-ID: readline52-009
724
725Bug-Reported-by: dAniel hAhler <ubuntu@thequod.de>
726Bug-Reference-ID:
727Bug-Reference-URL:
728
729Bug-Description:
730
731Under some circumstances, readline will incorrectly display a prompt string
732containing invisible characters after the final newline.
733
734Patch:
735
736*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400
737--- display.c 2007-11-10 17:51:29.000000000 -0500
738***************
739*** 392,396 ****
740 local_prompt = expand_prompt (p, &prompt_visible_length,
741 &prompt_last_invisible,
742! (int *)NULL,
743 &prompt_physical_chars);
744 c = *t; *t = '\0';
745--- 420,424 ----
746 local_prompt = expand_prompt (p, &prompt_visible_length,
747 &prompt_last_invisible,
748! &prompt_invis_chars_first_line,
749 &prompt_physical_chars);
750 c = *t; *t = '\0';
751***************
752*** 399,403 ****
753 local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
754 (int *)NULL,
755! &prompt_invis_chars_first_line,
756 (int *)NULL);
757 *t = c;
758--- 427,431 ----
759 local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
760 (int *)NULL,
761! (int *)NULL,
762 (int *)NULL);
763 *t = c;
764
765 READLINE PATCH REPORT
766 =====================
767
768Readline-Release: 5.2
769Patch-ID: readline52-010
770
771Bug-Reported-by: Miroslav Lichvar <mlichvar@redhat.com>
772Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100
773Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html
774
775Bug-Description:
776
777In certain cases when outputting characters at the end of the line,
778e.g., when displaying the prompt string, readline positions the cursor
779incorrectly if the prompt string contains invisible characters and the
780text being drawn begins before the last invisible character in the line.
781
782Patch:
783
784*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400
785--- display.c 2007-11-10 17:51:29.000000000 -0500
786***************
787*** 1566,1574 ****
788 else
789 {
790- /* We have horizontal scrolling and we are not inserting at
791- the end. We have invisible characters in this line. This
792- is a dumb update. */
793 _rl_output_some_chars (nfd, temp);
794 _rl_last_c_pos += col_temp;
795 return;
796 }
797--- 1619,1632 ----
798 else
799 {
800 _rl_output_some_chars (nfd, temp);
801 _rl_last_c_pos += col_temp;
802+ /* If nfd begins before any invisible characters in the prompt,
803+ adjust _rl_last_c_pos to account for wrap_offset and set
804+ cpos_adjusted to let the caller know. */
805+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
806+ {
807+ _rl_last_c_pos -= wrap_offset;
808+ cpos_adjusted = 1;
809+ }
810 return;
811 }
812
813 READLINE PATCH REPORT
814 =====================
815
816Readline-Release: 5.2
817Patch-ID: readline52-011
818
819Bug-Reported-by: Uwe Doering <gemini@geminix.org>
820Bug-Reference-ID: <46F3DD72.2090801@geminix.org>
821Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html
822
823Bug-Description:
824
825There is an off-by-one error in the code that buffers characters received
826very quickly in succession, causing characters to be dropped.
827
828Patch:
829
830*** ../readline-5.2-patched/input.c 2007-08-25 13:47:10.000000000 -0400
831--- input.c 2007-10-12 22:55:25.000000000 -0400
832***************
833*** 155,159 ****
834 pop_index--;
835 if (pop_index < 0)
836! pop_index = ibuffer_len - 1;
837 ibuffer[pop_index] = key;
838 return (1);
839--- 155,159 ----
840 pop_index--;
841 if (pop_index < 0)
842! pop_index = ibuffer_len;
843 ibuffer[pop_index] = key;
844 return (1);
845
846 READLINE PATCH REPORT
847 =====================
848
849Readline-Release: 5.2
850Patch-ID: readline52-012
851
852Bug-Reported-by: Chet Ramey <chet.ramey@case.edu>
853Bug-Reference-ID:
854Bug-Reference-URL:
855
856Bug-Description:
857
858This updates the options required to create shared libraries on several
859systems, including Mac OS X 10.5 (darwin9.x), FreeBSD, NetBSD, OpenBSD,
860AIX, and HP/UX.
861
862Patch:
863
864*** ../readline-5.2-patched/support/shobj-conf 2006-04-11 09:15:43.000000000 -0400
865--- support/shobj-conf 2007-12-06 23:46:41.000000000 -0500
866***************
867*** 11,15 ****
868 # chet@po.cwru.edu
869
870! # Copyright (C) 1996-2002 Free Software Foundation, Inc.
871 #
872 # This program is free software; you can redistribute it and/or modify
873--- 11,15 ----
874 # chet@po.cwru.edu
875
876! # Copyright (C) 1996-2007 Free Software Foundation, Inc.
877 #
878 # This program is free software; you can redistribute it and/or modify
879***************
880*** 115,119 ****
881 ;;
882
883! freebsd2* | netbsd*)
884 SHOBJ_CFLAGS=-fpic
885 SHOBJ_LD=ld
886--- 115,119 ----
887 ;;
888
889! freebsd2*)
890 SHOBJ_CFLAGS=-fpic
891 SHOBJ_LD=ld
892***************
893*** 126,130 ****
894 # FreeBSD-3.x ELF
895 freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*)
896! SHOBJ_CFLAGS=-fpic
897 SHOBJ_LD='${CC}'
898
899--- 126,130 ----
900 # FreeBSD-3.x ELF
901 freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*)
902! SHOBJ_CFLAGS=-fPIC
903 SHOBJ_LD='${CC}'
904
905***************
906*** 143,147 ****
907
908 # Darwin/MacOS X
909! darwin8*)
910 SHOBJ_STATUS=supported
911 SHLIB_STATUS=supported
912--- 143,147 ----
913
914 # Darwin/MacOS X
915! darwin[89]*)
916 SHOBJ_STATUS=supported
917 SHLIB_STATUS=supported
918***************
919*** 154,158 ****
920 SHLIB_LIBSUFF='dylib'
921
922! SHOBJ_LDFLAGS='-undefined dynamic_lookup'
923 SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
924
925--- 154,158 ----
926 SHLIB_LIBSUFF='dylib'
927
928! SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`'
929 SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
930
931***************
932*** 172,176 ****
933
934 case "${host_os}" in
935! darwin[78]*) SHOBJ_LDFLAGS=''
936 SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
937 ;;
938--- 172,176 ----
939
940 case "${host_os}" in
941! darwin[789]*) SHOBJ_LDFLAGS=''
942 SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
943 ;;
944***************
945*** 183,187 ****
946 ;;
947
948! openbsd*)
949 SHOBJ_CFLAGS=-fPIC
950 SHOBJ_LD='${CC}'
951--- 183,187 ----
952 ;;
953
954! openbsd*|netbsd*)
955 SHOBJ_CFLAGS=-fPIC
956 SHOBJ_LD='${CC}'
957***************
958*** 248,252 ****
959 ;;
960
961! aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com
962 SHOBJ_CFLAGS=-fpic
963 SHOBJ_LD='ld'
964--- 248,252 ----
965 ;;
966
967! aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com
968 SHOBJ_CFLAGS=-fpic
969 SHOBJ_LD='ld'
970***************
971*** 259,263 ****
972 ;;
973
974! aix4.[2-9]*)
975 SHOBJ_CFLAGS=-K
976 SHOBJ_LD='ld'
977--- 259,263 ----
978 ;;
979
980! aix4.[2-9]*|aix[5-9].*)
981 SHOBJ_CFLAGS=-K
982 SHOBJ_LD='ld'
983***************
984*** 330,334 ****
985 # if you have problems linking here, moving the `-Wl,+h,$@' from
986 # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work
987! SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'
988
989 SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)'
990--- 330,334 ----
991 # if you have problems linking here, moving the `-Wl,+h,$@' from
992 # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work
993! SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s'
994
995 SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)'
996
997 READLINE PATCH REPORT
998 =====================
999
1000Readline-Release: 5.2
1001Patch-ID: readline52-013
1002
1003Bug-Reported-by: slinkp <stuff@slinkp.com>
1004Bug-Reference-ID: <da52a26a-9f38-4861-a918-14d3482b539d@c65g2000hsa.googlegroups.com>
1005Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html
1006
1007Bug-Description:
1008
1009The presence of invisible characters in a prompt longer than the screenwidth
1010with invisible characters on the first and last prompt lines caused readline
1011to place the cursor in the wrong physical location.
1012
1013Patch:
1014
1015*** ../readline-5.2-patched/display.c 2007-12-14 21:12:40.000000000 -0500
1016--- display.c 2008-10-23 09:39:46.000000000 -0400
1017***************
1018*** 911,914 ****
1019--- 944,951 ----
1020 OFFSET (which has already been calculated above). */
1021
1022+ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset)
1023+ #define WRAP_OFFSET(line, offset) ((line == 0) \
1024+ ? (offset ? INVIS_FIRST() : 0) \
1025+ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0))
1026 #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0)
1027 #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l]))
1028***************
1029*** 945,949 ****
1030 _rl_last_c_pos > wrap_offset &&
1031 o_cpos < prompt_last_invisible)
1032! _rl_last_c_pos -= wrap_offset;
1033
1034 /* If this is the line with the prompt, we might need to
1035--- 982,992 ----
1036 _rl_last_c_pos > wrap_offset &&
1037 o_cpos < prompt_last_invisible)
1038! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */
1039! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth &&
1040! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
1041! cpos_adjusted == 0 &&
1042! _rl_last_c_pos != o_cpos &&
1043! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line))
1044! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line);
1045
1046 /* If this is the line with the prompt, we might need to
1047***************
1048*** 1205,1209 ****
1049 {
1050 register char *ofd, *ols, *oe, *nfd, *nls, *ne;
1051! int temp, lendiff, wsatend, od, nd, o_cpos;
1052 int current_invis_chars;
1053 int col_lendiff, col_temp;
1054--- 1264,1268 ----
1055 {
1056 register char *ofd, *ols, *oe, *nfd, *nls, *ne;
1057! int temp, lendiff, wsatend, od, nd, twidth, o_cpos;
1058 int current_invis_chars;
1059 int col_lendiff, col_temp;
1060***************
1061*** 1221,1225 ****
1062 temp = _rl_last_c_pos;
1063 else
1064! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
1065 if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
1066 && _rl_last_v_pos == current_line - 1)
1067--- 1280,1284 ----
1068 temp = _rl_last_c_pos;
1069 else
1070! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset);
1071 if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
1072 && _rl_last_v_pos == current_line - 1)
1073***************
1074*** 1587,1599 ****
1075 {
1076 _rl_output_some_chars (nfd + lendiff, temp - lendiff);
1077- #if 1
1078 /* XXX -- this bears closer inspection. Fixes a redisplay bug
1079 reported against bash-3.0-alpha by Andreas Schwab involving
1080 multibyte characters and prompt strings with invisible
1081 characters, but was previously disabled. */
1082! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff);
1083! #else
1084! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff);
1085! #endif
1086 }
1087 }
1088--- 1648,1660 ----
1089 {
1090 _rl_output_some_chars (nfd + lendiff, temp - lendiff);
1091 /* XXX -- this bears closer inspection. Fixes a redisplay bug
1092 reported against bash-3.0-alpha by Andreas Schwab involving
1093 multibyte characters and prompt strings with invisible
1094 characters, but was previously disabled. */
1095! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
1096! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff);
1097! else
1098! twidth = temp - lendiff;
1099! _rl_last_c_pos += twidth;
1100 }
1101 }
1102***************
1103*** 1789,1793 ****
1104 int cpos, dpos; /* current and desired cursor positions */
1105
1106! woff = W_OFFSET (_rl_last_v_pos, wrap_offset);
1107 cpos = _rl_last_c_pos;
1108 #if defined (HANDLE_MULTIBYTE)
1109--- 1850,1854 ----
1110 int cpos, dpos; /* current and desired cursor positions */
1111
1112! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset);
1113 cpos = _rl_last_c_pos;
1114 #if defined (HANDLE_MULTIBYTE)
1115***************
1116*** 1803,1807 ****
1117 prompt string, since they're both buffer indices and DPOS is a
1118 desired display position. */
1119! if (new > prompt_last_invisible) /* XXX - don't use woff here */
1120 {
1121 dpos -= woff;
1122--- 1864,1872 ----
1123 prompt string, since they're both buffer indices and DPOS is a
1124 desired display position. */
1125! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */
1126! (prompt_physical_chars > _rl_screenwidth &&
1127! _rl_last_v_pos == prompt_last_screen_line &&
1128! wrap_offset != woff &&
1129! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset)))
1130 {
1131 dpos -= woff;