rpms/mingw32-readline/devel import.log, NONE, 1.1 mingw32-readline.spec, NONE, 1.1 readline-5.2-001.patch, NONE, 1.1 readline-5.2-002.patch, NONE, 1.1 readline-5.2-003.patch, NONE, 1.1 readline-5.2-004.patch, NONE, 1.1 readline-5.2-005.patch, NONE, 1.1 readline-5.2-006.patch, NONE, 1.1 readline-5.2-007.patch, NONE, 1.1 readline-5.2-008.patch, NONE, 1.1 readline-5.2-009.patch, NONE, 1.1 readline-5.2-010.patch, NONE, 1.1 readline-5.2-011.patch, NONE, 1.1 readline-5.2-redisplay-sigint.patch, NONE, 1.1 readline-5.2-shlib.patch, NONE, 1.1 .cvsignore, 1.1, 1.2 sources, 1.1, 1.2

Richard W.M. Jones rjones at fedoraproject.org
Sat Jan 17 11:38:21 UTC 2009


Author: rjones

Update of /cvs/pkgs/rpms/mingw32-readline/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv4357/devel

Modified Files:
	.cvsignore sources 
Added Files:
	import.log mingw32-readline.spec readline-5.2-001.patch 
	readline-5.2-002.patch readline-5.2-003.patch 
	readline-5.2-004.patch readline-5.2-005.patch 
	readline-5.2-006.patch readline-5.2-007.patch 
	readline-5.2-008.patch readline-5.2-009.patch 
	readline-5.2-010.patch readline-5.2-011.patch 
	readline-5.2-redisplay-sigint.patch readline-5.2-shlib.patch 
Log Message:
Initial import.



--- NEW FILE import.log ---
mingw32-readline-5_2-4_fc10:HEAD:mingw32-readline-5.2-4.fc10.src.rpm:1232192026


--- NEW FILE mingw32-readline.spec ---
%define __strip %{_mingw32_strip}
%define __objdump %{_mingw32_objdump}
%define _use_internal_dependency_generator 0
%define __find_requires %{_mingw32_findrequires}
%define __find_provides %{_mingw32_findprovides}

Name:           mingw32-readline
Version:        5.2
Release:        4%{?dist}
Summary:        MinGW port of readline for editing typed command lines

License:        GPLv2+
Group:          System Environment/Libraries
URL:            http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
Source0:        ftp://ftp.gnu.org/gnu/readline/readline-%{version}.tar.gz
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

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

BuildArch:      noarch

BuildRequires:  mingw32-filesystem >= 29
BuildRequires:  mingw32-gcc
BuildRequires:  mingw32-binutils
BuildRequires:  mingw32-termcap >= 1.3.1-3


%description
The Readline library provides a set of functions that allow users to
edit command lines. Both Emacs and vi editing modes are available. The
Readline library includes additional functions for maintaining a list
of previously-entered command lines for recalling or editing those
lines, and for performing csh-like history expansion on previous
commands.

This is a port of the library and development tools to Windows.


%prep
%setup -q -n readline-%{version}
%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

pushd examples
rm -f rlfe/configure
iconv -f iso8859-1 -t utf8 -o rl-fgets.c{_,}
touch -r rl-fgets.c{,_}
mv -f rl-fgets.c{_,}
popd


%build
%{_mingw32_configure} --enable-shared
make SHLIB_LIBS=-ltermcap

# Rebuild the DLLs correctly and create implibs.
pushd shlib
%{_mingw32_cc} -shared -o readline.dll -Wl,--out-implib,libreadline.dll.a readline.so vi_mode.so funmap.so keymaps.so parens.so search.so rltty.so complete.so bind.so isearch.so display.so signals.so util.so kill.so undo.so macro.so input.so callback.so terminal.so text.so nls.so misc.so xmalloc.so history.so histexpand.so histfile.so histsearch.so shell.so mbutil.so tilde.so compat.so -ltermcap
%{_mingw32_cc} -shared -o history.dll -Wl,--out-implib,libhistory.dll.a history.so histexpand.so histfile.so histsearch.so shell.so mbutil.so xmalloc.so
popd


%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

# Remove the fake .so files and install our DLLs and implibs.
pushd shlib
rm $RPM_BUILD_ROOT%{_mingw32_libdir}/lib*.so.*
mkdir -p $RPM_BUILD_ROOT%{_mingw32_bindir}
install readline.dll $RPM_BUILD_ROOT%{_mingw32_bindir}
install libreadline.dll.a $RPM_BUILD_ROOT%{_mingw32_libdir}
install history.dll $RPM_BUILD_ROOT%{_mingw32_bindir}
install libhistory.dll.a $RPM_BUILD_ROOT%{_mingw32_libdir}
popd

