Author: matthew
Date: 2007-05-05 16:02:38 -0600 (Sat, 05 May 2007)
New Revision: 1808

Added:
   trunk/readline/readline-5.2-fixes-3.patch
Log:
Add latest upstream patches for Readline.

Added: trunk/readline/readline-5.2-fixes-3.patch
===================================================================
--- trunk/readline/readline-5.2-fixes-3.patch                           (rev 0)
+++ trunk/readline/readline-5.2-fixes-3.patch   2007-05-05 22:02:38 UTC (rev 
1808)
@@ -0,0 +1,102 @@
+Submitted By: Matt Burgess (matthew at linuxfromscratch dot org)
+Date: 2007-04-29
+Initial Package Version: 5.2
+Upstream Status: From Upstream
+Origin: http://ftp.gnu.org/gnu/readline/readline-5.2-patches/
+Description: A combined patch containing patches 001-004 from upstream.
+
+diff -Naur readline-5.2.orig/display.c readline-5.2/display.c
+--- readline-5.2.orig/display.c        2006-09-14 18:20:12.000000000 +0000
++++ readline-5.2/display.c     2007-04-28 19:17:04.000000000 +0000
+@@ -561,6 +561,17 @@
+       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)) \
+@@ -569,6 +580,7 @@
+           inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof 
(int)); \
+         } \
+       } while (0)
++#endif /* HANDLE_MULTIBYTE */
+ 
+ #if defined (HANDLE_MULTIBYTE)          
+ #define CHECK_LPOS() \
+@@ -1586,8 +1598,22 @@
+         temp = nls - nfd;
+         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 += _rl_col_width (nfd, 0, 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;
+           }
+       }
+       /* Otherwise, print over the existing material. */
+@@ -1595,8 +1621,20 @@
+       {
+         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);
+         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+@@ -1732,7 +1770,10 @@
+   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+     {
+       dpos = _rl_col_width (data, 0, new);
+-      if (dpos > prompt_last_invisible)               /* XXX - don't use woff 
here */
++      /* 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;
+         /* Since this will be assigned to _rl_last_c_pos at the end (more
+@@ -2380,6 +2421,8 @@
+ 
+   if (end <= start)
+     return 0;
++  if (MB_CUR_MAX == 1 || rl_byte_oriented)
++    return (end - start);
+ 
+   memset (&ps, 0, sizeof (mbstate_t));
+ 

-- 
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to