commit bash-20190306 snapshot

This commit is contained in:
Chet Ramey
2019-03-07 12:08:22 -05:00
parent 97021559ab
commit f6388ab913
7 changed files with 145 additions and 16 deletions
+28
View File
@@ -5431,3 +5431,31 @@ examples/loadables/fdflags.c
execute_cmd.c
- execute_connection: call optimize_fork on the rhs of a `;' connection
to attempt to optimize the last simple command in a list
3/4
---
subst.c
- parameter_brace_expand: add `@' to the list of operators that cause
unbound parameter errors. Fixes oversight bug reported by
Martin Schulte <gnu@schrader-schulte.de>
3/5
---
subst.c
- expand_word_internal: update to fix from 2/21 and 2/27 to accommodate
contexts when word splitting will not take place (W_ASSIGNRHS). Fix
from Grisha Levit <grishalevit@gmail.com>
- param_expand: if IFS is unset, and we are expanding $* in a context
where we're not going to be performing word splitting, just treat it
as if IFS=" " and don't set W_SPLITSPACE. Report and hint at fix
from Grisha Levit <grishalevit@gmail.com>
- param_expand: if IFS is not null, and we are expanding $* in a
context where we're not going to be performing word splitting, and
we quote a null string (resulting in a quoted null), make sure we
set W_SAWQUOTEDNULL to note this for the caller
- parameter_brace_expand_rhs: make sure to remove any W_SAWQUOTEDNULL
flag for a the word on the rhs of the `=' operator if the original
string is null or the original string is not null and the returned
string (after dequoting) is not null. For instance ${v= ''} should
not have the SAWQUOTEDNULL flag set because it is " " after
expansion and dequoting, even though we saw a quoted null there
+1
View File
@@ -1009,6 +1009,7 @@ tests/dollar-star6.sub f
tests/dollar-star7.sub f
tests/dollar-star8.sub f
tests/dollar-star9.sub f
tests/dollar-star10.sub f
tests/dollar.right f
tests/dstack.tests f
tests/dstack.right f
+8 -5
View File
@@ -7,7 +7,7 @@ This document describes the GNU Readline Library, a utility for aiding
in the consistency of user interface across discrete programs that need
to provide a command line interface.
Copyright (C) 1988--2016 Free Software Foundation, Inc.
Copyright (C) 1988--2019 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -1733,8 +1733,8 @@ to determine whether or not there are any pending signals.
If an application does not wish Readline to catch @code{SIGWINCH}, it may
call @code{rl_resize_terminal()} or @code{rl_set_screen_size()} to force
Readline to update its idea of the terminal size when a @code{SIGWINCH}
is received.
Readline to update its idea of the terminal size when it receives
a @code{SIGWINCH}.
@deftypefun void rl_echo_signal_char (int sig)
If an application wishes to install its own signal handlers, but still
@@ -1751,11 +1751,14 @@ Update Readline's internal screen size by reading values from the kernel.
Set Readline's idea of the terminal size to @var{rows} rows and
@var{cols} columns. If either @var{rows} or @var{columns} is less than
or equal to 0, Readline's idea of that terminal dimension is unchanged.
This is intended to tell Readline the physical dimensions of the terminal,
and is used internally to calculate the maximum number of characters that
may appear on the screen.
@end deftypefun
If an application does not want to install a @code{SIGWINCH} handler, but
is still interested in the screen dimensions, Readline's idea of the screen
size may be queried.
is still interested in the screen dimensions, it may query Readline's idea
of the screen size.
@deftypefun void rl_get_screen_size (int *rows, int *cols)
Return Readline's idea of the terminal's size in the
+4 -4
View File
@@ -1,10 +1,10 @@
@ignore
Copyright (C) 1988-2018 Free Software Foundation, Inc.
Copyright (C) 1988-2019 Free Software Foundation, Inc.
@end ignore
@set EDITION 8.0
@set VERSION 8.0
@set UPDATED 30 November 2018
@set UPDATED-MONTH November 2018
@set UPDATED 6 March 2019
@set UPDATED-MONTH March 2019
@set LASTCHANGE Fri Nov 30 22:50:53 EST 2018
@set LASTCHANGE Wed Mar 6 09:51:02 EST 2019
+21 -7
View File
@@ -4,7 +4,7 @@
/* ``Have a little faith, there's magic in the night. You ain't a
beauty, but, hey, you're alright.'' */
/* Copyright (C) 1987-2018 Free Software Foundation, Inc.
/* Copyright (C) 1987-2019 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@@ -7055,6 +7055,11 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll
splitting, we want to quote the value we return appropriately, like
the other expansions this function handles. */
w->word = (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) ? quote_string (t1) : quote_escapes (t1);
/* If we have something that's non-null, that's not a quoted null string,
and we're not going to be performing word splitting (we know we're not
because the operator is `='), we can forget we saw a quoted null. */
if (w->word && w->word[0] && QUOTED_NULL (w->word) == 0)
w->flags &= ~W_SAWQUOTEDNULL;
free (t1);
return w;
@@ -8896,7 +8901,7 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
/* All the cases where an expansion can possibly generate an unbound
variable error. */
if (want_substring || want_patsub || want_casemod || c == '#' || c == '%' || c == RBRACE)
if (want_substring || want_patsub || want_casemod || c == '@' || c == '#' || c == '%' || c == RBRACE)
{
if (var_is_set == 0 && unbound_vars_is_error && ((name[0] != '@' && name[0] != '*') || name[1]) && all_element_arrayref == 0)
{
@@ -9317,9 +9322,14 @@ param_expand (string, sindex, quoted, expanded_something,
identical to $@ */
if (expand_no_split_dollar_star && quoted == 0 && ifs_is_set == 0 && (pflags & PF_ASSIGNRHS))
{
/* Posix interp 888: RHS of assignment, IFS unset */
temp = string_list_dollar_at (list, Q_DOUBLE_QUOTES, pflags);
tflag |= W_SPLITSPACE;
/* Posix interp 888: RHS of assignment, IFS unset: no splitting,
separate with space */
temp1 = string_list_dollar_star (list, quoted, pflags);
temp = temp1 ? quote_string (temp1) : temp1;
/* XXX - tentative - note that we saw a quoted null here */
if (temp1 && *temp1 == 0 && QUOTED_NULL (temp))
tflag |= W_SAWQUOTEDNULL;
FREE (temp1);
}
else if (expand_no_split_dollar_star && quoted == 0 && ifs_is_null && (pflags & PF_ASSIGNRHS))
{
@@ -9333,6 +9343,10 @@ param_expand (string, sindex, quoted, expanded_something,
/* Posix interp 888: RHS of assignment, IFS set to non-null value */
temp1 = string_list_dollar_star (list, quoted, pflags);
temp = temp1 ? quote_string (temp1) : temp1;
/* XXX - tentative - note that we saw a quoted null here */
if (temp1 && *temp1 == 0 && QUOTED_NULL (temp))
tflag |= W_SAWQUOTEDNULL;
FREE (temp1);
}
/* XXX - should we check ifs_is_set here as well? */
@@ -10314,7 +10328,7 @@ add_twochars:
this is when we are going to be performing word splitting,
since we have to preserve a null argument if the next character
will cause word splitting. */
if (temp == 0 && quoted_state == PARTIALLY_QUOTED && quoted == 0 && (word->flags & W_NOSPLIT) == 0 && (word->flags & W_EXPANDRHS))
if (temp == 0 && quoted_state == PARTIALLY_QUOTED && quoted == 0 && (word->flags & (W_NOSPLIT|W_EXPANDRHS|W_ASSIGNRHS)) == W_EXPANDRHS)
{
c = CTLNUL;
sindex--;
@@ -10373,7 +10387,7 @@ add_twochars:
partially quoted; such nulls are discarded. See above for the
exception, which is when the string is going to be split.
Posix interp 888/1129 */
if (temp == 0 && quoted_state == PARTIALLY_QUOTED && quoted == 0 && (word->flags & W_NOSPLIT) == 0 && (word->flags & W_EXPANDRHS))
if (temp == 0 && quoted_state == PARTIALLY_QUOTED && quoted == 0 && (word->flags & (W_NOSPLIT|W_EXPANDRHS|W_ASSIGNRHS)) == W_EXPANDRHS)
{
c = CTLNUL;
sindex--;
+4
View File
@@ -302,4 +302,8 @@ ${THIS_SH} ./dollar-at7.sub
# IFS is null
${THIS_SH} ./dollar-star9.sub
# more tests for expansions of $* when not splitting with IFS set or unset and
# null strings as the positional parameters
${THIS_SH} ./dollar-star10.sub
exit 0
+79
View File
@@ -0,0 +1,79 @@
oIFS=$IFS
set -- ''
unset v
recho ${v= ''}
recho $v
unset v
recho ${v=''}
recho $v
unset v
recho ${v= $*}
recho $v
unset v
recho ${v=$*}
recho $v
unset v
recho ${v='' }
recho $v
unset v
recho ${v= '' }
recho $v
unset v
recho ${v=$* }
recho $v
unset v
recho ${v= $* }
recho $v
unset IFS
unset v
recho ${v= ''}
recho $v
unset v
recho ${v=''}
recho $v
unset v
recho ${v= $*}
recho $v
unset v
recho ${v=$*}
recho $v
unset v
recho ${v='' }
recho $v
unset v
recho ${v= '' }
recho $v
unset v
recho ${v=$* }
recho $v
unset v
recho ${v= $* }
recho $v
unset -v v
IFS=$oIFS
# This shouldn't output anything
set -- '' ''
unset -v v
recho ${v=$*}
unset -v v
recho ${v= $*}
unset -v v
recho ${v=$* }
unset -v v
recho ${v= $* }
unset -v v IFS
recho ${v=$*}
unset -v v
recho ${v= $*}
unset -v v
recho ${v= $* }
unset -v v
recho ${v= $*}