Ticket #2122: readline-5.2-fixes-5.patch

File readline-5.2-fixes-5.patch, 18.3 KB (added by Matthew Burgess, 17 years ago)

LFS-formatted patch containing upstream readline patches 001-012

  • readline-5.2

    Submitted By: Matt Burgess (matthew at linuxfromscratch dot org)
    Date: 2007-12-22
    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-012 from upstream.
    
    diff -Naur readline-5.2.orig/complete.c readline-5.2/complete.c
    old new  
    428428        return (1);
    429429      if (c == 'n' || c == 'N' || c == RUBOUT)
    430430        return (0);
    431       if (c == ABORT_CHAR)
     431      if (c == ABORT_CHAR || c < 0)
    432432        _rl_abort_internal ();
    433433      if (for_pager && (c == NEWLINE || c == RETURN))
    434434        return (2);
  • readline-5.2

    diff -Naur readline-5.2.orig/display.c readline-5.2/display.c
    old new  
    391391      t = ++p;
    392392      local_prompt = expand_prompt (p, &prompt_visible_length,
    393393                                       &prompt_last_invisible,
    394                                        (int *)NULL,
     394                                       &prompt_invis_chars_first_line,
    395395                                       &prompt_physical_chars);
    396396      c = *t; *t = '\0';
    397397      /* The portion of the prompt string up to and including the
    398398         final newline is now null-terminated. */
    399399      local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
    400400                                                   (int *)NULL,
    401                                                    &prompt_invis_chars_first_line,
     401                                                   (int *)NULL,
    402402                                                   (int *)NULL);
    403403      *t = c;
    404404      local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
     
    561561      wrap_offset = prompt_invis_chars_first_line = 0;
    562562    }
    563563
     564#if defined (HANDLE_MULTIBYTE)
     565#define CHECK_INV_LBREAKS() \
     566      do { \
     567        if (newlines >= (inv_lbsize - 2)) \
     568          { \
     569            inv_lbsize *= 2; \
     570            inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
     571            _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
     572          } \
     573      } while (0)
     574#else
    564575#define CHECK_INV_LBREAKS() \
    565576      do { \
    566577        if (newlines >= (inv_lbsize - 2)) \
     
    569580            inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
    570581          } \
    571582      } while (0)
     583#endif /* HANDLE_MULTIBYTE */
    572584
    573585#if defined (HANDLE_MULTIBYTE)   
    574586#define CHECK_LPOS() \
     
    10361048                tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset;
    10371049              else
    10381050                tx = nleft;
    1039               if (_rl_last_c_pos > tx)
     1051              if (tx >= 0 && _rl_last_c_pos > tx)
    10401052                {
    10411053                  _rl_backspace (_rl_last_c_pos - tx);  /* XXX */
    10421054                  _rl_last_c_pos = tx;
     
    11921204     int current_line, omax, nmax, inv_botlin;
    11931205{
    11941206  register char *ofd, *ols, *oe, *nfd, *nls, *ne;
    1195   int temp, lendiff, wsatend, od, nd;
     1207  int temp, lendiff, wsatend, od, nd, o_cpos;
    11961208  int current_invis_chars;
    11971209  int col_lendiff, col_temp;
    11981210#if defined (HANDLE_MULTIBYTE)
     
    14531465        _rl_last_c_pos = lendiff;
    14541466    }
    14551467
     1468  o_cpos = _rl_last_c_pos;
     1469
    14561470  /* When this function returns, _rl_last_c_pos is correct, and an absolute
    14571471     cursor postion in multibyte mode, but a buffer index when not in a
    14581472     multibyte locale. */
     
    14621476  /* We need to indicate that the cursor position is correct in the presence of
    14631477     invisible characters in the prompt string.  Let's see if setting this when
    14641478     we make sure we're at the end of the drawn prompt string works. */
    1465   if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars)
     1479  if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 &&
     1480      (_rl_last_c_pos > 0 || o_cpos > 0) &&
     1481      _rl_last_c_pos == prompt_physical_chars)
    14661482    cpos_adjusted = 1;
    14671483#endif
    14681484#endif
     
    15061522    {
    15071523      /* Non-zero if we're increasing the number of lines. */
    15081524      int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
     1525      /* If col_lendiff is > 0, implying that the new string takes up more
     1526         screen real estate than the old, but lendiff is < 0, meaning that it
     1527         takes fewer bytes, we need to just output the characters starting
     1528         from the first difference.  These will overwrite what is on the
     1529         display, so there's no reason to do a smart update.  This can really
     1530         only happen in a multibyte environment. */
     1531      if (lendiff < 0)
     1532        {
     1533          _rl_output_some_chars (nfd, temp);
     1534          _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
     1535          /* If nfd begins before any invisible characters in the prompt,
     1536             adjust _rl_last_c_pos to account for wrap_offset and set
     1537             cpos_adjusted to let the caller know. */
     1538          if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
     1539            {
     1540              _rl_last_c_pos -= wrap_offset;
     1541              cpos_adjusted = 1;
     1542            }
     1543          return;
     1544        }
    15091545      /* Sometimes it is cheaper to print the characters rather than
    15101546         use the terminal's capabilities.  If we're growing the number
    15111547         of lines, make sure we actually cause the new line to wrap
    15121548         around on auto-wrapping terminals. */
    1513       if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
     1549      else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
    15141550        {
    15151551          /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
    15161552             _rl_horizontal_scroll_mode == 1, inserting the characters with
     
    15331569            }
    15341570          else
    15351571            {
    1536               /* We have horizontal scrolling and we are not inserting at
    1537                  the end.  We have invisible characters in this line.  This
    1538                  is a dumb update. */
    15391572              _rl_output_some_chars (nfd, temp);
    15401573              _rl_last_c_pos += col_temp;
     1574              /* If nfd begins before any invisible characters in the prompt,
     1575                 adjust _rl_last_c_pos to account for wrap_offset and set
     1576                 cpos_adjusted to let the caller know. */
     1577              if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
     1578                {
     1579                  _rl_last_c_pos -= wrap_offset;
     1580                  cpos_adjusted = 1;
     1581                }
    15411582              return;
    15421583            }
    15431584          /* Copy (new) chars to screen from first diff to last match. */
     
    15861627          temp = nls - nfd;
    15871628          if (temp > 0)
    15881629            {
     1630              /* If nfd begins at the prompt, or before the invisible
     1631                 characters in the prompt, we need to adjust _rl_last_c_pos
     1632                 in a multibyte locale to account for the wrap offset and
     1633                 set cpos_adjusted accordingly. */
    15891634              _rl_output_some_chars (nfd, temp);
    1590               _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
     1635              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     1636                {
     1637                  _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
     1638                  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
     1639                    {
     1640                      _rl_last_c_pos -= wrap_offset;
     1641                      cpos_adjusted = 1;
     1642                    }
     1643                }
     1644              else
     1645                _rl_last_c_pos += temp;
    15911646            }
    15921647        }
    15931648      /* Otherwise, print over the existing material. */
     
    15951650        {
    15961651          if (temp > 0)
    15971652            {
     1653              /* If nfd begins at the prompt, or before the invisible
     1654                 characters in the prompt, we need to adjust _rl_last_c_pos
     1655                 in a multibyte locale to account for the wrap offset and
     1656                 set cpos_adjusted accordingly. */
    15981657              _rl_output_some_chars (nfd, temp);
    15991658              _rl_last_c_pos += col_temp;               /* XXX */
     1659              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     1660                {
     1661                  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
     1662                    {
     1663                      _rl_last_c_pos -= wrap_offset;
     1664                      cpos_adjusted = 1;
     1665                    }
     1666                }
    16001667            }
    16011668          lendiff = (oe - old) - (ne - new);
    16021669          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     
    17321799  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
    17331800    {
    17341801      dpos = _rl_col_width (data, 0, new);
    1735       if (dpos > prompt_last_invisible)         /* XXX - don't use woff here */
     1802      /* Use NEW when comparing against the last invisible character in the
     1803         prompt string, since they're both buffer indices and DPOS is a
     1804         desired display position. */
     1805      if (new > prompt_last_invisible)          /* XXX - don't use woff here */
    17361806        {
    17371807          dpos -= woff;
    17381808          /* Since this will be assigned to _rl_last_c_pos at the end (more
     
    23802450
    23812451  if (end <= start)
    23822452    return 0;
     2453  if (MB_CUR_MAX == 1 || rl_byte_oriented)
     2454    return (end - start);
    23832455
    23842456  memset (&ps, 0, sizeof (mbstate_t));
    23852457
  • readline-5.2

    diff -Naur readline-5.2.orig/input.c readline-5.2/input.c
    old new  
    133133    return (0);
    134134
    135135  *key = ibuffer[pop_index++];
    136 
     136#if 0
    137137  if (pop_index >= ibuffer_len)
     138#else
     139  if (pop_index > ibuffer_len)
     140#endif
    138141    pop_index = 0;
    139142
    140143  return (1);
     
    151154    {
    152155      pop_index--;
    153156      if (pop_index < 0)
    154         pop_index = ibuffer_len - 1;
     157        pop_index = ibuffer_len;
    155158      ibuffer[pop_index] = key;
    156159      return (1);
    157160    }
     
    250253      while (chars_avail--)
    251254        {
    252255          k = (*rl_getc_function) (rl_instream);
    253           rl_stuff_char (k);
     256          if (rl_stuff_char (k) == 0)
     257            break;                      /* some problem; no more room */
    254258          if (k == NEWLINE || k == RETURN)
    255259            break;
    256260        }
     
    373377      RL_SETSTATE (RL_STATE_INPUTPENDING);
    374378    }
    375379  ibuffer[push_index++] = key;
     380#if 0
    376381  if (push_index >= ibuffer_len)
     382#else
     383  if (push_index > ibuffer_len)
     384#endif
    377385    push_index = 0;
    378386
    379387  return 1;
     
    513521     char *mbchar;
    514522     int size;
    515523{
    516   int mb_len = 0;
     524  int mb_len, c;
    517525  size_t mbchar_bytes_length;
    518526  wchar_t wc;
    519527  mbstate_t ps, ps_back;
    520528
    521529  memset(&ps, 0, sizeof (mbstate_t));
    522530  memset(&ps_back, 0, sizeof (mbstate_t));
    523  
     531
     532  mb_len = 0; 
    524533  while (mb_len < size)
    525534    {
    526535      RL_SETSTATE(RL_STATE_MOREINPUT);
    527       mbchar[mb_len++] = rl_read_key ();
     536      c = rl_read_key ();
    528537      RL_UNSETSTATE(RL_STATE_MOREINPUT);
    529538
     539      if (c < 0)
     540        break;
     541
     542      mbchar[mb_len++] = c;
     543
    530544      mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
    531545      if (mbchar_bytes_length == (size_t)(-1))
    532546        break;          /* invalid byte sequence for the current locale */
     
    564578
    565579  c = first;
    566580  memset (mb, 0, mlen);
    567   for (i = 0; i < mlen; i++)
     581  for (i = 0; c >= 0 && i < mlen; i++)
    568582    {
    569583      mb[i] = (char)c;
    570584      memset (&ps, 0, sizeof (mbstate_t));
  • readline-5.2

    diff -Naur readline-5.2.orig/isearch.c readline-5.2/isearch.c
    old new  
    327327  rl_command_func_t *f;
    328328
    329329  f = (rl_command_func_t *)NULL;
    330  
    331  /* Translate the keys we do something with to opcodes. */
     330
     331  if (c < 0)
     332    {
     333      cxt->sflags |= SF_FAILED;
     334      cxt->history_pos = cxt->last_found_line;
     335      return -1;
     336    }
     337
     338  /* Translate the keys we do something with to opcodes. */
    332339  if (c >= 0 && _rl_keymap[c].type == ISFUNC)
    333340    {
    334341      f = _rl_keymap[c].function;
  • readline-5.2

    diff -Naur readline-5.2.orig/misc.c readline-5.2/misc.c
    old new  
    146146          rl_restore_prompt ();
    147147          rl_clear_message ();
    148148          RL_UNSETSTATE(RL_STATE_NUMERICARG);
     149          if (key < 0)
     150            return -1;
    149151          return (_rl_dispatch (key, _rl_keymap));
    150152        }
    151153    }
  • readline-5.2

    diff -Naur readline-5.2.orig/readline.c readline-5.2/readline.c
    old new  
    645645  if ((cxt->flags & KSEQ_DISPATCHED) == 0)
    646646    {
    647647      nkey = _rl_subseq_getchar (cxt->okey);
     648      if (nkey < 0)
     649        {
     650          _rl_abort_internal ();
     651          return -1;
     652        }
    648653      r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
    649654      cxt->flags |= KSEQ_DISPATCHED;
    650655    }
  • support/shobj-conf

    diff -Naur readline-5.2.orig/support/shobj-conf readline-5.2/support/shobj-conf
    old new  
    1010# Chet Ramey
    1111# chet@po.cwru.edu
    1212
    13 # Copyright (C) 1996-2002 Free Software Foundation, Inc.
     13# Copyright (C) 1996-2007 Free Software Foundation, Inc.
    1414#
    1515# This program is free software; you can redistribute it and/or modify
    1616# it under the terms of the GNU General Public License as published by
     
    114114        SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
    115115        ;;
    116116
    117 freebsd2* | netbsd*)
     117freebsd2*)
    118118        SHOBJ_CFLAGS=-fpic
    119119        SHOBJ_LD=ld
    120120        SHOBJ_LDFLAGS='-x -Bshareable'
     
    125125
    126126# FreeBSD-3.x ELF
    127127freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*)
    128         SHOBJ_CFLAGS=-fpic
     128        SHOBJ_CFLAGS=-fPIC
    129129        SHOBJ_LD='${CC}'
    130130
    131131        if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
     
    142142        ;;
    143143
    144144# Darwin/MacOS X
    145 darwin8*)
     145darwin[89]*)
    146146        SHOBJ_STATUS=supported
    147147        SHLIB_STATUS=supported
    148148       
     
    153153        SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)'
    154154        SHLIB_LIBSUFF='dylib'
    155155
    156         SHOBJ_LDFLAGS='-undefined dynamic_lookup'
     156        SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`'
    157157        SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
    158158
    159159        SHLIB_LIBS='-lncurses'  # see if -lcurses works on MacOS X 10.1
     
    171171        SHLIB_LIBSUFF='dylib'
    172172
    173173        case "${host_os}" in
    174         darwin[78]*)    SHOBJ_LDFLAGS=''
     174        darwin[789]*)   SHOBJ_LDFLAGS=''
    175175                        SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
    176176                        ;;
    177177        *)              SHOBJ_LDFLAGS='-dynamic'
     
    182182        SHLIB_LIBS='-lncurses'  # see if -lcurses works on MacOS X 10.1
    183183        ;;
    184184
    185 openbsd*)
     185openbsd*|netbsd*)
    186186        SHOBJ_CFLAGS=-fPIC
    187187        SHOBJ_LD='${CC}'
    188188        SHOBJ_LDFLAGS='-shared'
     
    247247        SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
    248248        ;;
    249249
    250 aix4.[2-9]*-*gcc*)              # lightly tested by jik@cisco.com
     250aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*)             # lightly tested by jik@cisco.com
    251251        SHOBJ_CFLAGS=-fpic
    252252        SHOBJ_LD='ld'
    253253        SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
     
    258258        SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
    259259        ;;
    260260
    261 aix4.[2-9]*)
     261aix4.[2-9]*|aix[5-9].*)
    262262        SHOBJ_CFLAGS=-K
    263263        SHOBJ_LD='ld'
    264264        SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
     
    329329        SHOBJ_LD='${CC}'
    330330        # if you have problems linking here, moving the `-Wl,+h,$@' from
    331331        # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work
    332         SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'
     332        SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s'
    333333
    334334        SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)'
    335335        SHLIB_LIBSUFF='sl'
  • readline-5.2

    diff -Naur readline-5.2.orig/text.c readline-5.2/text.c
    old new  
    857857  c = rl_read_key ();
    858858  RL_UNSETSTATE(RL_STATE_MOREINPUT);
    859859
     860  if (c < 0)
     861    return -1;
     862
    860863#if defined (HANDLE_SIGNALS)
    861864  if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
    862865    _rl_restore_tty_signals ();
     
    15201523
    15211524  mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);
    15221525
     1526  if (mb_len <= 0)
     1527    return -1;
     1528
    15231529  if (count < 0)
    15241530    return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
    15251531  else
     
    15361542  c = rl_read_key ();
    15371543  RL_UNSETSTATE(RL_STATE_MOREINPUT);
    15381544
     1545  if (c < 0)
     1546    return -1;
     1547
    15391548  if (count < 0)
    15401549    return (_rl_char_search_internal (-count, bdir, c));
    15411550  else
  • readline-5.2

    diff -Naur readline-5.2.orig/vi_mode.c readline-5.2/vi_mode.c
    old new  
    886886  RL_SETSTATE(RL_STATE_MOREINPUT);
    887887  c = rl_read_key ();
    888888  RL_UNSETSTATE(RL_STATE_MOREINPUT);
     889
     890  if (c < 0)
     891    {
     892      *nextkey = 0;
     893      return -1;
     894    }
     895
    889896  *nextkey = c;
    890897
    891898  if (!member (c, vi_motion))
     
    902909          RL_SETSTATE(RL_STATE_MOREINPUT);
    903910          c = rl_read_key ();   /* real command */
    904911          RL_UNSETSTATE(RL_STATE_MOREINPUT);
     912          if (c < 0)
     913            {
     914              *nextkey = 0;
     915              return -1;
     916            }
    905917          *nextkey = c;
    906918        }
    907919      else if (key == c && (key == 'd' || key == 'y' || key == 'c'))
     
    12241236_rl_vi_callback_char_search (data)
    12251237     _rl_callback_generic_arg *data;
    12261238{
     1239  int c;
    12271240#if defined (HANDLE_MULTIBYTE)
    1228   _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
     1241  c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
    12291242#else
    12301243  RL_SETSTATE(RL_STATE_MOREINPUT);
    1231   _rl_vi_last_search_char = rl_read_key ();
     1244  c = rl_read_key ();
    12321245  RL_UNSETSTATE(RL_STATE_MOREINPUT);
    12331246#endif
    12341247
     1248  if (c <= 0)
     1249    return -1;
     1250
     1251#if !defined (HANDLE_MULTIBYTE)
     1252  _rl_vi_last_search_char = c;
     1253#endif
     1254
    12351255  _rl_callback_func = 0;
    12361256  _rl_want_redisplay = 1;
    12371257
     
    12471267rl_vi_char_search (count, key)
    12481268     int count, key;
    12491269{
     1270  int c;
    12501271#if defined (HANDLE_MULTIBYTE)
    12511272  static char *target;
    12521273  static int tlen;
     
    12931314      else
    12941315        {
    12951316#if defined (HANDLE_MULTIBYTE)
    1296           _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
     1317          c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
     1318          if (c <= 0)
     1319            return -1;
     1320          _rl_vi_last_search_mblen = c;
    12971321#else
    12981322          RL_SETSTATE(RL_STATE_MOREINPUT);
    1299           _rl_vi_last_search_char = rl_read_key ();
     1323          c = rl_read_key ();
    13001324          RL_UNSETSTATE(RL_STATE_MOREINPUT);
     1325          if (c < 0)
     1326            return -1;
     1327          _rl_vi_last_search_char = c;
    13011328#endif
    13021329        }
    13031330    }
     
    14671494  c = rl_read_key ();
    14681495  RL_UNSETSTATE(RL_STATE_MOREINPUT);
    14691496
     1497  if (c < 0)
     1498    return -1;
     1499
    14701500#if defined (HANDLE_MULTIBYTE)
    14711501  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
    14721502    c = _rl_read_mbstring (c, mb, mlen);
     
    14851515
    14861516  _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
    14871517
     1518  if (c < 0)
     1519    return -1;
     1520
    14881521  _rl_callback_func = 0;
    14891522  _rl_want_redisplay = 1;
    14901523
     
    15161549  else
    15171550    _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
    15181551
     1552  if (c < 0)
     1553    return -1;
     1554
    15191555  return (_rl_vi_change_char (count, c, mb));
    15201556}
    15211557
     
    16501686  ch = rl_read_key ();
    16511687  RL_UNSETSTATE(RL_STATE_MOREINPUT);
    16521688
    1653   if (ch < 'a' || ch > 'z')
     1689  if (ch < 0 || ch < 'a' || ch > 'z')   /* make test against 0 explicit */
    16541690    {
    16551691      rl_ding ();
    16561692      return -1;
     
    17021738      rl_point = rl_mark;
    17031739      return 0;
    17041740    }
    1705   else if (ch < 'a' || ch > 'z')
     1741  else if (ch < 0 || ch < 'a' || ch > 'z')      /* make test against 0 explicit */
    17061742    {
    17071743      rl_ding ();
    17081744      return -1;