source: patches/readline-5.2-fixes-3.patch@ 2978738

clfs-1.2 clfs-2.1 clfs-3.0.0-systemd clfs-3.0.0-sysvinit systemd sysvinit
Last change on this file since 2978738 was c30178f, checked in by Jim Gifford <clfs@…>, 17 years ago

Added: readline-5.2-fixes-3.patch

  • Property mode set to 100644
File size: 12.5 KB
  • readline-5.2

    Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
    Date: 2007-09-03
    Initial Package Version: 5.2
    Origin: ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches
    Upstream Status: From Upstream
    Description: Contains patches 001-007 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  
    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() \
     
    15061518    {
    15071519      /* Non-zero if we're increasing the number of lines. */
    15081520      int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
     1521      /* If col_lendiff is > 0, implying that the new string takes up more
     1522         screen real estate than the old, but lendiff is < 0, meaning that it
     1523         takes fewer bytes, we need to just output the characters starting
     1524         from the first difference.  These will overwrite what is on the
     1525         display, so there's no reason to do a smart update.  This can really
     1526         only happen in a multibyte environment. */
     1527      if (lendiff < 0)
     1528        {
     1529          _rl_output_some_chars (nfd, temp);
     1530          _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
     1531          /* If nfd begins before any invisible characters in the prompt,
     1532             adjust _rl_last_c_pos to account for wrap_offset and set
     1533             cpos_adjusted to let the caller know. */
     1534          if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
     1535            {
     1536              _rl_last_c_pos -= wrap_offset;
     1537              cpos_adjusted = 1;
     1538            }
     1539          return;
     1540        }
    15091541      /* Sometimes it is cheaper to print the characters rather than
    15101542         use the terminal's capabilities.  If we're growing the number
    15111543         of lines, make sure we actually cause the new line to wrap
    15121544         around on auto-wrapping terminals. */
    1513       if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
     1545      else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
    15141546        {
    15151547          /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
    15161548             _rl_horizontal_scroll_mode == 1, inserting the characters with
     
    15861618          temp = nls - nfd;
    15871619          if (temp > 0)
    15881620            {
     1621              /* If nfd begins at the prompt, or before the invisible
     1622                 characters in the prompt, we need to adjust _rl_last_c_pos
     1623                 in a multibyte locale to account for the wrap offset and
     1624                 set cpos_adjusted accordingly. */
    15891625              _rl_output_some_chars (nfd, temp);
    1590               _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
     1626              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     1627                {
     1628                  _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
     1629                  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
     1630                    {
     1631                      _rl_last_c_pos -= wrap_offset;
     1632                      cpos_adjusted = 1;
     1633                    }
     1634                }
     1635              else
     1636                _rl_last_c_pos += temp;
    15911637            }
    15921638        }
    15931639      /* Otherwise, print over the existing material. */
     
    15951641        {
    15961642          if (temp > 0)
    15971643            {
     1644              /* If nfd begins at the prompt, or before the invisible
     1645                 characters in the prompt, we need to adjust _rl_last_c_pos
     1646                 in a multibyte locale to account for the wrap offset and
     1647                 set cpos_adjusted accordingly. */
    15981648              _rl_output_some_chars (nfd, temp);
    15991649              _rl_last_c_pos += col_temp;               /* XXX */
     1650              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     1651                {
     1652                  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
     1653                    {
     1654                      _rl_last_c_pos -= wrap_offset;
     1655                      cpos_adjusted = 1;
     1656                    }
     1657                }
    16001658            }
    16011659          lendiff = (oe - old) - (ne - new);
    16021660          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     
    17321790  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
    17331791    {
    17341792      dpos = _rl_col_width (data, 0, new);
    1735       if (dpos > prompt_last_invisible)         /* XXX - don't use woff here */
     1793      /* Use NEW when comparing against the last invisible character in the
     1794         prompt string, since they're both buffer indices and DPOS is a
     1795         desired display position. */
     1796      if (new > prompt_last_invisible)          /* XXX - don't use woff here */
    17361797        {
    17371798          dpos -= woff;
    17381799          /* Since this will be assigned to _rl_last_c_pos at the end (more
     
    23802441
    23812442  if (end <= start)
    23822443    return 0;
     2444  if (MB_CUR_MAX == 1 || rl_byte_oriented)
     2445    return (end - start);
    23832446
    23842447  memset (&ps, 0, sizeof (mbstate_t));
    23852448
  • 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);
     
    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    }
  • 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;
Note: See TracBrowser for help on using the repository browser.