From 33c8cd6ef854b1b10067c9cdabfcdc08a8ebd47a Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 4 Apr 2006 21:19:30 +0000 Subject: bash 3.0: Add various fixes from upstream (from Stelios Koroneos #767) --- packages/bash/bash-3.0/bash-3.0-fixes.patch | 1604 +++++++++++++++++++++++++++ packages/bash/bash_3.0.bb | 1 + 2 files changed, 1605 insertions(+) create mode 100644 packages/bash/bash-3.0/bash-3.0-fixes.patch diff --git a/packages/bash/bash-3.0/bash-3.0-fixes.patch b/packages/bash/bash-3.0/bash-3.0-fixes.patch new file mode 100644 index 0000000000..c2083b67a5 --- /dev/null +++ b/packages/bash/bash-3.0/bash-3.0-fixes.patch @@ -0,0 +1,1604 @@ +diff -urN orig-bash-3.0/bash30-001 bash-3.0/bash30-001 +--- orig-bash-3.0/bash30-001 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-001 2005-02-14 22:33:55.000000000 +0200 +@@ -0,0 +1,164 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-001 ++ ++Bug-Reported-by: Karlheinz Nolte ++Bug-Reference-ID: <20040801200058.GA3311@mars.home.k-nolte.de> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00009.html ++ ++Bug-Description: ++ ++ The following script triggers the segfault. ++ This was found by Costa Tsaousis the author of FireHOL. ++ He wrotes: ++ ++ "I think I have found the bug. The script bellow crashes at the ++ third echo (UNSET). It seems to be a problem of the "unset" BASH ++ function when erasing arrays. It leaves something behind so that if ++ the array just unset is referenced, it produces a segmentation fault. ++ According to the documentation the first and the third expansions ++ should be exactly the same." ++ ++Patch: ++ ++*** ../bash-3.0/arrayfunc.c Fri Dec 19 00:03:09 2003 ++--- arrayfunc.c Sun Aug 1 20:43:00 2004 ++*************** ++*** 612,616 **** ++ ++ free (t); ++! return var; ++ } ++ ++--- 612,616 ---- ++ ++ free (t); ++! return (var == 0 || invisible_p (var)) ? (SHELL_VAR *)0 : var; ++ } ++ ++ ++*** ../bash-3.0/subst.c Sun Jul 4 13:56:13 2004 ++--- subst.c Thu Aug 12 13:36:17 2004 ++*************** ++*** 4983,4987 **** ++ return -1; ++ } ++! else if ((v = find_variable (varname)) && array_p (v)) ++ { ++ vtype = VT_ARRAYMEMBER; ++--- 5003,5007 ---- ++ return -1; ++ } ++! else if ((v = find_variable (varname)) && (invisible_p (v) == 0) && array_p (v)) ++ { ++ vtype = VT_ARRAYMEMBER; ++ ++*** ../bash-3.0/variables.c Sun Jul 4 13:57:26 2004 ++--- variables.c Wed Aug 4 15:28:04 2004 ++*************** ++*** 1420,1428 **** ++ ++ # if defined (DEBUGGER) ++! v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, (att_invisible|att_noassign)); ++! v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, (att_invisible|att_noassign)); ++ # endif /* DEBUGGER */ ++! v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, (att_invisible|att_noassign)); ++! v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, (att_invisible|att_noassign)); ++ #endif ++ ++--- 1420,1428 ---- ++ ++ # if defined (DEBUGGER) ++! v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, att_noassign); ++! v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, att_noassign); ++ # endif /* DEBUGGER */ ++! v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, att_noassign); ++! v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, att_noassign); ++ #endif ++ ++*************** ++*** 1600,1604 **** ++ old_var = find_variable (name); ++ if (old_var && local_p (old_var) && old_var->context == variable_context) ++! return (old_var); ++ ++ was_tmpvar = old_var && tempvar_p (old_var); ++--- 1600,1607 ---- ++ old_var = find_variable (name); ++ if (old_var && local_p (old_var) && old_var->context == variable_context) ++! { ++! VUNSETATTR (old_var, att_invisible); ++! return (old_var); ++! } ++ ++ was_tmpvar = old_var && tempvar_p (old_var); ++*** ../bash-3.0/pcomplete.c Thu Jan 8 10:36:17 2004 ++--- pcomplete.c Tue Aug 3 23:15:41 2004 ++*************** ++*** 864,867 **** ++--- 864,869 ---- ++ v = convert_var_to_array (v); ++ v = assign_array_var_from_word_list (v, lwords); +++ +++ VUNSETATTR (v, att_invisible); ++ return v; ++ } ++*************** ++*** 1022,1025 **** ++--- 1024,1029 ---- ++ if (array_p (v) == 0) ++ v = convert_var_to_array (v); +++ +++ VUNSETATTR (v, att_invisible); ++ ++ a = array_cell (v); ++*** ../bash-3.0/array.c Thu May 6 08:24:13 2004 ++--- array.c Wed Aug 25 15:50:42 2004 ++*************** ++*** 452,456 **** ++ array_dispose_element(new); ++ free(element_value(ae)); ++! ae->value = savestring(v); ++ return(0); ++ } else if (element_index(ae) > i) { ++--- 454,458 ---- ++ array_dispose_element(new); ++ free(element_value(ae)); ++! ae->value = v ? savestring(v) : (char *)NULL; ++ return(0); ++ } else if (element_index(ae) > i) { ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 0 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 1 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++*** ../bash-3.0/tests/dbg-support.tests Tue Mar 25 15:33:03 2003 ++--- tests/dbg-support.tests Tue Aug 3 23:09:29 2004 ++*************** ++*** 63,68 **** ++ trap 'print_return_trap $LINENO' RETURN ++ ++! # Funcname is now an array. Vanilla Bash 2.05 doesn't have FUNCNAME array. ++! echo "FUNCNAME" ${FUNCNAME[0]} ++ ++ # We should trace into the below. ++--- 63,68 ---- ++ trap 'print_return_trap $LINENO' RETURN ++ ++! # Funcname is now an array, but you still can't see it outside a function ++! echo "FUNCNAME" ${FUNCNAME[0]:-main} ++ ++ # We should trace into the below. +diff -urN orig-bash-3.0/bash30-002 bash-3.0/bash30-002 +--- orig-bash-3.0/bash30-002 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-002 2005-02-14 22:33:55.000000000 +0200 +@@ -0,0 +1,66 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-002 ++ ++Bug-Reported-by: "Ralf S. Engelschall" ++Bug-Reference-ID: <20040728082038.GA31398@engelschall.com> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00262.html ++ ++Bug-Description: ++ ++After upgrading the OpenPKG "bash" package to 3.0, we had to discover ++that the prompt handling on Bash 3.0 / Readline 5.0 is broken if a ++multiline prompt (a string containing newlines) is used. The effect is ++that on the first input line (where the last line of the prompt is the ++prefix) the input line is wrapped N characters before the last column ++where N seems to be exactly the length (including newlines) of the ++prompt ($PS1) minus the characters on the last line of the prompt. ++ ++Patch: ++ ++*** ../bash-3.0/lib/readline/display.c Thu May 27 22:57:51 2004 ++--- lib/readline/display.c Wed Jul 28 13:48:04 2004 ++*************** ++*** 352,356 **** ++ &prompt_last_invisible, ++ (int *)NULL, ++! (int *)NULL); ++ c = *t; *t = '\0'; ++ /* The portion of the prompt string up to and including the ++--- 352,356 ---- ++ &prompt_last_invisible, ++ (int *)NULL, ++! &prompt_physical_chars); ++ c = *t; *t = '\0'; ++ /* The portion of the prompt string up to and including the ++*************** ++*** 359,363 **** ++ (int *)NULL, ++ &prompt_invis_chars_first_line, ++! &prompt_physical_chars); ++ *t = c; ++ return (prompt_prefix_length); ++--- 359,363 ---- ++ (int *)NULL, ++ &prompt_invis_chars_first_line, ++! (int *)NULL); ++ *t = c; ++ return (prompt_prefix_length); ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 1 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 2 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-003 bash-3.0/bash30-003 +--- orig-bash-3.0/bash30-003 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-003 2005-02-14 22:33:56.000000000 +0200 +@@ -0,0 +1,124 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-003 ++ ++Bug-Reported-by: Egmont Koblinger ++Bug-Reference-ID: ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00279.html ++ ++Bug-Description: ++ ++Bash no longer accepts the `trap signum' syntax when in POSIX mode. This ++patch restores a measure of backwards compatibility. ++ ++Patch: ++ ++*** ../bash-3.0/builtins/trap.def Thu May 27 22:26:19 2004 ++--- builtins/trap.def Thu Aug 5 08:55:43 2004 ++*************** ++*** 24,28 **** ++ $BUILTIN trap ++ $FUNCTION trap_builtin ++! $SHORT_DOC trap [-lp] [[arg] signal_spec ...] ++ The command ARG is to be read and executed when the shell receives ++ signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC ++--- 24,28 ---- ++ $BUILTIN trap ++ $FUNCTION trap_builtin ++! $SHORT_DOC trap [-lp] [arg signal_spec ...] ++ The command ARG is to be read and executed when the shell receives ++ signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC ++*************** ++*** 88,92 **** ++ WORD_LIST *list; ++ { ++! int list_signal_names, display, result, opt; ++ ++ list_signal_names = display = 0; ++--- 88,92 ---- ++ WORD_LIST *list; ++ { ++! int list_signal_names, display, result, opt, first_signal; ++ ++ list_signal_names = display = 0; ++*************** ++*** 119,130 **** ++ { ++ char *first_arg; ++! int operation, sig; ++ ++ operation = SET; ++ first_arg = list->word->word; ++ /* When in posix mode, the historical behavior of looking for a ++ missing first argument is disabled. To revert to the original ++ signal handling disposition, use `-' as the first argument. */ ++! if (posixly_correct == 0 && first_arg && *first_arg && ++ (*first_arg != '-' || first_arg[1]) && ++ signal_object_p (first_arg, opt) && list->next == 0) ++--- 119,135 ---- ++ { ++ char *first_arg; ++! int operation, sig, first_signal; ++ ++ operation = SET; ++ first_arg = list->word->word; +++ first_signal = first_arg && *first_arg && all_digits (first_arg) && signal_object_p (first_arg, opt); +++ +++ /* Backwards compatibility */ +++ if (first_signal) +++ operation = REVERT; ++ /* When in posix mode, the historical behavior of looking for a ++ missing first argument is disabled. To revert to the original ++ signal handling disposition, use `-' as the first argument. */ ++! else if (posixly_correct == 0 && first_arg && *first_arg && ++ (*first_arg != '-' || first_arg[1]) && ++ signal_object_p (first_arg, opt) && list->next == 0) ++*** ../bash-3.0/doc/bashref.texi Sat Jun 26 14:26:07 2004 ++--- doc/bashref.texi Fri Aug 27 12:33:46 2004 ++*************** ++*** 5954,5958 **** ++ The @code{trap} builtin doesn't check the first argument for a possible ++ signal specification and revert the signal handling to the original ++! disposition if it is. If users want to reset the handler for a given ++ signal to the original disposition, they should use @samp{-} as the ++ first argument. ++--- 5967,5972 ---- ++ The @code{trap} builtin doesn't check the first argument for a possible ++ signal specification and revert the signal handling to the original ++! disposition if it is, unless that argument consists solely of digits and ++! is a valid signal number. If users want to reset the handler for a given ++ signal to the original disposition, they should use @samp{-} as the ++ first argument. ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 2 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 3 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++*** ../bash-3.0/tests/errors.right Thu May 27 22:26:03 2004 ++--- tests/errors.right Sat Aug 7 22:35:10 2004 ++*************** ++*** 86,90 **** ++ ./errors.tests: line 216: trap: NOSIG: invalid signal specification ++ ./errors.tests: line 219: trap: -s: invalid option ++! trap: usage: trap [-lp] [[arg] signal_spec ...] ++ ./errors.tests: line 225: return: can only `return' from a function or sourced script ++ ./errors.tests: line 229: break: 0: loop count out of range ++--- 86,90 ---- ++ ./errors.tests: line 216: trap: NOSIG: invalid signal specification ++ ./errors.tests: line 219: trap: -s: invalid option ++! trap: usage: trap [-lp] [arg signal_spec ...] ++ ./errors.tests: line 225: return: can only `return' from a function or sourced script ++ ./errors.tests: line 229: break: 0: loop count out of range +diff -urN orig-bash-3.0/bash30-004 bash-3.0/bash30-004 +--- orig-bash-3.0/bash30-004 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-004 2005-02-14 22:33:56.000000000 +0200 +@@ -0,0 +1,145 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-004 ++ ++Bug-Reported-by: Stephane Chazelas ++Bug-Reference-ID: <20040902131957.GC1860@frhdtmp102861.morse.corp.wan> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00291.html ++ ++Bug-Description: ++ ++Calculation of lengths and offsets for parameter string length and substring ++expansion does not correctly account for multibyte characters. ++ ++Patch: ++ ++ *** ../bash-3.0/subst.c Sun Jul 4 13:56:13 2004 ++--- subst.c Thu Aug 12 13:36:17 2004 ++*************** ++*** 4692,4695 **** ++--- 4692,4715 ---- ++ } ++ +++ #if defined (HANDLE_MULTIBYTE) +++ size_t +++ mbstrlen (s) +++ const char *s; +++ { +++ size_t clen, nc; +++ mbstate_t mbs; +++ +++ nc = 0; +++ memset (&mbs, 0, sizeof (mbs)); +++ while ((clen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && (MB_INVALIDCH(clen) == 0)) +++ { +++ s += clen; +++ nc++; +++ } +++ return nc; +++ } +++ #endif +++ +++ ++ /* Handle the parameter brace expansion that requires us to return the ++ length of a parameter. */ ++*************** ++*** 4747,4758 **** ++ { ++ t = get_dollar_var_value (arg_index); ++! number = STRLEN (t); ++ FREE (t); ++ } ++ #if defined (ARRAY_VARS) ++! else if ((var = find_variable (name + 1)) && array_p (var)) ++ { ++ t = array_reference (array_cell (var), 0); ++! number = STRLEN (t); ++ } ++ #endif ++--- 4767,4778 ---- ++ { ++ t = get_dollar_var_value (arg_index); ++! number = MB_STRLEN (t); ++ FREE (t); ++ } ++ #if defined (ARRAY_VARS) ++! else if ((var = find_variable (name + 1)) && (invisible_p (var) == 0) && array_p (var)) ++ { ++ t = array_reference (array_cell (var), 0); ++! number = MB_STRLEN (t); ++ } ++ #endif ++*************** ++*** 4767,4771 **** ++ dispose_words (list); ++ ++! number = STRLEN (t); ++ FREE (t); ++ } ++--- 4787,4791 ---- ++ dispose_words (list); ++ ++! number = MB_STRLEN (t); ++ FREE (t); ++ } ++*************** ++*** 4872,4876 **** ++ case VT_VARIABLE: ++ case VT_ARRAYMEMBER: ++! len = strlen (value); ++ break; ++ case VT_POSPARMS: ++--- 4892,4896 ---- ++ case VT_VARIABLE: ++ case VT_ARRAYMEMBER: ++! len = MB_STRLEN (value); ++ break; ++ case VT_POSPARMS: ++*** ../bash-3.0/include/shmbutil.h Mon Apr 19 09:59:42 2004 ++--- include/shmbutil.h Thu Sep 2 15:20:47 2004 ++*************** ++*** 32,35 **** ++--- 32,37 ---- ++ extern size_t xdupmbstowcs __P((wchar_t **, char ***, const char *)); ++ +++ extern size_t mbstrlen __P((const char *)); +++ ++ extern char *xstrchr __P((const char *, int)); ++ ++*************** ++*** 39,42 **** ++--- 41,47 ---- ++ #endif ++ +++ #define MBSLEN(s) (((s) && (s)[0]) ? ((s)[1] ? mbstrlen (s) : 1) : 0) +++ #define MB_STRLEN(s) ((MB_CUR_MAX > 1) ? MBSLEN (s) : STRLEN (s)) +++ ++ #else /* !HANDLE_MULTIBYTE */ ++ ++*************** ++*** 54,57 **** ++--- 59,64 ---- ++ #define MB_NULLWCH(x) (0) ++ #endif +++ +++ #define MB_STRLEN(s) (STRLEN(s)) ++ ++ #endif /* !HANDLE_MULTIBYTE */ ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 3 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 4 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-005 bash-3.0/bash30-005 +--- orig-bash-3.0/bash30-005 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-005 2005-02-14 22:33:57.000000000 +0200 +@@ -0,0 +1,63 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-005 ++ ++Bug-Reported-by: schwab@suse.de ++Bug-Reference-ID: <20040801085535.E83D41DB3FFE9@sykes.suse.de> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00004.html ++ ++Bug-Description: ++ ++Moving upwards in the history (with previous-history) and back again ++clobbers the last history line. ++ ++Patch: ++ ++*** ../bash-3.0/lib/readline/misc.c Wed Jul 7 08:56:32 2004 ++--- lib/readline/misc.c Sat Aug 7 22:38:53 2004 ++*************** ++*** 277,286 **** ++ _rl_saved_line_for_history->data = (char *)rl_undo_list; ++ } ++- else if (STREQ (rl_line_buffer, _rl_saved_line_for_history->line) == 0) ++- { ++- free (_rl_saved_line_for_history->line); ++- _rl_saved_line_for_history->line = savestring (rl_line_buffer); ++- _rl_saved_line_for_history->data = (char *)rl_undo_list; /* XXX possible memleak */ ++- } ++ ++ return 0; ++--- 277,280 ---- ++*** ../bash-3.0/lib/readline/vi_mode.c Tue Jul 13 14:08:27 2004 ++--- lib/readline/vi_mode.c Tue Aug 17 00:12:09 2004 ++*************** ++*** 273,280 **** ++--- 273,282 ---- ++ { ++ case '?': +++ _rl_free_saved_history_line (); ++ rl_noninc_forward_search (count, key); ++ break; ++ ++ case '/': +++ _rl_free_saved_history_line (); ++ rl_noninc_reverse_search (count, key); ++ break; ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 4 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 5 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-006 bash-3.0/bash30-006 +--- orig-bash-3.0/bash30-006 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-006 2005-02-14 22:33:57.000000000 +0200 +@@ -0,0 +1,165 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-006 ++ ++Bug-Reported-by: alexander@skwar.name ++ Tomohiro KUBOTA ++Bug-Reference-ID: <20040801124721.C69B8A2547A@server.bei.digitalprojects.com> ++ <16688.41450.433668.480445@gargle.gargle.HOWL> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00006.html ++ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=257540 ++ ++Bug-Description: ++ ++Prompts with multibyte characters or invisible characters following a line ++wrap are displayed incorrectly. ++ ++Patch: ++ ++*** ../bash-3.0/lib/readline/display.c Thu May 27 22:57:51 2004 ++--- lib/readline/display.c Mon Aug 30 11:55:02 2004 ++*************** ++*** 202,206 **** ++ { ++ char *r, *ret, *p; ++! int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars; ++ ++ /* Short-circuit if we can. */ ++--- 202,206 ---- ++ { ++ char *r, *ret, *p; ++! int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars; ++ ++ /* Short-circuit if we can. */ ++*************** ++*** 223,226 **** ++--- 223,227 ---- ++ ++ invfl = 0; /* invisible chars in first line of prompt */ +++ invflset = 0; /* we only want to set invfl once */ ++ ++ for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++) ++*************** ++*** 250,254 **** ++ *r++ = *p++; ++ if (!ignoring) ++! rl += ind - pind; ++ else ++ ninvis += ind - pind; ++--- 251,258 ---- ++ *r++ = *p++; ++ if (!ignoring) ++! { ++! rl += ind - pind; ++! physchars += _rl_col_width (pmt, pind, ind); ++! } ++ else ++ ninvis += ind - pind; ++*************** ++*** 260,273 **** ++ *r++ = *p; ++ if (!ignoring) ++! rl++; /* visible length byte counter */ ++ else ++ ninvis++; /* invisible chars byte counter */ ++ } ++ ++! if (rl >= _rl_screenwidth) ++! invfl = ninvis; ++! ++! if (ignoring == 0) ++! physchars++; ++ } ++ } ++--- 264,280 ---- ++ *r++ = *p; ++ if (!ignoring) ++! { ++! rl++; /* visible length byte counter */ ++! physchars++; ++! } ++ else ++ ninvis++; /* invisible chars byte counter */ ++ } ++ ++! if (invflset == 0 && rl >= _rl_screenwidth) ++! { ++! invfl = ninvis; ++! invflset = 1; ++! } ++ } ++ } ++*************** ++*** 418,422 **** ++ register char *line; ++ int c_pos, inv_botlin, lb_botlin, lb_linenum; ++! int newlines, lpos, temp, modmark; ++ char *prompt_this_line; ++ #if defined (HANDLE_MULTIBYTE) ++--- 425,429 ---- ++ register char *line; ++ int c_pos, inv_botlin, lb_botlin, lb_linenum; ++! int newlines, lpos, temp, modmark, n0, num; ++ char *prompt_this_line; ++ #if defined (HANDLE_MULTIBYTE) ++*************** ++*** 574,577 **** ++--- 581,585 ---- ++ #if defined (HANDLE_MULTIBYTE) ++ memset (_rl_wrapped_line, 0, vis_lbsize); +++ num = 0; ++ #endif ++ ++*************** ++*** 592,596 **** ++--- 600,619 ---- ++ prompts that exceed two physical lines? ++ Additional logic fix from Edward Catmur */ +++ #if defined (HANDLE_MULTIBYTE) +++ n0 = num; +++ temp = local_prompt ? strlen (local_prompt) : 0; +++ while (num < temp) +++ { +++ if (_rl_col_width (local_prompt, n0, num) > _rl_screenwidth) +++ { +++ num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY); +++ break; +++ } +++ num++; +++ } +++ temp = num + +++ #else ++ temp = ((newlines + 1) * _rl_screenwidth) + +++ #endif /* !HANDLE_MULTIBYTE */ ++ ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line ++ : ((newlines == 1) ? wrap_offset : 0)) ++*************** ++*** 598,602 **** ++--- 621,629 ---- ++ ++ inv_lbreaks[++newlines] = temp; +++ #if defined (HANDLE_MULTIBYTE) +++ lpos -= _rl_col_width (local_prompt, n0, num); +++ #else ++ lpos -= _rl_screenwidth; +++ #endif ++ } ++ ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 5 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 6 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-007 bash-3.0/bash30-007 +--- orig-bash-3.0/bash30-007 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-007 2005-02-14 22:33:58.000000000 +0200 +@@ -0,0 +1,78 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-007 ++ ++Bug-Reported-by: Oliver Kiddle ++ Tim Waugh ++Bug-Reference-ID: <10454.1091313247@athlon> ++ <20040804100140.GX8175@redhat.com> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00313.html ++ http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00056.html ++ ++Bug-Description: ++ ++Two bugs: ++ ++How does it decide what characters are allowed. The following really ++looks like a bug to me: ++$ echo {..D} ++That's accepted and produces output that seems to wrap round to ^A and ++then goes up to D. Note that I'm using an ISO-8859-1 locale. If that ++works at all, it should surely descend. ++ ++This short script: ++ ++var=baz ++echo foo{bar,${var}.} ++echo foo{bar,${var}} ++ ++gives the following output with bash-3.0: ++ ++./test: line 2: foo${var.}: bad substitution ++foobar} foobaz ++ ++Patch: ++ ++*** ../bash-3.0/braces.c Thu Dec 4 11:09:52 2003 ++--- braces.c Wed Aug 4 14:34:33 2004 ++*************** ++*** 341,346 **** ++ if (lhs_t == ST_CHAR) ++ { ++! lhs_v = lhs[0]; ++! rhs_v = rhs[0]; ++ } ++ else ++--- 341,346 ---- ++ if (lhs_t == ST_CHAR) ++ { ++! lhs_v = (unsigned char)lhs[0]; ++! rhs_v = (unsigned char)rhs[0]; ++ } ++ else ++*************** ++*** 403,406 **** ++--- 403,407 ---- ++ pass_next = 1; ++ i++; +++ level++; ++ continue; ++ } ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 6 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 7 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-008 bash-3.0/bash30-008 +--- orig-bash-3.0/bash30-008 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-008 2005-02-14 22:33:58.000000000 +0200 +@@ -0,0 +1,55 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-008 ++ ++Bug-Reported-by: uberlord@rsm.demon.co.uk ++Bug-Reference-ID: <1092327965.4233.1.camel@uberlaptop.ubernet> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00144.html ++ ++Bug-Description: ++ ++> Description: ++> Bash 3 breaks array expansion ++> ++> Repeat-By: ++> #!/bin/bash ++> x=(one two) ++> echo ${x[@]:1} ++> # prints nothing in bash 3 ++> # prints two in bash 2 ++ ++Patch: ++ ++*** ../bash-3.0/subst.c Sun Jul 4 13:56:13 2004 ++--- subst.c Thu Aug 12 13:36:17 2004 ++*************** ++*** 4892,4896 **** ++ *e1p += len; ++ ++! if (*e1p >= len || *e1p < 0) ++ return (-1); ++ ++--- 4912,4916 ---- ++ *e1p += len; ++ ++! if (*e1p > len || *e1p < 0) ++ return (-1); ++ ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 7 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 8 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-009 bash-3.0/bash30-009 +--- orig-bash-3.0/bash30-009 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-009 2005-02-14 22:33:58.000000000 +0200 +@@ -0,0 +1,111 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-009 ++ ++Bug-Reported-by: Tim Waugh ++Bug-Reference-ID: <20040810083805.GT2177@redhat.com> ++Bug-Reference-URL: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=129526b ++ http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00116.html ++ ++Bug-Description: ++ ++--> ++Steps to Reproduce: ++1. Launch a bash shell ++2. Set editing mode to 'vi' with 'set -o vi' ++3. Type any command, but don't hit return ++4. Enter vi-command mode by hitting the escape key ++5. Go to the end of line with the '$' command ++6. Type 'r' to change the last character ++7. Type any character (other than what the character already is) ++ ++The last two characters are inexplicably swapped ++after the last character is changed. ++<-- ++ ++Patch: ++ ++*** ../bash-3.0/lib/readline/vi_mode.c Tue Jul 13 14:08:27 2004 ++--- lib/readline/vi_mode.c Tue Aug 17 00:12:09 2004 ++*************** ++*** 691,695 **** ++ wchar_t wc; ++ char mb[MB_LEN_MAX+1]; ++! int mblen; ++ mbstate_t ps; ++ ++--- 693,697 ---- ++ wchar_t wc; ++ char mb[MB_LEN_MAX+1]; ++! int mblen, p; ++ mbstate_t ps; ++ ++*************** ++*** 714,722 **** ++ if (wc) ++ { ++ mblen = wcrtomb (mb, wc, &ps); ++ if (mblen >= 0) ++ mb[mblen] = '\0'; ++ rl_begin_undo_group (); ++! rl_delete (1, 0); ++ rl_insert_text (mb); ++ rl_end_undo_group (); ++--- 716,727 ---- ++ if (wc) ++ { +++ p = rl_point; ++ mblen = wcrtomb (mb, wc, &ps); ++ if (mblen >= 0) ++ mb[mblen] = '\0'; ++ rl_begin_undo_group (); ++! rl_vi_delete (1, 0); ++! if (rl_point < p) /* Did we retreat at EOL? */ ++! rl_point++; /* XXX - should we advance more than 1 for mbchar? */ ++ rl_insert_text (mb); ++ rl_end_undo_group (); ++*************** ++*** 1311,1320 **** ++ #if defined (HANDLE_MULTIBYTE) ++ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ++! while (_rl_insert_char (1, c)) ++! { ++! RL_SETSTATE (RL_STATE_MOREINPUT); ++! c = rl_read_key (); ++! RL_UNSETSTATE (RL_STATE_MOREINPUT); ++! } ++ else ++ #endif ++--- 1316,1329 ---- ++ #if defined (HANDLE_MULTIBYTE) ++ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ++! { ++! if (rl_point < p) /* Did we retreat at EOL? */ ++! rl_point++; ++! while (_rl_insert_char (1, c)) ++! { ++! RL_SETSTATE (RL_STATE_MOREINPUT); ++! c = rl_read_key (); ++! RL_UNSETSTATE (RL_STATE_MOREINPUT); ++! } ++! } ++ else ++ #endif ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 8 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 9 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-010 bash-3.0/bash30-010 +--- orig-bash-3.0/bash30-010 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-010 2005-02-14 22:33:59.000000000 +0200 +@@ -0,0 +1,116 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-010 ++ ++Bug-Reported-by: Samuel Thibault ++Bug-Reference-ID: ++Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=261142 ++ ++Bug-Description: ++ ++When trying to auto-complete ~/../``/, I just get: ++malloc: bashline.c:1340: assertion botched ++free: start and end chunk sizes differ ++last command: kill -9 %2 ++Stopping myself... ++ ++ ++Patch: ++ ++*** ../bash-3.0/bashline.c Mon Jul 5 23:22:12 2004 ++--- bashline.c Thu Sep 2 16:00:12 2004 ++*************** ++*** 101,104 **** ++--- 101,105 ---- ++ ++ /* Helper functions for Readline. */ +++ static int bash_directory_expansion __P((char **)); ++ static int bash_directory_completion_hook __P((char **)); ++ static int filename_completion_ignore __P((char **)); ++*************** ++*** 293,297 **** ++ at = strchr (rl_completer_word_break_characters, '@'); ++ if ((at == 0 && on_or_off == 0) || (at != 0 && on_or_off != 0)) ++! return; ++ ++ /* We have something to do. Do it. */ ++--- 294,298 ---- ++ at = strchr (rl_completer_word_break_characters, '@'); ++ if ((at == 0 && on_or_off == 0) || (at != 0 && on_or_off != 0)) ++! return old_value; ++ ++ /* We have something to do. Do it. */ ++*************** ++*** 1407,1414 **** ++ if (*hint_text == '~') ++ { ++! int l, tl, vl; ++ vl = strlen (val); ++ tl = strlen (hint_text); ++ l = vl - hint_len; /* # of chars added */ ++ temp = (char *)xmalloc (l + 2 + tl); ++ strcpy (temp, hint_text); ++--- 1408,1424 ---- ++ if (*hint_text == '~') ++ { ++! int l, tl, vl, dl; ++! char *rd; ++ vl = strlen (val); ++ tl = strlen (hint_text); +++ #if 0 ++ l = vl - hint_len; /* # of chars added */ +++ #else +++ rd = savestring (filename_hint); +++ bash_directory_expansion (&rd); +++ dl = strlen (rd); +++ l = vl - dl; /* # of chars added */ +++ free (rd); +++ #endif ++ temp = (char *)xmalloc (l + 2 + tl); ++ strcpy (temp, hint_text); ++*************** ++*** 2188,2191 **** ++--- 2198,2222 ---- ++ } ++ +++ /* Simulate the expansions that will be performed by +++ rl_filename_completion_function. This must be called with the address of +++ a pointer to malloc'd memory. */ +++ static int +++ bash_directory_expansion (dirname) +++ char **dirname; +++ { +++ char *d; +++ +++ d = savestring (*dirname); +++ +++ if (rl_directory_rewrite_hook) +++ (*rl_directory_rewrite_hook) (&d); +++ +++ if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&d)) +++ { +++ free (*dirname); +++ *dirname = d; +++ } +++ } +++ ++ /* Handle symbolic link references and other directory name ++ expansions while hacking completion. */ ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 9 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 10 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-011 bash-3.0/bash30-011 +--- orig-bash-3.0/bash30-011 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-011 2005-02-14 22:33:59.000000000 +0200 +@@ -0,0 +1,71 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-011 ++ ++Bug-Reported-by: Egmont Koblinger ++Bug-Reference-ID: ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00277.html ++ ++Bug-Description: ++ ++I've just upgraded to readline 5.0 and bash 3.0 and tried them with UTF-8 ++encoding. I found line editing to be quite buggy: ++ ++I type an accented letter, let's say . Then appears. I press the left ++arrow, the cursor goes back, it is now over . I press . Now is ++visible, which is correct, but the cursor is past the two letters, though ++it should be over . Here only the first Left arrow takes affect, moves ++the cursor over , but the 2nd time I press Left, it just beeps, doesn't ++move to the first char (). Now a Right arrow doesn't move the cursor, but ++causes further Left and Right arrows to work as expected. To go on, ++similar bug occurs nearly every time that I insert an accented letter ++before or amongs other ones (but not at the end of the line). When the ++command line has about ten or twenty accented letters (and no or hardly ++any non-accented ones), line editing becomes a total chaos, where ++sometimes inserting another accented letter causes the cursor to jump many ++characters to the right, and pressing the Left arrow sometimes causes the ++cursor to jump back lots of characters at once. ++ ++Patch: ++ ++*** ../bash-3.0/lib/readline/mbutil.c Wed Jan 14 09:44:52 2004 ++--- lib/readline/mbutil.c Wed Aug 18 22:25:57 2004 ++*************** ++*** 127,135 **** ++ { ++ tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); ++! while (wcwidth (wc) == 0) ++ { ++ point += tmp; ++ tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); ++! if (tmp == (size_t)(0) || tmp == (size_t)(-1) || tmp == (size_t)(-2)) ++ break; ++ } ++--- 127,135 ---- ++ { ++ tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); ++! while (tmp > 0 && wcwidth (wc) == 0) ++ { ++ point += tmp; ++ tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); ++! if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp)) ++ break; ++ } ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 10 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 11 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-012 bash-3.0/bash30-012 +--- orig-bash-3.0/bash30-012 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-012 2005-02-14 22:34:00.000000000 +0200 +@@ -0,0 +1,56 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-012 ++ ++Bug-Reported-by: ben@ncipher.com ++Bug-Reference-ID: ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00215.html ++ ++Bug-Description: ++ ++When using the pipefail option, the following command: ++ echo foo | false ++produces an exit status of 0, ignoring the exit status of false. ++ ++Patch: ++ ++*** ../bash-3.0/jobs.c Fri Apr 23 16:28:25 2004 ++--- jobs.c Wed Aug 18 11:15:07 2004 ++*************** ++*** 1779,1784 **** ++ { ++ fail = 0; ++! for (p = jobs[job]->pipe; p->next != jobs[job]->pipe; p = p->next) ++! if (p->status != EXECUTION_SUCCESS) fail = p->status; ++ return fail; ++ } ++--- 1779,1789 ---- ++ { ++ fail = 0; ++! p = jobs[job]->pipe; ++! do ++! { ++! if (p->status != EXECUTION_SUCCESS) fail = p->status; ++! p = p->next; ++! } ++! while (p != jobs[job]->pipe); ++ return fail; ++ } ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 11 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 12 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-013 bash-3.0/bash30-013 +--- orig-bash-3.0/bash30-013 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-013 2005-02-14 22:34:00.000000000 +0200 +@@ -0,0 +1,86 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-013 ++ ++Bug-Reported-by: Len Lattanzi ++Bug-Reference-ID: <556CE1CE-E1AC-11D8-A2D9-00039383EC60@apple.com> ++Bug-Reference-URL: ++ ++Bug-Description: ++ ++vi-mode filename completion/glob expansion should understand and perform ++tilde expansion. ++ ++Patch: ++ ++*** ../bash-3.0/bashline.c Mon Jul 5 23:22:12 2004 ++--- bashline.c Thu Sep 2 16:00:12 2004 ++*************** ++*** 2514,2518 **** ++ static int ind; ++ int glen; ++! char *ret; ++ ++ if (state == 0) ++--- 2545,2549 ---- ++ static int ind; ++ int glen; ++! char *ret, *ttext; ++ ++ if (state == 0) ++*************** ++*** 2524,2538 **** ++ FREE (globtext); ++ ++ if (rl_explicit_arg) ++ { ++! globorig = savestring (text); ++! glen = strlen (text); ++ globtext = (char *)xmalloc (glen + 2); ++! strcpy (globtext, text); ++ globtext[glen] = '*'; ++ globtext[glen+1] = '\0'; ++ } ++ else ++! globtext = globorig = savestring (text); ++ ++ matches = shell_glob_filename (globtext); ++--- 2555,2574 ---- ++ FREE (globtext); ++ +++ ttext = bash_tilde_expand (text, 0); +++ ++ if (rl_explicit_arg) ++ { ++! globorig = savestring (ttext); ++! glen = strlen (ttext); ++ globtext = (char *)xmalloc (glen + 2); ++! strcpy (globtext, ttext); ++ globtext[glen] = '*'; ++ globtext[glen+1] = '\0'; ++ } ++ else ++! globtext = globorig = savestring (ttext); ++! ++! if (ttext != text) ++! free (ttext); ++ ++ matches = shell_glob_filename (globtext); ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 12 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 13 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-014 bash-3.0/bash30-014 +--- orig-bash-3.0/bash30-014 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-014 2005-02-14 22:34:01.000000000 +0200 +@@ -0,0 +1,52 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-014 ++ ++Bug-Reported-by: agriffis@gentoo.org ++Bug-Reference-ID: <20040929024759.A437FEB1E0@piment.flatmonk.org> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-09/msg00250.html ++ ++Bug-Description: ++ ++ # ++ # BROKEN case: variable with braces inside quotes ++ # ++ ++ $ D=W ++ $ echo "${D}"{illy,onka} => W{illy,onka} ++ ++Patch: ++ ++*** ../bash-3.0-patched/braces.c Wed Sep 8 11:07:53 2004 ++--- braces.c Fri Sep 17 18:42:36 2004 ++*************** ++*** 403,407 **** ++ pass_next = 1; ++ i++; ++! level++; ++ continue; ++ } ++--- 403,408 ---- ++ pass_next = 1; ++ i++; ++! if (quoted == 0) ++! level++; ++ continue; ++ } ++*** ../bash-3.0-patched/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 13 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 14 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-015 bash-3.0/bash30-015 +--- orig-bash-3.0/bash30-015 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-015 2005-02-14 22:34:01.000000000 +0200 +@@ -0,0 +1,56 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-015 ++ ++Bug-Reported-by: opengeometry@yahoo.ca ++Bug-Reference-ID: <200410202012.i9KKCTEB001860@node1.opengeometry.net> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-10/msg00297.html ++ ++Bug-Description: ++ ++ Shell variable can start with number and can even be printed with ++ 'declare', as in ++ 1=aaa ++ 1a=bbb ++ declare -p 1 1a ++ ++ But, they can't be removed, as in ++ unset 1 1a --> ...: not a valid identifier ++ ++ Bash-2.05b correctly gives me error, however. ++ ++Patch: ++ ++*** ../bash-3.0-patched/general.c Wed Apr 14 23:20:13 2004 ++--- general.c Wed Oct 20 16:59:59 2004 ++*************** ++*** 268,272 **** ++ ++ #if defined (ARRAY_VARS) ++! if ((legal_variable_starter (c) == 0) && (flags && c != '[')) /* ] */ ++ #else ++ if (legal_variable_starter (c) == 0) ++--- 268,272 ---- ++ ++ #if defined (ARRAY_VARS) ++! if ((legal_variable_starter (c) == 0) && (flags == 0 || c != '[')) /* ] */ ++ #else ++ if (legal_variable_starter (c) == 0) ++ ++*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 ++--- patchlevel.h Thu Sep 2 15:04:32 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 14 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 15 ++ ++ #endif /* _PATCHLEVEL_H_ */ +diff -urN orig-bash-3.0/bash30-016 bash-3.0/bash30-016 +--- orig-bash-3.0/bash30-016 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-016 2005-02-14 22:34:02.000000000 +0200 +@@ -0,0 +1,84 @@ ++ BASH PATCH REPORT ++ ================= ++ ++Bash-Release: 3.0 ++Patch-ID: bash30-016 ++ ++Bug-Reported-by: William Park ++Bug-Reference-ID: <200411012217.iA1MHxL7031818@node1.opengeometry.net> ++Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-11/msg00017.html ++ ++Bug-Description: ++ ++ Offset from the end of array in ${var: -n} is still off by 1. Eg. ++ x=( {0..9} ) ++ echo ${x[*]: -1} --> 8 9 ++ ++Patch: ++ ++*** ../bash-3.0-patched/subst.c Wed Sep 8 11:07:55 2004 ++--- subst.c Tue Nov 9 16:26:59 2004 ++*************** ++*** 4900,4905 **** ++ case VT_ARRAYVAR: ++ a = (ARRAY *)value; ++! /* For arrays, the first value deals with array indices. */ ++! len = array_max_index (a); /* arrays index from 0 to n - 1 */ ++ break; ++ #endif ++--- 4900,4906 ---- ++ case VT_ARRAYVAR: ++ a = (ARRAY *)value; ++! /* For arrays, the first value deals with array indices. Negative ++! offsets count from one past the array's maximum index. */ ++! len = array_max_index (a) + (*e1p < 0); /* arrays index from 0 to n - 1 */ ++ break; ++ #endif ++*** ../bash-3.0-patched/tests/array.tests Sat Oct 4 23:25:00 2003 ++--- tests/array.tests Tue Nov 9 16:36:29 2004 ++*************** ++*** 323,327 **** ++ echo positive offset - expect five seven ++ echo ${av[@]:5:2} ++! echo negative offset - expect five seven ++ echo ${av[@]: -2:2} ++ ++--- 323,327 ---- ++ echo positive offset - expect five seven ++ echo ${av[@]:5:2} ++! echo negative offset to unset element - expect seven ++ echo ${av[@]: -2:2} ++ ++*** ../bash-3.0-patched/tests/array.right Sat Oct 4 23:25:10 2003 ++--- tests/array.right Tue Nov 9 16:37:25 2004 ++*************** ++*** 171,176 **** ++ positive offset - expect five seven ++ five seven ++! negative offset - expect five seven ++! five seven ++ positive offset 2 - expect seven ++ seven ++--- 171,176 ---- ++ positive offset - expect five seven ++ five seven ++! negative offset to unset element - expect seven ++! seven ++ positive offset 2 - expect seven ++ seven ++*** ../bash-3.0-patched/patchlevel.h Tue Oct 26 17:13:29 2004 ++--- patchlevel.h Tue Nov 9 16:31:24 2004 ++*************** ++*** 26,30 **** ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 15 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++--- 26,30 ---- ++ looks for to find the patch level (for the sccs version string). */ ++ ++! #define PATCHLEVEL 16 ++ ++ #endif /* _PATCHLEVEL_H_ */ ++ +diff -urN orig-bash-3.0/bash30-avoid_WCONTINUED bash-3.0/bash30-avoid_WCONTINUED +--- orig-bash-3.0/bash30-avoid_WCONTINUED 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/bash30-avoid_WCONTINUED 2005-09-05 20:37:01.000000000 +0300 +@@ -0,0 +1,27 @@ ++diff -Naur bash-3.0.orig/jobs.c bash-3.0/jobs.c ++--- bash-3.0.orig/jobs.c 2004-10-12 08:50:11.643481280 +0000 +++++ jobs.c 2004-10-12 08:51:35.110792320 +0000 ++@@ -2476,6 +2476,7 @@ ++ PROCESS *child; ++ pid_t pid; ++ int call_set_current, last_stopped_job, job, children_exited, waitpid_flags; +++ static int wcontinued_not_supported = 0; ++ ++ call_set_current = children_exited = 0; ++ last_stopped_job = NO_JOB; ++@@ -2489,7 +2490,15 @@ ++ : 0; ++ if (sigchld || block == 0) ++ waitpid_flags |= WNOHANG; +++ retry: +++ if (wcontinued_not_supported) +++ waitpid_flags &= ~WCONTINUED; ++ pid = WAITPID (-1, &status, waitpid_flags); +++ if (pid == -1 && errno == EINVAL) +++ { +++ wcontinued_not_supported = 1; +++ goto retry; +++ } ++ ++ /* The check for WNOHANG is to make sure we decrement sigchld only ++ if it was non-zero before we called waitpid. */ +diff -urN orig-bash-3.0/dcigettext.patch bash-3.0/dcigettext.patch +--- orig-bash-3.0/dcigettext.patch 1970-01-01 02:00:00.000000000 +0200 ++++ bash-3.0/dcigettext.patch 2006-02-07 11:29:06.000000000 +0200 +@@ -0,0 +1,13 @@ ++--- /lib/intl/orig-dcigettext.c 2003-12-09 19:39:11.000000000 +0200 +++++ /lib/intl/dcigettext.c 2006-02-07 09:46:06.000000000 +0200 ++@@ -134,6 +134,10 @@ ++ ++ /* @@ end of prolog @@ */ ++ +++#if defined (GETCWD_BROKEN) && !defined (HAVE_GETCWD) +++# define HAVE_GETCWD +++#endif +++ ++ #ifdef _LIBC ++ /* Rename the non ANSI C functions. This is required by the standard ++ because some ANSI C functions will require linking with this object diff --git a/packages/bash/bash_3.0.bb b/packages/bash/bash_3.0.bb index 8511035695..fd09773d35 100644 --- a/packages/bash/bash_3.0.bb +++ b/packages/bash/bash_3.0.bb @@ -6,6 +6,7 @@ LICENSE = "GPL" PR = "r6" SRC_URI = "${GNU_MIRROR}/bash/bash-${PV}.tar.gz \ + file://bash-3.0-fixes.patch;patch=1 \ file://signames-mipsel.diff;patch=1" inherit autotools gettext -- cgit 1.2.3-korg