Bash-5.2-rc3 release

This commit is contained in:
Chet Ramey
2022-08-26 11:08:51 -04:00
parent f36c8c8ecd
commit b3afafd86d
104 changed files with 26000 additions and 22555 deletions
+1 -1
View File
@@ -1184,7 +1184,7 @@ Returns the old timeout value.
@deftypefun int rl_set_timeout (unsigned int secs, unsigned int usecs)
Set a timeout for subsequent calls to @code{readline()}. If Readline does
not read a complete line, or the number of characters specified by
@code{rl_num_chars_to_read}, before the duration specfied by @var{secs}
@code{rl_num_chars_to_read}, before the duration specified by @var{secs}
(in seconds) and @var{usecs} (microseconds), it returns and sets
@code{RL_STATE_TIMEOUT} in @code{rl_readline_state}.
Passing 0 for @code{secs} and @code{usecs} cancels any previously set
+9 -2
View File
@@ -536,9 +536,12 @@ The default limit is @code{100}.
If set to @samp{on}, Readline will convert characters with the
eighth bit set to an @sc{ascii} key sequence by stripping the eighth
bit and prefixing an @key{ESC} character, converting them to a
meta-prefixed key sequence. The default value is @samp{on}, but
meta-prefixed key sequence.
The default value is @samp{on}, but
will be set to @samp{off} if the locale is one that contains
eight-bit characters.
This variable is dependent on the @code{LC_CTYPE} locale category, and
may change if the locale is changed.
@item disable-completion
@vindex disable-completion
@@ -649,6 +652,8 @@ regardless of what the terminal claims it can support. The
default value is @samp{off}, but Readline will set it to @samp{on} if the
locale contains eight-bit characters.
The name @code{meta-flag} is a synonym for this variable.
This variable is dependent on the @code{LC_CTYPE} locale category, and
may change if the locale is changed.
@item isearch-terminators
@vindex isearch-terminators
@@ -731,6 +736,8 @@ eighth bit set directly rather than as a meta-prefixed escape
sequence.
The default is @samp{off}, but Readline will set it to @samp{on} if the
locale contains eight-bit characters.
This variable is dependent on the @code{LC_CTYPE} locale category, and
may change if the locale is changed.
@item page-completions
@vindex page-completions
@@ -845,7 +852,7 @@ to a string that is inserted when the key is pressed (a @var{macro}).
@ifset BashFeatures
The @w{@code{bind -p}} command displays Readline function names and
bindings in a format that can put directly into an initialization file.
bindings in a format that can be put directly into an initialization file.
@xref{Bash Builtins}.
@end ifset
+3 -3
View File
@@ -5,7 +5,7 @@ Copyright (C) 1988-2022 Free Software Foundation, Inc.
@set EDITION 8.2
@set VERSION 8.2
@set UPDATED 11 March 2022
@set UPDATED-MONTH March 2022
@set UPDATED 12 August 2022
@set UPDATED-MONTH August 2022
@set LASTCHANGE Fri Mar 11 10:13:51 EST 2022
@set LASTCHANGE Fri Aug 12 11:10:50 EDT 2022
+69 -16
View File
@@ -57,6 +57,9 @@
static int utf8locale (char *);
#define RL_DEFAULT_LOCALE "C"
static char *_rl_current_locale = 0;
#if !defined (HAVE_SETLOCALE)
/* A list of legal values for the LANG or LC_CTYPE environment variables.
If a locale name in this list is the value for the LC_ALL, LC_CTYPE,
@@ -132,50 +135,61 @@ _rl_init_locale (void)
that doesn't return anything, we set lspec to the empty string to
force the subsequent call to setlocale() to define the `native'
environment. */
#if defined (HAVE_SETLOCALE)
if (lspec == 0 || *lspec == 0)
lspec = setlocale (LC_CTYPE, (char *)NULL);
if (lspec == 0)
lspec = "";
ret = setlocale (LC_CTYPE, lspec); /* ok, since it does not change locale */
#else
ret = (lspec == 0 || *lspec == 0) ? RL_DEFAULT_LOCALE : lspec;
#endif
_rl_utf8locale = (ret && *ret) ? utf8locale (ret) : 0;
_rl_current_locale = savestring (ret);
return ret;
}
/* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
to decide the defaults for 8-bit character input and output. Returns
1 if we set eight-bit mode. */
int
_rl_init_eightbit (void)
{
/* If we have setlocale(3), just check the current LC_CTYPE category
value, and go into eight-bit mode if it's not C or POSIX. */
value (passed as LOCALESTR), and go into eight-bit mode if it's not "C"
or "POSIX". If FORCE is non-zero, we reset the locale variables to values
appropriate for the C locale if the locale is "C" or "POSIX". FORCE is 0
when this is called from _rl_init_eightbit, since we're modifying the
default initial values and don't need to change anything else. If we
don't have setlocale(3), we check the codeset portion of LOCALESTR against
a set of known values and go into eight-bit mode if it matches one of those.
Returns 1 if we set eight-bit (multibyte) mode. */
static int
_rl_set_localevars (char *localestr, int force)
{
#if defined (HAVE_SETLOCALE)
char *lspec, *t;
t = _rl_init_locale (); /* returns static pointer */
if (t && *t && (t[0] != 'C' || t[1]) && (STREQ (t, "POSIX") == 0))
if (localestr && *localestr && (localestr[0] != 'C' || localestr[1]) && (STREQ (localestr, "POSIX") == 0))
{
_rl_meta_flag = 1;
_rl_convert_meta_chars_to_ascii = 0;
_rl_output_meta_chars = 1;
return (1);
}
else if (force)
{
/* Default "C" locale settings. */
_rl_meta_flag = 0;
_rl_convert_meta_chars_to_ascii = 1;
_rl_output_meta_chars = 0;
return (0);
}
else
return (0);
#else /* !HAVE_SETLOCALE */
char *lspec, *t;
char *t;
int i;
/* We don't have setlocale. Finesse it. Check the environment for the
appropriate variables and set eight-bit mode if they have the right
values. */
lspec = _rl_get_locale_var ("LC_CTYPE");
if (lspec == 0 || (t = normalize_codeset (lspec)) == 0)
if (localestr == 0 || (t = normalize_codeset (localestr)) == 0)
return (0);
for (i = 0; t && legal_lang_values[i]; i++)
if (STREQ (t, legal_lang_values[i]))
@@ -186,6 +200,14 @@ _rl_init_eightbit (void)
break;
}
if (force && legal_lang_values[i] == 0) /* didn't find it */
{
/* Default "C" locale settings. */
_rl_meta_flag = 0;
_rl_convert_meta_chars_to_ascii = 1;
_rl_output_meta_chars = 0;
}
_rl_utf8locale = *t ? STREQ (t, "utf8") : 0;
xfree (t);
@@ -193,6 +215,21 @@ _rl_init_eightbit (void)
#endif /* !HAVE_SETLOCALE */
}
/* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
to decide the defaults for 8-bit character input and output. Returns
1 if we set eight-bit mode. */
int
_rl_init_eightbit (void)
{
char *t, *ol;
ol = _rl_current_locale;
t = _rl_init_locale (); /* resets _rl_current_locale, returns static pointer */
xfree (ol);
return (_rl_set_localevars (t, 0));
}
#if !defined (HAVE_SETLOCALE)
static char *
normalize_codeset (char *codeset)
@@ -289,3 +326,19 @@ find_codeset (char *name, size_t *lenp)
return result;
}
void
_rl_reset_locale (void)
{
char *ol, *nl;
/* This should not be NULL; _rl_init_eightbit sets it on the first call to
readline() or rl_initialize(). */
ol = _rl_current_locale;
nl = _rl_init_locale (); /* resets _rl_current_locale */
if ((ol == 0 && nl) || (ol && nl && (STREQ (ol, nl) == 0)))
(void)_rl_set_localevars (nl, 1);
xfree (ol);
}
+1 -1
View File
@@ -1186,7 +1186,7 @@ rl_initialize (void)
RL_SETSTATE(RL_STATE_INITIALIZED);
}
else
(void)_rl_init_locale (); /* check current locale */
_rl_reset_locale (); /* check current locale and set locale variables */
/* Initialize the current line information. */
_rl_init_line_state ();
+1
View File
@@ -364,6 +364,7 @@ extern void _rl_revert_all_lines (void);
/* nls.c */
extern char *_rl_init_locale (void);
extern int _rl_init_eightbit (void);
extern void _rl_reset_locale (void);
/* parens.c */
extern void _rl_enable_paren_matching (int);
+15 -7
View File
@@ -1,6 +1,6 @@
/* setlinebuf.c - line-buffer a stdio stream. */
/* Copyright (C) 1997 Free Software Foundation, Inc.
/* Copyright (C) 1997,2022 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@@ -25,31 +25,39 @@
#include <xmalloc.h>
#if defined (USING_BASH_MALLOC)
# define LBUF_BUFSIZE 1008
# define LBUF_BUFSIZE 2016
#else
# define LBUF_BUFSIZE BUFSIZ
#endif
static char *stdoutbuf = 0;
static char *stderrbuf = 0;
/* Cause STREAM to buffer lines as opposed to characters or blocks. */
int
sh_setlinebuf (stream)
FILE *stream;
{
char *local_linebuf;
#if !defined (HAVE_SETLINEBUF) && !defined (HAVE_SETVBUF)
return (0);
#endif
#if defined (HAVE_SETVBUF)
char *local_linebuf;
#if defined (USING_BASH_MALLOC)
local_linebuf = (char *)xmalloc (LBUF_BUFSIZE);
if (stream == stdout && stdoutbuf == 0)
local_linebuf = stdoutbuf = (char *)xmalloc (LBUF_BUFSIZE);
else if (stream == stderr && stderrbuf == 0)
local_linebuf = stderrbuf = (char *)xmalloc (LBUF_BUFSIZE);
else
local_linebuf = (char *)NULL; /* let stdio handle it */
#else
local_linebuf = (char *)NULL;
#endif
#if defined (HAVE_SETVBUF)
return (setvbuf (stream, local_linebuf, _IOLBF, LBUF_BUFSIZE));
# else /* !HAVE_SETVBUF */
#else /* !HAVE_SETVBUF */
setlinebuf (stream);
return (0);