From: Chet Ramey Date: Sun, 4 Dec 2011 03:48:47 +0000 (-0500) Subject: commit bash-20060525 snapshot X-Git-Tag: bash-3.2-alpha~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13f8deccc047ca3819074466501a1ac38cd9ee5e;p=thirdparty%2Fbash.git commit bash-20060525 snapshot --- diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index 543128612..eea5e4be1 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -13419,3 +13419,23 @@ lib/readline/undo.c lib/readline/rlprivate.h - new extern declarations for _rl_copy_undo_{entry,list} + +execute_cmd.c + - change execute_cond_node so that quoting the rhs of the =~ + operator forces string matching, like the == and != operators + + 5/23 + ---- +redir.c + - add_undo_redirect now takes as an additional argument the type of + redirection we're trying to undo + - don't add a "preservation" redirection for fds > SHELL_FD_BASE if + the redirection is closing the fd + + 5/24 + ---- +subst.c + - make sure that parameter_brace_substring leaves this_command_name + set to either NULL or its previous value after setting it so that + arithmetic evaluation errors while expanding substring values + contain meaningful informationn diff --git a/CWRU/misc/open-files.c b/CWRU/misc/open-files.c index aa4ab0741..ca3d26ed4 100644 --- a/CWRU/misc/open-files.c +++ b/CWRU/misc/open-files.c @@ -21,6 +21,10 @@ #include #include #include + +#include +#include + #include main() diff --git a/redir.c b/redir.c index c9e53351e..0bd2d5f51 100644 --- a/redir.c +++ b/redir.c @@ -63,7 +63,7 @@ extern REDIRECT *exec_redirection_undo_list; /* Static functions defined and used in this file. */ static void add_undo_close_redirect __P((int)); static void add_exec_redirect __P((REDIRECT *)); -static int add_undo_redirect __P((int)); +static int add_undo_redirect __P((int, enum r_instruction)); static int expandable_redirection_filename __P((REDIRECT *)); static int stdin_redirection __P((enum r_instruction, int)); static int do_redirection_internal __P((REDIRECT *, int)); @@ -630,8 +630,8 @@ do_redirection_internal (redirect, flags) redirector = redirect->redirector; ri = redirect->instruction; -if (redirect->flags & RX_INTERNAL) - flags |= RX_INTERNAL; + if (redirect->flags & RX_INTERNAL) + flags |= RX_INTERNAL; if (TRANSLATE_REDIRECT (ri)) { @@ -757,7 +757,7 @@ if (redirect->flags & RX_INTERNAL) { /* Only setup to undo it if the thing to undo is active. */ if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1)) - add_undo_redirect (redirector); + add_undo_redirect (redirector, ri); else add_undo_close_redirect (redirector); } @@ -808,7 +808,7 @@ if (redirect->flags & RX_INTERNAL) if (flags & RX_ACTIVE) { if (flags & RX_UNDOABLE) - add_undo_redirect (2); + add_undo_redirect (2, ri); if (dup2 (1, 2) < 0) return (errno); } @@ -836,7 +836,7 @@ if (redirect->flags & RX_INTERNAL) { /* Only setup to undo it if the thing to undo is active. */ if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1)) - add_undo_redirect (redirector); + add_undo_redirect (redirector, ri); else add_undo_close_redirect (redirector); } @@ -878,7 +878,7 @@ if (redirect->flags & RX_INTERNAL) { /* Only setup to undo it if the thing to undo is active. */ if (fcntl (redirector, F_GETFD, 0) != -1) - add_undo_redirect (redirector); + add_undo_redirect (redirector, ri); else add_undo_close_redirect (redirector); } @@ -925,7 +925,7 @@ if (redirect->flags & RX_INTERNAL) if (flags & RX_ACTIVE) { if ((flags & RX_UNDOABLE) && (fcntl (redirector, F_GETFD, 0) != -1)) - add_undo_redirect (redirector); + add_undo_redirect (redirector, ri); #if defined (BUFFERED_INPUT) check_bash_input (redirector); @@ -951,8 +951,9 @@ if (redirect->flags & RX_INTERNAL) even if REDIRECTION_UNDO_LIST is discarded by the exec builtin are also saved on EXEC_REDIRECTION_UNDO_LIST. */ static int -add_undo_redirect (fd) +add_undo_redirect (fd, ri) int fd; + enum r_instruction ri; { int new_fd, clexec_flag; REDIRECT *new_redirect, *closer, *dummy_redirect; @@ -990,7 +991,7 @@ add_undo_redirect (fd) /* experimental: if we're saving a redirection to undo for a file descriptor above SHELL_FD_BASE, add a redirection to be undone if the exec builtin causes redirections to be discarded. */ - if (fd >= SHELL_FD_BASE) + if (fd >= SHELL_FD_BASE && ri != r_close_this) { rd.dest = new_fd; new_redirect = make_redirection (fd, r_duplicating_output, rd); diff --git a/subst.c b/subst.c index 04a24f723..cc1cfda8d 100644 --- a/subst.c +++ b/subst.c @@ -5485,22 +5485,27 @@ parameter_brace_substring (varname, value, substr, quoted) { intmax_t e1, e2; int vtype, r, starsub; - char *temp, *val, *tt; + char *temp, *val, *tt, *oname; SHELL_VAR *v; if (value == 0) return ((char *)NULL); + oname = this_command_name; this_command_name = varname; vtype = get_var_and_type (varname, value, quoted, &v, &val); if (vtype == -1) - return ((char *)NULL); + { + this_command_name = oname; + return ((char *)NULL); + } starsub = vtype & VT_STARSUB; vtype &= ~VT_STARSUB; r = verify_substring_values (val, substr, vtype, &e1, &e2); + this_command_name = oname; if (r <= 0) return ((r == 0) ? &expand_param_error : (char *)NULL);