From f4b417c62a4f272c4cf9a074d0f7a3a97201f9db Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Tue, 17 Apr 2012 11:23:35 +0200 Subject: Update to upstream bash 4.2 This upgrades bash to from 4.1-rc to 4.2-release. See CWRU/changelog for changes. Change-Id: I926269c300cf44fa25964b5b375a148fcf11c4b7 --- lib/readline/text.c | 65 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 21 deletions(-) (limited to 'lib/readline/text.c') diff --git a/lib/readline/text.c b/lib/readline/text.c index fc39189..536e31a 100644 --- a/lib/readline/text.c +++ b/lib/readline/text.c @@ -1,6 +1,6 @@ /* text.c -- text handling commands for readline. */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2010 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -150,7 +150,7 @@ rl_delete_text (from, to) if (_rl_doing_an_undo == 0) rl_add_undo (UNDO_DELETE, from, to, text); else - free (text); + xfree (text); rl_end -= diff; rl_line_buffer[rl_end] = '\0'; @@ -265,11 +265,13 @@ rl_forward_byte (count, key) if (count > 0) { - int end = rl_point + count; + int end, lend; + + end = rl_point + count; #if defined (VI_MODE) - int lend = rl_end > 0 ? rl_end - (VI_COMMAND_MODE()) : rl_end; + lend = rl_end > 0 ? rl_end - (VI_COMMAND_MODE()) : rl_end; #else - int lend = rl_end; + lend = rl_end; #endif if (end > lend) @@ -287,6 +289,31 @@ rl_forward_byte (count, key) return 0; } +int +_rl_forward_char_internal (count) + int count; +{ + int point; + +#if defined (HANDLE_MULTIBYTE) + point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); + +#if defined (VI_MODE) + if (point >= rl_end && VI_COMMAND_MODE()) + point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, MB_FIND_NONZERO); +#endif + + if (rl_end < 0) + rl_end = 0; +#else + point = rl_point + count; + if (point > rl_end) + point = rl_end; +#endif + + return (point); +} + #if defined (HANDLE_MULTIBYTE) /* Move forward COUNT characters. */ int @@ -309,20 +336,12 @@ rl_forward_char (count, key) return 0; } - point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); - -#if defined (VI_MODE) - if (point >= rl_end && VI_COMMAND_MODE()) - point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, MB_FIND_NONZERO); -#endif + point = _rl_forward_char_internal (count); if (rl_point == point) rl_ding (); rl_point = point; - - if (rl_end < 0) - rl_end = 0; } return 0; @@ -752,7 +771,7 @@ _rl_insert_char (count, c) string[i] = '\0'; rl_insert_text (string); - free (string); + xfree (string); return 0; } @@ -779,7 +798,7 @@ _rl_insert_char (count, c) count -= decreaser; } - free (string); + xfree (string); incoming_length = 0; stored_count = 0; #else /* !HANDLE_MULTIBYTE */ @@ -805,8 +824,9 @@ _rl_insert_char (count, c) /* We are inserting a single character. If there is pending input, then make a string of all of the pending characters that are bound to rl_insert, and insert - them all. */ - if (_rl_any_typein ()) + them all. Don't do this if we're current reading input from + a macro. */ + if ((RL_ISSTATE (RL_STATE_MACROINPUT) == 0) && _rl_any_typein ()) _rl_insert_typein (c); else { @@ -1407,8 +1427,8 @@ rl_transpose_words (count, key) /* I think that does it. */ rl_end_undo_group (); - free (word1); - free (word2); + xfree (word1); + xfree (word2); return 0; } @@ -1467,7 +1487,7 @@ rl_transpose_chars (count, key) rl_end_undo_group (); #if defined (HANDLE_MULTIBYTE) - free (dummy); + xfree (dummy); #endif return 0; @@ -1495,6 +1515,9 @@ _rl_char_search_internal (count, dir, schar) int prepos; #endif + if (dir == 0) + return -1; + pos = rl_point; inc = (dir < 0) ? -1 : 1; while (count) -- cgit v1.1