Submitted By: Matt Burgess Date: 2010-10-11 Initial Package Version: 4.1 Upstream Status: Already in upstream patch repo Origin: Upstream Description: This patch contains upstream patch numbers 1 thru 9. diff -Naur bash-4.1.orig//bashline.c bash-4.1//bashline.c --- bash-4.1.orig//bashline.c 2009-10-24 19:10:19.000000000 +0100 +++ bash-4.1//bashline.c 2010-10-11 22:39:38.213029316 +0100 @@ -1680,7 +1680,7 @@ a single match (multiple matches that end up reducing the number of characters in the common prefix are bad) will ever be returned on regular completion. */ - if (glob_pattern_p (hint)) + if (globpat) { if (state == 0) { diff -Naur bash-4.1.orig//builtins/declare.def bash-4.1//builtins/declare.def --- bash-4.1.orig//builtins/declare.def 2009-11-26 00:42:00.000000000 +0000 +++ bash-4.1//builtins/declare.def 2010-10-11 22:39:38.397029565 +0100 @@ -512,7 +512,7 @@ { /* let bind_{array,assoc}_variable take care of this. */ if (assoc_p (var)) - bind_assoc_variable (var, name, "0", value, aflags); + bind_assoc_variable (var, name, savestring ("0"), value, aflags); else bind_array_variable (name, 0, value, aflags); } diff -Naur bash-4.1.orig//builtins/printf.def bash-4.1//builtins/printf.def --- bash-4.1.orig//builtins/printf.def 2009-11-20 20:31:23.000000000 +0000 +++ bash-4.1//builtins/printf.def 2010-10-11 22:39:38.381029548 +0100 @@ -117,7 +117,7 @@ else if (have_fieldwidth) \ nw = vflag ? vbprintf (f, fieldwidth, func) : printf (f, fieldwidth, func); \ else if (have_precision) \ - nw = vflag ? vbprintf (f, precision, func) : printf (f, fieldwidth, func); \ + nw = vflag ? vbprintf (f, precision, func) : printf (f, precision, func); \ else \ nw = vflag ? vbprintf (f, func) : printf (f, func); \ tw += nw; \ @@ -172,7 +172,7 @@ #endif #if !HAVE_VSNPRINTF -extern int vsnprintf __P((char *, size_t, const char *, ...)) __attribute__((__format__ (printf, 3, 4))); +extern int vsnprintf __P((char *, size_t, const char *, va_list)) __attribute__((__format__ (printf, 3, 0))); #endif static void printf_erange __P((char *)); diff -Naur bash-4.1.orig//builtins/read.def bash-4.1//builtins/read.def --- bash-4.1.orig//builtins/read.def 2009-10-08 16:35:46.000000000 +0100 +++ bash-4.1//builtins/read.def 2010-10-11 22:39:38.321029469 +0100 @@ -615,14 +615,15 @@ if (unbuffered_read == 0) zsyncfd (fd); - interrupt_immediately--; - terminate_immediately--; discard_unwind_frame ("read_builtin"); retval = eof ? EXECUTION_FAILURE : EXECUTION_SUCCESS; assign_vars: + interrupt_immediately--; + terminate_immediately--; + #if defined (ARRAY_VARS) /* If -a was given, take the string read, break it into a list of words, an assign them to `arrayname' in turn. */ diff -Naur bash-4.1.orig//lib/readline/complete.c bash-4.1//lib/readline/complete.c --- bash-4.1.orig//lib/readline/complete.c 2009-11-29 23:39:30.000000000 +0000 +++ bash-4.1//lib/readline/complete.c 2010-10-11 22:39:38.189029310 +0100 @@ -2138,7 +2138,7 @@ All other entries except "." and ".." match. */ if (filename_len == 0) { - if (_rl_match_hidden_files == 0 && HIDDEN_FILE (entry->d_name)) + if (_rl_match_hidden_files == 0 && HIDDEN_FILE (convfn)) continue; if (convfn[0] != '.' || @@ -2219,7 +2219,7 @@ temp[dirlen++] = '/'; } - strcpy (temp + dirlen, entry->d_name); + strcpy (temp + dirlen, convfn); } else temp = savestring (convfn); diff -Naur bash-4.1.orig//patchlevel.h bash-4.1//patchlevel.h --- bash-4.1.orig//patchlevel.h 2009-10-01 21:39:22.000000000 +0100 +++ bash-4.1//patchlevel.h 2010-10-11 22:39:38.433029614 +0100 @@ -25,6 +25,6 @@ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh looks for to find the patch level (for the sccs version string). */ -#define PATCHLEVEL 0 +#define PATCHLEVEL 9 #endif /* _PATCHLEVEL_H_ */ diff -Naur bash-4.1.orig//print_cmd.c bash-4.1//print_cmd.c --- bash-4.1.orig//print_cmd.c 2009-09-16 20:32:26.000000000 +0100 +++ bash-4.1//print_cmd.c 2010-10-11 22:39:38.357029519 +0100 @@ -113,6 +113,12 @@ #define CHECK_XTRACE_FP xtrace_fp = (xtrace_fp ? xtrace_fp : stderr) +#define PRINT_DEFERRED_HEREDOCS(x) \ + do { \ + if (deferred_heredocs) \ + print_deferred_heredocs (x); \ + } while (0) + /* Non-zero means the stuff being printed is inside of a function def. */ static int inside_function_def; static int skip_this_indent; @@ -560,13 +566,15 @@ FOR_COM *for_command; { print_for_command_head (for_command); - cprintf (";"); newline ("do\n"); + indentation += indentation_amount; make_command_string_internal (for_command->action); + PRINT_DEFERRED_HEREDOCS (""); semicolon (); indentation -= indentation_amount; + newline ("done"); } diff -Naur bash-4.1.orig//sig.c bash-4.1//sig.c --- bash-4.1.orig//sig.c 2009-08-14 21:31:52.000000000 +0100 +++ bash-4.1//sig.c 2010-10-11 22:39:38.421029599 +0100 @@ -655,6 +655,9 @@ act.sa_flags |= SA_INTERRUPT; /* XXX */ else act.sa_flags |= SA_RESTART; /* XXX */ +#else + if (sig == SIGCHLD) + act.sa_flags |= SA_RESTART; #endif sigemptyset (&act.sa_mask); sigemptyset (&oact.sa_mask); diff -Naur bash-4.1.orig//variables.c bash-4.1//variables.c --- bash-4.1.orig//variables.c 2009-11-03 19:13:58.000000000 +0000 +++ bash-4.1//variables.c 2010-10-11 22:39:38.281029411 +0100 @@ -3808,6 +3808,11 @@ if (tempvar_p (var) && (posixly_correct || (var->attributes & att_propagate))) { + /* Make sure we have a hash table to store the variable in while it is + being propagated down to the global variables table. Create one if + we have to */ + if ((vc_isfuncenv (shell_variables) || vc_istempenv (shell_variables)) && shell_variables->table == 0) + shell_variables->table = hash_create (0); /* XXX - should we set v->context here? */ v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0, 0); if (shell_variables == global_variables)