mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-08-01 16:03:39 +02:00
test suite fixes for some locales; fix to make bind -x bindings work with negative arguments; several portability fixes from pkgsrc; fixes for funsubs with return builtin state and local OPTIND
This commit is contained in:
+1
-1
@@ -299,7 +299,7 @@ static const unsigned long binsizes[NBUCKETS] = {
|
||||
};
|
||||
|
||||
/* binsizes[x] == (1 << ((x) + 5)) */
|
||||
#define binsize(x) binsizes[(x)]
|
||||
#define binsize(x) binsizes[(size_t) (x)]
|
||||
|
||||
#define MAXALLOC_SIZE binsizes[NBUCKETS-1]
|
||||
|
||||
|
||||
+23
-18
@@ -874,21 +874,30 @@ int
|
||||
rl_trim_arg_from_keyseq (const char *keyseq, size_t len, Keymap map)
|
||||
{
|
||||
register int i, j, parsing_digits;
|
||||
unsigned char ic;
|
||||
unsigned int ic; /* int to handle ANYOTHERKEY */
|
||||
Keymap map0;
|
||||
|
||||
if (map == 0)
|
||||
map = _rl_keymap;
|
||||
map0 = map;
|
||||
|
||||
/* The digits following the initial one (e.g., the binding to digit-argument)
|
||||
or the optional `-' in a binding to digit-argument or universal-argument
|
||||
are not added to rl_executing_keyseq. This is basically everything read by
|
||||
rl_digit_loop. The parsing_digits logic is here in case they ever are. */
|
||||
/* Make sure to add the digits following the initial one (e.g., the binding
|
||||
to digit-argument) and the optional `-' in a binding to digit-argument
|
||||
or universal-argument to rl_executing_keyseq. This is basically
|
||||
everything read by rl_digit_loop. */
|
||||
for (i = j = parsing_digits = 0; keyseq && i < len; i++)
|
||||
{
|
||||
ic = keyseq[i];
|
||||
|
||||
if (parsing_digits == 2)
|
||||
{
|
||||
if (ic == '-') /* skip over runs of minus chars */
|
||||
{
|
||||
j = i + 1;
|
||||
continue;
|
||||
}
|
||||
parsing_digits = 1;
|
||||
}
|
||||
if (parsing_digits)
|
||||
{
|
||||
if (_rl_digit_p (ic))
|
||||
@@ -901,10 +910,11 @@ rl_trim_arg_from_keyseq (const char *keyseq, size_t len, Keymap map)
|
||||
|
||||
if (map[ic].type == ISKMAP)
|
||||
{
|
||||
if (i + 1 == len)
|
||||
return -1;
|
||||
map = FUNCTION_TO_KEYMAP (map, ic);
|
||||
continue;
|
||||
if (i + 1 == len)
|
||||
ic = ANYOTHERKEY;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
if (map[ic].type == ISFUNC)
|
||||
{
|
||||
@@ -923,16 +933,11 @@ rl_trim_arg_from_keyseq (const char *keyseq, size_t len, Keymap map)
|
||||
|
||||
/* This logic should be identical to rl_digit_loop */
|
||||
/* We accept M-- as equivalent to M--1, C-u- as equivalent to C-u-1
|
||||
but set parsing_digits to 2 to note that we saw `-' */
|
||||
if (map[ic].function == rl_universal_argument && (i + 1 == '-'))
|
||||
{
|
||||
i++;
|
||||
parsing_digits = 2;
|
||||
}
|
||||
if (map[ic].function == rl_digit_argument && ic == '-')
|
||||
{
|
||||
parsing_digits = 2;
|
||||
}
|
||||
but set parsing_digits to 2 to note that we saw `-'. See above
|
||||
for the check that skips over one or more `-' characters. */
|
||||
if (map[ic].function == rl_universal_argument ||
|
||||
(map[ic].function == rl_digit_argument && ic == '-'))
|
||||
parsing_digits = 2;
|
||||
|
||||
map = map0;
|
||||
j = i + 1;
|
||||
|
||||
@@ -999,7 +999,7 @@ rl_redisplay (void)
|
||||
the line breaks in the prompt string in expand_prompt, taking invisible
|
||||
characters into account, and if lpos exceeds the screen width, we copy
|
||||
the data in the loop below. */
|
||||
lpos = prompt_physical_chars + modmark;
|
||||
lpos = local_prompt ? prompt_physical_chars + modmark : 0;
|
||||
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
memset (line_state_invisible->wrapped_line, 0, line_state_invisible->wbsize * sizeof (int));
|
||||
|
||||
Reference in New Issue
Block a user