# Don't want the info files or manpages which duplicate the native package.
rm -rf $RPM_BUILD_ROOT%{_mingw32_mandir}
rm -rf $RPM_BUILD_ROOT%{_mingw32_infodir}

# Don't want the static library.
rm $RPM_BUILD_ROOT%{_mingw32_libdir}/libhistory.a
rm $RPM_BUILD_ROOT%{_mingw32_libdir}/libreadline.a


%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root)
%{_mingw32_bindir}/readline.dll
%{_mingw32_bindir}/history.dll
%{_mingw32_libdir}/libreadline.dll.a
%{_mingw32_libdir}/libhistory.dll.a
%{_mingw32_includedir}/readline/


%changelog
* Sat Nov 22 2008 Richard W.M. Jones <rjones at redhat.com> - 5.2-4
- Rename *.dll.a to lib*.dll.a so that libtool can use these libraries.

* Wed Nov 19 2008 Richard W.M. Jones <rjones at redhat.com> - 5.2-3
- Fix paths to mandir, infodir.

* Fri Oct 31 2008 Richard W.M. Jones <rjones at redhat.com> - 5.2-2
- Rebuild against latest termcap.

* Thu Sep 25 2008 Richard W.M. Jones <rjones at redhat.com> - 5.2-1
- Initial RPM release.

readline-5.2-001.patch:

--- NEW FILE readline-5.2-001.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-001

Bug-Reported-by:	ebb9 at byu.net
Bug-Reference-ID:	<45540862.9030900 at 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));

readline-5.2-002.patch:

--- NEW FILE readline-5.2-002.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-002

Bug-Reported-by: Magnus Svensson <msvensson at mysql.com>
Bug-Reference-ID: <45BDC44D.80609 at 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() \

readline-5.2-003.patch:

--- NEW FILE readline-5.2-003.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-003

Bug-Reported-by: Peter Volkov <torre_cremata at mail.ru>
Bug-Reference-ID: <1171795523.8021.18.camel at 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;

readline-5.2-004.patch:

--- NEW FILE readline-5.2-004.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-004

Bug-Reported-by: Peter Volkov <torre_cremata at mail.ru>
Bug-Reference-ID: <1173636022.7039.36.camel at 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);

readline-5.2-005.patch:

--- NEW FILE readline-5.2-005.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-005

Bug-Reported-by:        Thomas Loeber <ifp at loeber1.de>
Bug-Reference-ID:       <200703082223.08919.ifp at 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 ();

readline-5.2-006.patch:

--- NEW FILE readline-5.2-006.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-006

Bug-Reported-by:        Peter Volkov <torre_cremata at mail.ru>
Bug-Reference-ID:       <1178376645.9063.25.camel at 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

readline-5.2-007.patch:

--- NEW FILE readline-5.2-007.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-007

Bug-Reported-by:        Tom Bjorkholm <tom.bjorkholm at ericsson.com>
Bug-Reference-ID:       <AEA1A32F001C6B4F98614B5B80D7647D01C075E9 at 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;
  

readline-5.2-008.patch:

--- NEW FILE readline-5.2-008.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-008

Bug-Reported-by:	dAniel hAhler <ubuntu at thequod.de>
Bug-Reference-ID:	<4702ED8A.5000503 at 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

readline-5.2-009.patch:

--- NEW FILE readline-5.2-009.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-009

Bug-Reported-by:	dAniel hAhler <ubuntu at 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;

readline-5.2-010.patch:

--- NEW FILE readline-5.2-010.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-010

Bug-Reported-by:	Miroslav Lichvar <mlichvar at 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;
  	    }

readline-5.2-011.patch:

--- NEW FILE readline-5.2-011.patch ---
			   READLINE PATCH REPORT
			   =====================

Readline-Release: 5.2
Patch-ID: readline52-011

Bug-Reported-by:	Uwe Doering <gemini at geminix.org>
Bug-Reference-ID:	<46F3DD72.2090801 at 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);

readline-5.2-redisplay-sigint.patch:

--- NEW FILE readline-5.2-redisplay-sigint.patch ---
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 at 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_ */

readline-5.2-shlib.patch:

--- NEW FILE readline-5.2-shlib.patch ---
--- 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


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/mingw32-readline/devel/.cvsignore,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- .cvsignore	17 Jan 2009 03:30:40 -0000	1.1
+++ .cvsignore	17 Jan 2009 11:38:21 -0000	1.2
@@ -0,0 +1 @@
+readline-5.2.tar.gz


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/mingw32-readline/devel/sources,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sources	17 Jan 2009 03:30:40 -0000	1.1
+++ sources	17 Jan 2009 11:38:21 -0000	1.2
@@ -0,0 +1 @@
+e39331f32ad14009b9ff49cc10c5e751  readline-5.2.tar.gz




More information about the fedora-extras-commits mailing list