diff options
author | Patrick Palka <patrick@parcs.ath.cx> | 2015-07-25 15:41:05 -0400 |
---|---|---|
committer | Patrick Palka <patrick@parcs.ath.cx> | 2015-07-25 15:57:00 -0400 |
commit | 5836a818eccb180d75c92ce4c861abb6fe8dec23 (patch) | |
tree | 624044ca5df5a6c192e47933a735ab4fe9aaea71 /readline/histexpand.c | |
parent | b8cc7b2e9afab37eb9a7cff0d3ae4ebbcf7d494f (diff) | |
download | fsf-binutils-gdb-5836a818eccb180d75c92ce4c861abb6fe8dec23.zip fsf-binutils-gdb-5836a818eccb180d75c92ce4c861abb6fe8dec23.tar.gz fsf-binutils-gdb-5836a818eccb180d75c92ce4c861abb6fe8dec23.tar.bz2 |
Revert "Sync readline/ to version 7.0 alpha"
This reverts commit b558ff043d41ba8d17a82f5f9ae5f9dade66160e.
This reverts commit 4a11f2065906976675808364ddbd1c0f77eea41f.
The initial import commit failed to retain local changes made to
readline's configure.in (and the commit message erroneously stated that
there were no local changes that needed to be reapplied). Also the
import caused a couple of build errors and a scattering of testsuite
regressions throughout many arches. It's probably better to start over
with this import, hopefully more carefully next time.
Diffstat (limited to 'readline/histexpand.c')
-rw-r--r-- | readline/histexpand.c | 83 |
1 files changed, 39 insertions, 44 deletions
diff --git a/readline/histexpand.c b/readline/histexpand.c index fc13303..8fb3798 100644 --- a/readline/histexpand.c +++ b/readline/histexpand.c @@ -1,6 +1,6 @@ /* histexpand.c -- history expansion. */ -/* Copyright (C) 1989-2012 Free Software Foundation, Inc. +/* Copyright (C) 1989-2010 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. @@ -50,7 +50,6 @@ #define HISTORY_WORD_DELIMITERS " \t\n;&()|<>" #define HISTORY_QUOTE_CHARACTERS "\"'`" -#define HISTORY_EVENT_DELIMITERS "^$*%-" #define slashify_in_quotes "\\`\"$" @@ -63,10 +62,6 @@ static char *subst_rhs; static int subst_lhs_len; static int subst_rhs_len; -/* Characters that delimit history event specifications and separate event - specifications from word designators. Static for now */ -static char *history_event_delimiter_chars = HISTORY_EVENT_DELIMITERS; - static char *get_history_word_specifier PARAMS((char *, char *, int *)); static int history_tokenize_word PARAMS((const char *, int)); static char **history_tokenize_internal PARAMS((const char *, int, int *)); @@ -117,6 +112,7 @@ rl_linebuf_func_t *history_inhibit_expansion_function; /* The last string searched for by a !?string? search. */ static char *search_string; + /* The last string matched by a !?string? search. */ static char *search_match; @@ -229,7 +225,6 @@ get_history_event (string, caller_index, delimiting_quote) #endif /* HANDLE_MULTIBYTE */ if ((!substring_okay && (whitespace (c) || c == ':' || - (history_event_delimiter_chars && member (c, history_event_delimiter_chars)) || (history_search_delimiter_chars && member (c, history_search_delimiter_chars)) || string[i] == delimiting_quote)) || string[i] == '\n' || @@ -277,8 +272,6 @@ get_history_event (string, caller_index, delimiting_quote) if (local_index == 0 || substring_okay) { entry = current_history (); - if (entry == 0) - FAIL_SEARCH (); history_offset = history_length; /* If this was a substring search, then remember the @@ -526,9 +519,9 @@ postproc_subst_rhs () the returned string. Returns the new index into string in *END_INDEX_PTR, and the expanded specifier in *RET_STRING. */ static int -history_expand_internal (string, start, qc, end_index_ptr, ret_string, current_line) +history_expand_internal (string, start, end_index_ptr, ret_string, current_line) char *string; - int start, qc, *end_index_ptr; + int start, *end_index_ptr; char **ret_string; char *current_line; /* for !# */ { @@ -564,7 +557,30 @@ history_expand_internal (string, start, qc, end_index_ptr, ret_string, current_l event = current_line; } else - event = get_history_event (string, &i, qc); + { + int quoted_search_delimiter = 0; + + /* If the character before this `!' is a double or single + quote, then this expansion takes place inside of the + quoted string. If we have to search for some text ("!foo"), + allow the delimiter to end the search string. */ +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + int ch, l; + l = _rl_find_prev_mbchar (string, i, MB_FIND_ANY); + ch = string[l]; + /* XXX - original patch had i - 1 ??? If i == 0 it would fail. */ + if (i && (ch == '\'' || ch == '"')) + quoted_search_delimiter = ch; + } + else +#endif /* HANDLE_MULTIBYTE */ + if (i && (string[i - 1] == '\'' || string[i - 1] == '"')) + quoted_search_delimiter = string[i - 1]; + + event = get_history_event (string, &i, quoted_search_delimiter); + } if (event == 0) { @@ -838,7 +854,7 @@ history_expand_internal (string, start, qc, end_index_ptr, ret_string, current_l } i += 2; } - /* Done with modifiers. */ + /* Done with modfiers. */ /* Believe it or not, we have to back the pointer up by one. */ --i; @@ -878,7 +894,7 @@ history_expand_internal (string, start, qc, end_index_ptr, ret_string, current_l 1) If expansions did take place 2) If the `p' modifier was given and the caller should print the result - If an error occurred in expansion, then OUTPUT contains a descriptive + If an error ocurred in expansion, then OUTPUT contains a descriptive error message. */ #define ADD_STRING(s) \ @@ -912,7 +928,7 @@ history_expand (hstring, output) char **output; { register int j; - int i, r, l, passc, cc, modified, eindex, only_printing, dquote, squote, flag; + int i, r, l, passc, cc, modified, eindex, only_printing, dquote, flag; char *string; /* The output string, and its length. */ @@ -975,7 +991,7 @@ history_expand (hstring, output) /* `!' followed by one of the characters in history_no_expand_chars is NOT an expansion. */ - for (i = dquote = squote = 0; string[i]; i++) + for (i = dquote = 0; string[i]; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) @@ -996,7 +1012,6 @@ history_expand (hstring, output) history expansion performed on it. Skip the rest of the line and break out of the loop. */ if (history_comment_char && string[i] == history_comment_char && - dquote == 0 && (i == 0 || member (string[i - 1], history_word_delimiters))) { while (string[i]) @@ -1007,13 +1022,6 @@ history_expand (hstring, output) { if (cc == 0 || member (cc, history_no_expand_chars)) continue; - /* DQUOTE won't be set unless history_quotes_inhibit_expansion - is set. The idea here is to treat double-quoted strings the - same as the word outside double quotes; in effect making the - double quote part of history_no_expand_chars when DQUOTE is - set. */ - else if (dquote && cc == '"') - continue; /* If the calling application has set history_inhibit_expansion_function to a function that checks for special cases that should not be history expanded, @@ -1063,9 +1071,9 @@ history_expand (hstring, output) } /* Extract and perform the substitution. */ - for (passc = dquote = squote = i = j = 0; i < l; i++) + for (passc = dquote = i = j = 0; i < l; i++) { - int qc, tchar = string[i]; + int tchar = string[i]; if (passc) { @@ -1122,14 +1130,8 @@ history_expand (hstring, output) case '\'': { /* If history_quotes_inhibit_expansion is set, single quotes - inhibit history expansion, otherwise they are treated like - double quotes. */ - if (squote) - { - squote = 0; - ADD_CHAR (tchar); - } - else if (dquote == 0 && history_quotes_inhibit_expansion) + inhibit history expansion. */ + if (dquote == 0 && history_quotes_inhibit_expansion) { int quote, slen; @@ -1144,19 +1146,13 @@ history_expand (hstring, output) ADD_STRING (temp); xfree (temp); } - else if (dquote == 0 && squote == 0 && history_quotes_inhibit_expansion == 0) - { - squote = 1; - ADD_CHAR (string[i]); - } else ADD_CHAR (string[i]); break; } case -2: /* history_comment_char */ - if ((dquote == 0 || history_quotes_inhibit_expansion == 0) && - (i == 0 || member (string[i - 1], history_word_delimiters))) + if (i == 0 || member (string[i - 1], history_word_delimiters)) { temp = (char *)xmalloc (l - i + 1); strcpy (temp, string + i); @@ -1175,7 +1171,6 @@ history_expand (hstring, output) characters in history_no_expand_chars, then it is not a candidate for expansion of any kind. */ if (cc == 0 || member (cc, history_no_expand_chars) || - (dquote && cc == '"') || (history_inhibit_expansion_function && (*history_inhibit_expansion_function) (string, i))) { ADD_CHAR (string[i]); @@ -1201,8 +1196,8 @@ history_expand (hstring, output) break; } #endif - qc = squote ? '\'' : (dquote ? '"' : 0); - r = history_expand_internal (string, i, qc, &eindex, &temp, result); + + r = history_expand_internal (string, i, &eindex, &temp, result); if (r < 0) { *output = temp; |