]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
bash-4.3-beta overlay bash-4.3-beta
authorChet Ramey <chet.ramey@case.edu>
Mon, 12 Aug 2013 23:18:42 +0000 (19:18 -0400)
committerChet Ramey <chet.ramey@case.edu>
Mon, 12 Aug 2013 23:18:42 +0000 (19:18 -0400)
64 files changed:
CHANGES
CWRU/CWRU.chlog
CWRU/changelog
MANIFEST
NEWS
arrayfunc.c
builtins/common.h
builtins/declare.def
builtins/read.def
builtins/set.def
builtins/setattr.def
config.h.in
configure
configure.ac
doc/bash.1
doc/bashref.texi
doc/version.texi
examples/loadables/Makefile.in
execute_cmd.c
expr.c
general.c
input.c
jobs.c
lib/glob/smatch.c
lib/readline/bind.c
lib/readline/colors.c
lib/readline/complete.c
lib/readline/doc/rltech.texi
lib/readline/doc/version.texi
lib/readline/examples/rl-callbacktest.c [new file with mode: 0644]
lib/readline/histfile.c
lib/readline/history.c
lib/readline/readline.c
lib/readline/signals.c
lib/sh/casemod.c
lib/sh/pathphys.c
lib/sh/shquote.c
parse.y
parser.h
po/._hr.po [new file with mode: 0644]
po/hr.po
redir.c
subst.c
subst.h
support/config.guess [changed mode: 0644->0755]
support/config.sub [changed mode: 0644->0755]
tests/appendop.right
tests/appendop.tests
tests/appendop2.sub [new file with mode: 0644]
tests/case.right
tests/case.tests
tests/case1.sub [new file with mode: 0644]
tests/nquote.right
tests/nquote.tests
tests/nquote2.sub [new file with mode: 0644]
tests/posix2.tests
tests/trap.right
tests/trap.tests
tests/trap4.sub
tests/trap5.sub [new file with mode: 0644]
trap.c
variables.c
y.tab.c
y.tab.h

diff --git a/CHANGES b/CHANGES
index 03eecd2d93160a37c27259ba79757580fe22db54..3aaa81770c71633342323d9d6eee3a4237e42a7d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,91 @@
+This document details the changes between this version, bash-4.3-beta, and the
+previous version, bash-4.3-alpha.
+
+1.  Changes to Bash
+
+a.  Fixed a bug in the prompt directory name "trimming" code that caused
+    memory corruption and garbled the results.
+
+b.  Fixed a bug that caused single quotes that resulted from $'...' quoting
+    in the replacement portion of a double-quoted ${word/pat/rep} expansion
+    to be treated as quote characters.
+
+c.  Fixed a bug that caused assignment statements preceding a command word to
+    result in assignment statements following a declaration command to not be
+    expanded like assignment statements.
+
+d.  Fixed a bug with variable search order in the presence of local variables
+    with the same name as variables in the temporary environment supplied to
+    a shell function.
+
+e.  Fixed a bug that caused constructs like 1<(2) to be interpreted as process
+    substitutions even in an arithmetic context.
+
+f.  Fixed several cases where `invisible' variables (variables with attributes
+    but no values, which are technically unset) were treated incorrectly.
+
+g.  Fixed a bug that caused group commands in pipelines that were not the
+    last element to not run the EXIT trap.
+
+h.  Fixed a bug that caused `unset -n' to not unset a nameref variable in
+    certain cases.
+
+i.  Fixed the nameref circular reference checking to be less strict and only
+    disallow a nameref variable with the same value as its name at the global
+    scope.
+
+j.  Fixed a bug that caused trap handlers to be executed recursively,
+    corrupting internal data structures.
+
+k.  Fixed a bug that could result in bash not compiling if certain options were
+    not enabled.
+
+l.  Fixed a bug that caused the arithmetic expansion code to attempt variable
+    assignments when operator precedence prohibited them.
+
+m.  Word expansions like ${foo##bar} now understand indirect variable references.
+
+n.  Fixed a bug that caused `declare -fp name' to not display a function 
+    definition.
+
+o.  Fixed a bug that caused asynchronous child processes to modify the stdin
+    file pointer when bash was using it to read a script, which modified the
+    parent's value as well.
+
+2.  Changes to Readline
+
+a.  Fixed a bug in vi mode that caused the arrow keys to set the saved last
+    vi-mode command to the wrong value.
+
+b.  Fixed a bug that caused double-quoted strings to be scanned incorrectly
+    when being used as the value of a readline variable assignment.
+
+c.  Fixed a bug with vi mode that prevented `.' from repeating a command
+    entered on a previous line (command).
+
+d.  Fixed a bug that could cause completion to core dump if it was interrupted
+    by a signal.
+
+e.  Readline now sends the meta-key enable string to the terminal if the
+    terminal has been successfully initialized.
+
+f.  Readline now calls the signal hook after resizing the terminal when it
+    receives a SIGWINCH.
+
+g.  Fixed a bug that could cause the history list code to perform an out-of-
+    bounds array reference if the history list is empty.
+
+3.  New Features in Bash
+
+a.  Shells started to run process substitutions now run any trap set on EXIT.
+
+b.  There is now a configure-time option to enable the globasciiranges option
+    by default.
+
+c.  The read builtin now checks its first variable argument for validity before
+    trying to read any input.
+
+------------------------------------------------------------------------------
 This document details the changes between this version, bash-4.3-alpha,
 and the previous version, bash-4.2-release.
 
@@ -334,6 +422,10 @@ bbbbb. Fixed a bug that caused redirections like <&n- to leave file descriptor
 ccccc. Fixed a bug that caused incorrect completion quoting when completing a
        word containing a globbing character with `show-all-if-ambiguous' set.
 
+ddddd. Fixed a bug that caused printf's %q format specifier not to quote a
+       tilde even if it appeared in a location where it would be subject to
+       tilde expansion.
+
 2.  Changes to Readline
 
 a.  Fixed a bug that did not allow the `dd', `cc', or `yy' vi editing mode
@@ -543,18 +635,14 @@ k.  New application-settable variable: rl_input_available_hook; function to be
     called when readline detects there is data available on its input file
     descriptor.
 
-l.  Readline calls an application-set event hook (rl_event_hook) after it gets
-    a signal while reading input (read returns -1/EINTR but readline does not
-    handle the signal immediately) to allow the application to handle or
-    otherwise note it.
+l.  Readline calls an application-set event hook (rl_signal_event_hook) after
+    it gets a signal while reading input (read returns -1/EINTR but readline
+    does not handle the signal immediately) to allow the application to handle
+    or otherwise note it.  Not currently called for SIGHUP or SIGTERM.
 
 m.  If the user-settable variable `history-size' is set to a value less than
     0, the history list size is unlimited.
 
-n.  New application-settable variable: rl_signal_event_hook; function that is
-    called when readline is reading terminal input and read(2) is interrupted
-    by a signal.  Currently not called for SIGHUP or SIGTERM.
-
 ------------------------------------------------------------------------------
 This document details the changes between this version, bash-4.2-release,
 and the previous version, bash-4.2-rc2.
index fef5b38d9e0bebda61ae7fe59f93d0d19fc65d2f..4986e4e654d9b4cc5f066ee9131dc56b117cbd3e 100644 (file)
@@ -4406,7 +4406,7 @@ execute_cmd.c
        - execute_command_internal: make sure any subshell forked to run a
          group command or user subshell at the end of a pipeline runs any
          EXIT trap it sets.  Fixes debian bash bug 698411
-         http://bugs.debian.org/cgi-big/bugreport.cgi?bug=698411
+         http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698411
 
 subst.c
        - shell_expand_word_list: fix code that creates args for and calls
@@ -4725,8 +4725,6 @@ builtins/setattr.def
          functions aren't changed or displayed unless the -f option is given.
          Report from <gotmynick@gmail.com>
 
-[bash-4.3-alpha frozen]
-
                                    3/9
                                    ---
 include/typemax.h
@@ -4748,3 +4746,344 @@ bashline.c
          get inserted by `quoting' the completion.  We can't kill all the
          matches because show-all-if-ambiguous needs them.   Bug report from
          Marcel (Felix) Giannelia <info@skeena.net>
+
+[bash-4.3-alpha frozen]
+
+                                  3/14
+                                  ----
+general.c
+       - trim_pathname: use memmove instead of memcpy since the source and
+         destination pathnames may overlap.  Report and fix from Matthew
+         Riley <mattdr@google.com>
+
+                                  3/18
+                                  ----
+configure.ac
+       - socklen_t is defined as `unsigned int' if configure can't find it
+
+                                  3/20
+                                  ----
+lib/readline/complete.c
+       - S_ISVTX: since it's not defined on all platforms (Minix), make sure
+         its use is protected with #ifdef
+
+                                  3/21
+                                  ----
+doc/{bash.1,bashref.texi}
+       - Added mention of ${!name[@]} and ${!name[*]} expansions to get all
+         indices of an array.  Suggested by Jonathan Leffler
+         <jonathan.leffler@gmail.com>
+
+                                  3/24
+                                  ----
+subst.h
+       - SD_IGNOREQUOTE: new define for skip_to_delim; if set, means that
+         single quotes (for now) will be treated as ordinary characters
+
+subst.c
+       - skip_to_delim: handle SD_IGNOREQUOTE. no callers use it for now
+
+                                  3/25
+                                  ----
+support/config.{guess,sub}
+       - updated to versions from autoconf-2.69
+
+                                  3/31
+                                  ----
+lib/sh/shquote.c
+       - sh_single_quote: short-circuit quoting a single "'" instead of
+         creating a long string with empty single-quoted strings
+
+parser.h
+       - DOLBRACE_QUOTE2: new define, like DOLBRACE_QUOTE, but need to single-
+         quote results of $'...' expansion because quote removal will be
+         done later.  Right now this is only done for ${word/pat/rep}
+
+parse.y
+       - parse_matched_pair: set state to DOLBRACE_QUOTE2 for pattern
+         substitution word expansion so we don't treat single quote specially
+         in the pattern or replacement string
+       - parse_matched_pair: if we're parsing a dollar-brace word expansion
+         (${...}) and we're not treating single quote specially within
+         double quotes, single-quote the translation of $'...' ansi-c
+         escaped strings.  Original report and fix from Eduardo A.
+         Bustamante López <dualbus@gmail.com>
+
+subst.c
+       - extract_dollar_brace_string: ${word/pat/rep} scanning now sets the
+         DOLBRACE_QUOTE2 flag instead of DOLBRACE_QUOTE so we don't treat
+         single quotes specially within a double-quoted string
+
+execute_cmd.c
+       - fix_assignment_words: skip over assignment statements preceding a
+         command word before trying to figure out whether or not assignment
+         statements following a possible declaration command should be 
+         treated specially.  Fixes bug reported by Dan Douglas
+         <ormaaj@gmail.com>
+
+                                   4/4
+                                   ---
+lib/readline/readline.c
+       - _rl_dispatch_subseq: only call _rl_vi_set_last (and check whether
+         the key is a text modification command) if the key sequence length
+         is 1.  That keeps the arrow keys from setting the last command
+         when called in vi command mode.  Fixes bug reported by Ian A.
+         Watson <watson_ian_a@lilly.com>
+
+                                   4/6
+                                   ---
+lib/readline/bind.c
+       - rl_parse_and_bind: when parsing a double-quoted string as the value
+         of a variable, make sure we skip past the leading double quote.
+         Fix from Andreas Schwab <schwab@linux-m68k.org>
+
+variables.c
+       - hash_lookup: set new local variable last_table_searched to the table
+         a successful lookup appears in; tested in make_local_variable to
+         solve the problem below
+       - make_local_variable: if we find a variable with the tempenv flag
+         set at the same `level' as variable_context', but not found in the
+         temporary_env (temp environment preceding the builtin), return it.
+         The temp environment preceding the function call has already been
+         merged (in execute_function) into the list of variable contexts the
+         function sees as shell_variables by the time this is called.  Fixes
+         inconsistency pointed out by Dan Douglas <ormaaj@gmail.com>
+
+subst.c
+       - expand_arith_string: expanded out contents of expand_string,
+         expand_string_internal, expand_string_if_necessary to create a
+         WORD_DESC and call call_expand_word_internal() on it directly.
+         We don't want process substitution to be performed ( 1<(2) ) should
+         mean something different in an arithmetic expression context.
+         It doesn't work to just turn on the DQUOTE flag, since that means
+         that things like ${x["expression"]} are not expanded correctly.
+         Fixes problem pointed out by Dan Douglas <ormaaj@gmail.com>
+
+                                  4/13
+                                  ----
+subst.c
+       - process_substitute: run the EXIT trap before exiting, as other
+         shells seem to.  Fixes problem pointed out by Dan Douglas
+         <ormaaj@gmail.com>
+
+lib/readline/readline.c
+       - readline_internal_setup: call rl_vi_insertion_mode to enter vi
+         mode instead of rl_vi_insert_mode to avoid resetting the saved last
+         command information.  Posix says that `.' can repeat a command
+         that was entered on a previous line so we need to save the info.
+         Fixes bug reported by Ian A. Watson <watson_ian_a@lilly.com>
+
+                                  4/14
+                                  ----
+lib/readline/complete.c
+       - rl_completion_matches: make sure xrealloc returns something non-null
+         (can happen when interrupted by a signal) before trying to add
+         matches to match_list
+
+subst.c
+       - array_remove_pattern: return NULL right away if array_variable_part
+         returns an invisible variable
+       - array_length_reference: handle array_variable_part returning an
+         invisible variable
+       - get_var_and_type: handle array_variable_part returning an invisible
+         variable
+
+                                  4/15
+                                  ----
+execute_cmd.c
+       - execute_command_internal: make sure to run the EXIT trap for group
+         commands anywhere in pipelines, not just at the end.  From a point
+         raised by Andreas Schwab <schwab@linux-m68k.org>
+
+variables.c
+       - bind_int_variable: make sure invisible flag is unset.  Fixes problems
+         like "declare -ai a; : $(( a[4]=4 ));"
+
+arrayfunc.c
+       - array_variable_part: return variable even if invisible flag set,
+         callers must handle invisible vars
+
+                                  4/18
+                                  ----
+builtins/set.def
+       - unset_builtin: if -n flag given, call unset_nameref instead of
+         unset_variable
+
+variables.c
+       - find_variable_nameref: print warning message if nameref circular
+         reference detected, return NULL and let caller deal with it
+
+builtins/declare.def
+       - declare_builtin: only disallow global references at this point if
+         we are at the global scope
+
+                                  5/16
+                                  ----
+configure.ac
+       - update release status to beta
+
+                                  5/23
+                                  ----
+trap.c
+       - run_pending_traps: save and restore pipeline around calls to
+         evalstring() in case we get a trap while running a trap. Have to
+         figure out the recursive running traps issue elsewhere.  Fixes
+         bug reported by Roman Rakus <rrakus@redhat.com>
+       - run_pending_traps: make sure to set running_trap to the appropriate
+         signal value when running a trap command
+       - run_pending_traps: short-circuit immediately if running_trap set
+         when invoked.  Could change this later to only skip if it would
+         run the same trap as currently being run (running_trap == sig + 1)
+
+configure.ac
+       - add warning if bison not found
+
+lib/readline/doc/rltech.texi
+       - new section with an example program illustrating the callback
+         interface. Suggested by Peng Yu <pengyu.ut@gmail.com>
+
+examples/loadables/Makefile.in
+       - remove references to `cut' and `getconf', which were removed in
+         early March
+
+                                  5/28
+                                  ----
+lib/sh/pathphys.c
+       - sh_realpath: correct inverted two arguments to call to sh_makepath.
+         Report and fix from Julien Thomas <jthomas@exosec.fr>
+
+                                   6/7
+                                   ---
+execute_cmd.c
+       - executing_line_number: the else clauses that are conditional on
+         various options being defined can simply be if clauses -- they are
+         mutually exclusive and all have `return' in the body.  Fixes bug
+         reported by Flavio Medeiros <flaviomotamedeiros@gmail.com>
+
+                                  6/25
+                                  ----
+lib/readline/readline.c
+       - readline_internal_setup: only sent the meta-key enable string to the
+         terminal if we've been told to use one and the terminal has been
+         successfully initialized (RL_ISSTATE (RL_STATE_TERMPREPPED) != 0).
+         Suggested by Dan Mick <dan.mick@inktank.com>
+
+lib/readline/signals.c
+       - _rl_signal_handler: call any defined signal hook after calling
+         rl_resize_terminal when handling a SIGWINCH.  We already have called
+         the original SIGWINCH handler but will not be resending the signal
+         to ourselves
+
+                                  6/27
+                                  ----
+lib/readline/doc/history.3, doc/bash.1
+       - fix description of the `$' modifier to note that it expands to the
+         last *word*, which is not always the last argument.  Report from
+         ariyetz@gmail.com via gnu.org RT
+
+                                  6/29
+                                  ----
+lib/glob/smatch.c
+       - glob_asciiranges: initialize to value of GLOBASCII_DEFAULT instead
+         of 0 (0 if not defined)
+
+configure.ac,config.h.in
+       - --enable-glob-asciiranges-default: new option, controls the value of
+         GLOBASCII_DEFAULT; use it to turn globasciiranges shopt option on
+         by default
+
+doc/bashref.texi
+       - document new --enable-glob-asciiranges-default configure option
+
+variables.c
+       - assign_in_env: implement += value appending semantics for assignments
+         preceding command names
+
+                                   7/4
+                                   ---
+expr.c
+       - set lasttok = NUM in all of the functions that result in a number,
+         even if it's a boolean, to avoid errors with constructs like
+         1 * x = 1, which should be an asignment error.  Fixes problem
+         pointed out by Dan Douglas <ormaaj@gmail.com>
+
+parse.y
+       - decode_prompt_string: don't bother to call strcpy if
+         polite_directory_format returns its argument unchanged.  It's not
+         necessary and Mac OS X 10.9 aborts because of a supposed overlapping
+         string copy.  Bug and fix from simon@hitzemann.org
+
+subst.c
+       - parameter_brace_find_indir: new function, code from
+         parameter_brace_expand_indir that looks up the indirectly-referenced
+         variable, but does not expand it
+       - parameter_brace_expand_indir: call parameter_brace_find_indir to
+         look up indirected variable reference
+       - get_var_and_type: call parameter_brace_find_indir if it looks like we
+         are trying to manipulate an indirect variable reference like
+         ${!b%%foo}.  This makes a difference if !b references an array
+         variable.  Bug report from Dan Douglas <ormaaj@gmail.com>
+
+                                   7/6
+                                   ---
+lib/sh/casemod.c
+       - sh_modcase: make sure argument passed to is_basic is <= UCHAR_MAX,
+         since cval can convert something to a wchar_t greater than UCHAR_MAX.
+         Fixes bug reported by Tomasz Tomasik <scx.mail@gmail.com>
+
+                                   7/8
+                                   ---
+lib/readline/history.c
+       - add_history_time: if history_length == 0, referencing history_length
+         - 1 will result in an array bounds error, so make history_length be
+         at least 1 before going on.  Fixes bug reported by Geng Sheng Liu
+         <gsliu.tju@gmail.com>
+
+builtins/setattr.def
+       - show_func_attributes: display definition (if NODEFS argument is 0) and
+         attributes for a particular function; used by `declare -fp name'
+
+builtins/declare.def
+       - declare_internal: call show_func_attributes if -f supplied with -p.
+         Fixes inconsistency observed by Linda Walsh <bash@tlinx.org>
+
+builtins/common.h
+       - new extern declaration for show_func_attributes
+
+builtins/read.def
+       - read_builtin: check the first supplied variable name for validity
+         before attempting to read any input, since we know we will have to
+         at least use that one.  Don't check any other names yet.  Suggested
+         by jidanni@jidanni.org
+
+                                  7/10
+                                  ----
+redir.c
+       - do_redirection_internal: when closing a file descriptor with
+         r_close_this ([n]<&-) count close errors as redirection errors if
+         errno ends up as EIO or ENOSPC.  Originally reported back in April
+         2012 by Andrey Zaitsev <jstcdr@gmail.com>
+
+                                  7/11
+                                  ----
+redir.c
+       - do_redirection_internal: before calling check_bash_input, make sure
+         that we don't call check_bash_input for an asynchronous process that
+         is replacing stdin with something else. The seek backwards affects
+         the parent process as well, since parents and children share the
+         file pointer. Fixes problem originally reported in March 2013 by
+         Martin Jackson <mjackson220.list@gmail.com>
+
+                                  7/13
+                                  ----
+doc/{bash.1,bashref.texi}
+       - slight change to add a description of `shopt -o' suggested by Bruce
+         Korb <bruce.korb@gmail.com>
+
+                                  7/19
+                                  ----
+lib/readline/histfile.c
+       - history_do_write: if close returns < 0, make sure we restore the
+         backup history file and return a non-zero value
+       - history_truncate_file: if write or close return < 0, make sure we
+         return a non-zero value
index fef5b38d9e0bebda61ae7fe59f93d0d19fc65d2f..4986e4e654d9b4cc5f066ee9131dc56b117cbd3e 100644 (file)
@@ -4406,7 +4406,7 @@ execute_cmd.c
        - execute_command_internal: make sure any subshell forked to run a
          group command or user subshell at the end of a pipeline runs any
          EXIT trap it sets.  Fixes debian bash bug 698411
-         http://bugs.debian.org/cgi-big/bugreport.cgi?bug=698411
+         http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698411
 
 subst.c
        - shell_expand_word_list: fix code that creates args for and calls
@@ -4725,8 +4725,6 @@ builtins/setattr.def
          functions aren't changed or displayed unless the -f option is given.
          Report from <gotmynick@gmail.com>
 
-[bash-4.3-alpha frozen]
-
                                    3/9
                                    ---
 include/typemax.h
@@ -4748,3 +4746,344 @@ bashline.c
          get inserted by `quoting' the completion.  We can't kill all the
          matches because show-all-if-ambiguous needs them.   Bug report from
          Marcel (Felix) Giannelia <info@skeena.net>
+
+[bash-4.3-alpha frozen]
+
+                                  3/14
+                                  ----
+general.c
+       - trim_pathname: use memmove instead of memcpy since the source and
+         destination pathnames may overlap.  Report and fix from Matthew
+         Riley <mattdr@google.com>
+
+                                  3/18
+                                  ----
+configure.ac
+       - socklen_t is defined as `unsigned int' if configure can't find it
+
+                                  3/20
+                                  ----
+lib/readline/complete.c
+       - S_ISVTX: since it's not defined on all platforms (Minix), make sure
+         its use is protected with #ifdef
+
+                                  3/21
+                                  ----
+doc/{bash.1,bashref.texi}
+       - Added mention of ${!name[@]} and ${!name[*]} expansions to get all
+         indices of an array.  Suggested by Jonathan Leffler
+         <jonathan.leffler@gmail.com>
+
+                                  3/24
+                                  ----
+subst.h
+       - SD_IGNOREQUOTE: new define for skip_to_delim; if set, means that
+         single quotes (for now) will be treated as ordinary characters
+
+subst.c
+       - skip_to_delim: handle SD_IGNOREQUOTE. no callers use it for now
+
+                                  3/25
+                                  ----
+support/config.{guess,sub}
+       - updated to versions from autoconf-2.69
+
+                                  3/31
+                                  ----
+lib/sh/shquote.c
+       - sh_single_quote: short-circuit quoting a single "'" instead of
+         creating a long string with empty single-quoted strings
+
+parser.h
+       - DOLBRACE_QUOTE2: new define, like DOLBRACE_QUOTE, but need to single-
+         quote results of $'...' expansion because quote removal will be
+         done later.  Right now this is only done for ${word/pat/rep}
+
+parse.y
+       - parse_matched_pair: set state to DOLBRACE_QUOTE2 for pattern
+         substitution word expansion so we don't treat single quote specially
+         in the pattern or replacement string
+       - parse_matched_pair: if we're parsing a dollar-brace word expansion
+         (${...}) and we're not treating single quote specially within
+         double quotes, single-quote the translation of $'...' ansi-c
+         escaped strings.  Original report and fix from Eduardo A.
+         Bustamante López <dualbus@gmail.com>
+
+subst.c
+       - extract_dollar_brace_string: ${word/pat/rep} scanning now sets the
+         DOLBRACE_QUOTE2 flag instead of DOLBRACE_QUOTE so we don't treat
+         single quotes specially within a double-quoted string
+
+execute_cmd.c
+       - fix_assignment_words: skip over assignment statements preceding a
+         command word before trying to figure out whether or not assignment
+         statements following a possible declaration command should be 
+         treated specially.  Fixes bug reported by Dan Douglas
+         <ormaaj@gmail.com>
+
+                                   4/4
+                                   ---
+lib/readline/readline.c
+       - _rl_dispatch_subseq: only call _rl_vi_set_last (and check whether
+         the key is a text modification command) if the key sequence length
+         is 1.  That keeps the arrow keys from setting the last command
+         when called in vi command mode.  Fixes bug reported by Ian A.
+         Watson <watson_ian_a@lilly.com>
+
+                                   4/6
+                                   ---
+lib/readline/bind.c
+       - rl_parse_and_bind: when parsing a double-quoted string as the value
+         of a variable, make sure we skip past the leading double quote.
+         Fix from Andreas Schwab <schwab@linux-m68k.org>
+
+variables.c
+       - hash_lookup: set new local variable last_table_searched to the table
+         a successful lookup appears in; tested in make_local_variable to
+         solve the problem below
+       - make_local_variable: if we find a variable with the tempenv flag
+         set at the same `level' as variable_context', but not found in the
+         temporary_env (temp environment preceding the builtin), return it.
+         The temp environment preceding the function call has already been
+         merged (in execute_function) into the list of variable contexts the
+         function sees as shell_variables by the time this is called.  Fixes
+         inconsistency pointed out by Dan Douglas <ormaaj@gmail.com>
+
+subst.c
+       - expand_arith_string: expanded out contents of expand_string,
+         expand_string_internal, expand_string_if_necessary to create a
+         WORD_DESC and call call_expand_word_internal() on it directly.
+         We don't want process substitution to be performed ( 1<(2) ) should
+         mean something different in an arithmetic expression context.
+         It doesn't work to just turn on the DQUOTE flag, since that means
+         that things like ${x["expression"]} are not expanded correctly.
+         Fixes problem pointed out by Dan Douglas <ormaaj@gmail.com>
+
+                                  4/13
+                                  ----
+subst.c
+       - process_substitute: run the EXIT trap before exiting, as other
+         shells seem to.  Fixes problem pointed out by Dan Douglas
+         <ormaaj@gmail.com>
+
+lib/readline/readline.c
+       - readline_internal_setup: call rl_vi_insertion_mode to enter vi
+         mode instead of rl_vi_insert_mode to avoid resetting the saved last
+         command information.  Posix says that `.' can repeat a command
+         that was entered on a previous line so we need to save the info.
+         Fixes bug reported by Ian A. Watson <watson_ian_a@lilly.com>
+
+                                  4/14
+                                  ----
+lib/readline/complete.c
+       - rl_completion_matches: make sure xrealloc returns something non-null
+         (can happen when interrupted by a signal) before trying to add
+         matches to match_list
+
+subst.c
+       - array_remove_pattern: return NULL right away if array_variable_part
+         returns an invisible variable
+       - array_length_reference: handle array_variable_part returning an
+         invisible variable
+       - get_var_and_type: handle array_variable_part returning an invisible
+         variable
+
+                                  4/15
+                                  ----
+execute_cmd.c
+       - execute_command_internal: make sure to run the EXIT trap for group
+         commands anywhere in pipelines, not just at the end.  From a point
+         raised by Andreas Schwab <schwab@linux-m68k.org>
+
+variables.c
+       - bind_int_variable: make sure invisible flag is unset.  Fixes problems
+         like "declare -ai a; : $(( a[4]=4 ));"
+
+arrayfunc.c
+       - array_variable_part: return variable even if invisible flag set,
+         callers must handle invisible vars
+
+                                  4/18
+                                  ----
+builtins/set.def
+       - unset_builtin: if -n flag given, call unset_nameref instead of
+         unset_variable
+
+variables.c
+       - find_variable_nameref: print warning message if nameref circular
+         reference detected, return NULL and let caller deal with it
+
+builtins/declare.def
+       - declare_builtin: only disallow global references at this point if
+         we are at the global scope
+
+                                  5/16
+                                  ----
+configure.ac
+       - update release status to beta
+
+                                  5/23
+                                  ----
+trap.c
+       - run_pending_traps: save and restore pipeline around calls to
+         evalstring() in case we get a trap while running a trap. Have to
+         figure out the recursive running traps issue elsewhere.  Fixes
+         bug reported by Roman Rakus <rrakus@redhat.com>
+       - run_pending_traps: make sure to set running_trap to the appropriate
+         signal value when running a trap command
+       - run_pending_traps: short-circuit immediately if running_trap set
+         when invoked.  Could change this later to only skip if it would
+         run the same trap as currently being run (running_trap == sig + 1)
+
+configure.ac
+       - add warning if bison not found
+
+lib/readline/doc/rltech.texi
+       - new section with an example program illustrating the callback
+         interface. Suggested by Peng Yu <pengyu.ut@gmail.com>
+
+examples/loadables/Makefile.in
+       - remove references to `cut' and `getconf', which were removed in
+         early March
+
+                                  5/28
+                                  ----
+lib/sh/pathphys.c
+       - sh_realpath: correct inverted two arguments to call to sh_makepath.
+         Report and fix from Julien Thomas <jthomas@exosec.fr>
+
+                                   6/7
+                                   ---
+execute_cmd.c
+       - executing_line_number: the else clauses that are conditional on
+         various options being defined can simply be if clauses -- they are
+         mutually exclusive and all have `return' in the body.  Fixes bug
+         reported by Flavio Medeiros <flaviomotamedeiros@gmail.com>
+
+                                  6/25
+                                  ----
+lib/readline/readline.c
+       - readline_internal_setup: only sent the meta-key enable string to the
+         terminal if we've been told to use one and the terminal has been
+         successfully initialized (RL_ISSTATE (RL_STATE_TERMPREPPED) != 0).
+         Suggested by Dan Mick <dan.mick@inktank.com>
+
+lib/readline/signals.c
+       - _rl_signal_handler: call any defined signal hook after calling
+         rl_resize_terminal when handling a SIGWINCH.  We already have called
+         the original SIGWINCH handler but will not be resending the signal
+         to ourselves
+
+                                  6/27
+                                  ----
+lib/readline/doc/history.3, doc/bash.1
+       - fix description of the `$' modifier to note that it expands to the
+         last *word*, which is not always the last argument.  Report from
+         ariyetz@gmail.com via gnu.org RT
+
+                                  6/29
+                                  ----
+lib/glob/smatch.c
+       - glob_asciiranges: initialize to value of GLOBASCII_DEFAULT instead
+         of 0 (0 if not defined)
+
+configure.ac,config.h.in
+       - --enable-glob-asciiranges-default: new option, controls the value of
+         GLOBASCII_DEFAULT; use it to turn globasciiranges shopt option on
+         by default
+
+doc/bashref.texi
+       - document new --enable-glob-asciiranges-default configure option
+
+variables.c
+       - assign_in_env: implement += value appending semantics for assignments
+         preceding command names
+
+                                   7/4
+                                   ---
+expr.c
+       - set lasttok = NUM in all of the functions that result in a number,
+         even if it's a boolean, to avoid errors with constructs like
+         1 * x = 1, which should be an asignment error.  Fixes problem
+         pointed out by Dan Douglas <ormaaj@gmail.com>
+
+parse.y
+       - decode_prompt_string: don't bother to call strcpy if
+         polite_directory_format returns its argument unchanged.  It's not
+         necessary and Mac OS X 10.9 aborts because of a supposed overlapping
+         string copy.  Bug and fix from simon@hitzemann.org
+
+subst.c
+       - parameter_brace_find_indir: new function, code from
+         parameter_brace_expand_indir that looks up the indirectly-referenced
+         variable, but does not expand it
+       - parameter_brace_expand_indir: call parameter_brace_find_indir to
+         look up indirected variable reference
+       - get_var_and_type: call parameter_brace_find_indir if it looks like we
+         are trying to manipulate an indirect variable reference like
+         ${!b%%foo}.  This makes a difference if !b references an array
+         variable.  Bug report from Dan Douglas <ormaaj@gmail.com>
+
+                                   7/6
+                                   ---
+lib/sh/casemod.c
+       - sh_modcase: make sure argument passed to is_basic is <= UCHAR_MAX,
+         since cval can convert something to a wchar_t greater than UCHAR_MAX.
+         Fixes bug reported by Tomasz Tomasik <scx.mail@gmail.com>
+
+                                   7/8
+                                   ---
+lib/readline/history.c
+       - add_history_time: if history_length == 0, referencing history_length
+         - 1 will result in an array bounds error, so make history_length be
+         at least 1 before going on.  Fixes bug reported by Geng Sheng Liu
+         <gsliu.tju@gmail.com>
+
+builtins/setattr.def
+       - show_func_attributes: display definition (if NODEFS argument is 0) and
+         attributes for a particular function; used by `declare -fp name'
+
+builtins/declare.def
+       - declare_internal: call show_func_attributes if -f supplied with -p.
+         Fixes inconsistency observed by Linda Walsh <bash@tlinx.org>
+
+builtins/common.h
+       - new extern declaration for show_func_attributes
+
+builtins/read.def
+       - read_builtin: check the first supplied variable name for validity
+         before attempting to read any input, since we know we will have to
+         at least use that one.  Don't check any other names yet.  Suggested
+         by jidanni@jidanni.org
+
+                                  7/10
+                                  ----
+redir.c
+       - do_redirection_internal: when closing a file descriptor with
+         r_close_this ([n]<&-) count close errors as redirection errors if
+         errno ends up as EIO or ENOSPC.  Originally reported back in April
+         2012 by Andrey Zaitsev <jstcdr@gmail.com>
+
+                                  7/11
+                                  ----
+redir.c
+       - do_redirection_internal: before calling check_bash_input, make sure
+         that we don't call check_bash_input for an asynchronous process that
+         is replacing stdin with something else. The seek backwards affects
+         the parent process as well, since parents and children share the
+         file pointer. Fixes problem originally reported in March 2013 by
+         Martin Jackson <mjackson220.list@gmail.com>
+
+                                  7/13
+                                  ----
+doc/{bash.1,bashref.texi}
+       - slight change to add a description of `shopt -o' suggested by Bruce
+         Korb <bruce.korb@gmail.com>
+
+                                  7/19
+                                  ----
+lib/readline/histfile.c
+       - history_do_write: if close returns < 0, make sure we restore the
+         backup history file and return a non-zero value
+       - history_truncate_file: if write or close return < 0, make sure we
+         return a non-zero value
index ab36a7152d31433e8655fb8cc3cbbebedb7854a3..4eb4d48aec11b0944907534fcd8b5217bbb03363 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -385,6 +385,7 @@ lib/readline/examples/fileman.c     f
 lib/readline/examples/manexamp.c       f
 lib/readline/examples/histexamp.c      f
 lib/readline/examples/rltest.c f
+lib/readline/examples/rl-callbacktest.c        f
 lib/readline/examples/rl.c     f
 lib/readline/examples/rlcat.c  f
 lib/readline/examples/Inputrc  f
@@ -772,6 +773,7 @@ tests/alias1.sub    f
 tests/alias.right      f
 tests/appendop.tests   f
 tests/appendop1.sub    f
+tests/appendop2.sub    f
 tests/appendop.right   f
 tests/arith-for.tests  f
 tests/arith-for.right  f
@@ -826,6 +828,7 @@ tests/source5.sub   f
 tests/source6.sub      f
 tests/case.tests       f
 tests/case.right       f
+tests/case1.sub                f
 tests/casemod.tests    f
 tests/casemod.right    f
 tests/comsub.tests     f
@@ -998,6 +1001,7 @@ tests/new-exp.right        f
 tests/nquote.tests     f
 tests/nquote.right     f
 tests/nquote1.sub      f
+tests/nquote2.sub      f
 tests/nquote1.tests    f
 tests/nquote1.right    f
 tests/nquote2.tests    f
@@ -1163,6 +1167,7 @@ tests/trap2.sub           f       755
 tests/trap2a.sub       f       755
 tests/trap3.sub                f
 tests/trap4.sub                f
+tests/trap5.sub                f
 tests/type.tests       f
 tests/type.right       f
 tests/type1.sub                f
diff --git a/NEWS b/NEWS
index 28d5f13c75bf89cd1a0e7090ef569ae8aff3c10d..baac79125c818e2b07e8cc31050990d2b93327ec 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -108,6 +108,8 @@ gg. The brace expansion code now treats a failed sequence expansion as a
     simple string and will continue to expand brace terms in the remainder
     of the word.
 
+hh. Shells started to run process substitutions now run any trap set on EXIT.
+
 2.  New Features in Readline
 
 a.  Readline is now more responsive to SIGHUP and other fatal signals when
index 959ccd711914c5110e83d4a4ac4d46e8142ca3f0..f59f7bd35402c80a59a8c759ab3c0bc8b2684439 100644 (file)
@@ -929,7 +929,11 @@ array_variable_part (s, subp, lenp)
   var = find_variable (t);
 
   free (t);
+#if 0
   return (var == 0 || invisible_p (var)) ? (SHELL_VAR *)0 : var;
+#else
+  return var;  /* now return invisible variables; caller must handle */
+#endif
 }
 
 #define INDEX_ERROR() \
index 28f0200836fcb9b2258c8235408eefe727500c88..b0c2f7db1216956063fc6cf52a20f53548bc8841 100644 (file)
@@ -155,6 +155,7 @@ extern int set_or_show_attributes __P((WORD_LIST *, int, int));
 extern int show_all_var_attributes __P((int, int));
 extern int show_var_attributes __P((SHELL_VAR *, int, int));
 extern int show_name_attributes __P((char *, int));
+extern int show_func_attributes __P((char *, int));
 extern void set_var_attribute __P((char *, int, int));
 
 /* Functions from pushd.def */
index 86fa728b700ebfe822b80d808a741566b536ec5f..580e3fa8f3a27569973481cacd1de0a1bfb60303 100644 (file)
@@ -264,7 +264,10 @@ declare_internal (list, local_var)
     {
       for (any_failed = 0; list; list = list->next)
        {
-         pflag = show_name_attributes (list->word->word, nodefs);
+         if (flags_on & att_function)
+           pflag = show_func_attributes (list->word->word, nodefs);
+         else
+           pflag = show_name_attributes (list->word->word, nodefs);
          if (pflag)
            {
              sh_notfound (list->word->word);
@@ -315,7 +318,8 @@ declare_internal (list, local_var)
            }
          else
 #endif
-         if (STREQ (name, value))
+         /* disallow self references at global scope */
+         if (STREQ (name, value) && variable_context == 0)
            {
              builtin_error (_("%s: nameref variable self references not allowed"), name);
              assign_error++;
index 7a1dff6f0cdf1e34033344987a725453baa5e5cf..e5c927aab9b4fdec5e180e7b9eda8b832860976e 100644 (file)
@@ -329,6 +329,18 @@ read_builtin (list)
     return (input_avail (fd) ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
 #endif
 
+  /* Convenience: check early whether or not the first of possibly several
+     variable names is a valid identifier, and bail early if so. */
+#if defined (ARRAY_VARS)
+  if (list && legal_identifier (list->word->word) == 0 && valid_array_reference (list->word->word) == 0)
+#else
+  if (list && legal_identifier (list->word->word) == 0)
+#endif
+    {
+      sh_invalidid (list->word->word);
+      return (EXECUTION_FAILURE);
+    }
+
   /* If we're asked to ignore the delimiter, make sure we do. */
   if (ignore_delim)
     delim = -1;
index 421105be50d096aa67082c987e3c8959c3f29693..c4a7001dffeb279cafe6294b44e49f961430531b 100644 (file)
@@ -863,7 +863,7 @@ unset_builtin (list)
        }
       else
 #endif /* ARRAY_VARS */
-      tem = unset_function ? unbind_func (name) : unbind_variable (name);
+      tem = unset_function ? unbind_func (name) : (nameref ? unbind_nameref (name) : unbind_variable (name));
 
       /* This is what Posix.2 says:  ``If neither -f nor -v
         is specified, the name refers to a variable; if a variable by
index faa02a9e276a7762dad5afc518f24832f433684b..390b3eb19c7562f3a534dddac2ad3f0bedbbf6ab 100644 (file)
@@ -466,6 +466,24 @@ show_name_attributes (name, nodefs)
     return (1);
 }
 
+int
+show_func_attributes (name, nodefs)
+     char *name;
+     int nodefs;
+{
+  SHELL_VAR *var;
+
+  var = find_function (name);
+
+  if (var)
+    {
+      show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
+      return (0);
+    }
+  else
+    return (1);
+}
+
 void
 set_var_attribute (name, attribute, undo)
      char *name;
index 6a42e16637e42e4398847f983c7a7f196cea0be1..08af2ba8999d87bce64cd9634f5ea3c9360c1d03 100644 (file)
 /* Define to make the `direxpand' shopt option enabled by default. */
 #undef DIRCOMPLETE_EXPAND_DEFAULT
 
+/* Define to make the `globasciiranges' shopt option enabled by default. */
+#undef GLOBASCII_DEFAULT
+
 /* Define AFS if you are using Transarc's AFS. */
 #undef AFS
 
index 8b54c36772f30d466c25b9fb208fef263fecc810..0c7409dd5d558a27df3c2016e429244d37360ef0 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,14 +1,12 @@
 #! /bin/sh
-# From configure.ac for Bash 4.3, version 4.056.
+# From configure.ac for Bash 4.3, version 4.059.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for bash 4.3-alpha.
+# Generated by GNU Autoconf 2.69 for bash 4.3-beta.
 #
 # Report bugs to <bug-bash@gnu.org>.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -137,6 +135,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -170,7 +193,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -215,21 +239,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       # Preserve -v and -x to the replacement shell.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       case $- in # ((((
-         *v*x* | *x*v* ) as_opts=-vx ;;
-         *v* ) as_opts=-v ;;
-         *x* ) as_opts=-x ;;
-         * ) as_opts= ;;
-       esac
-       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -332,6 +360,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -453,6 +489,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -487,16 +527,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -508,28 +548,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -561,8 +581,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='bash'
 PACKAGE_TARNAME='bash'
-PACKAGE_VERSION='4.3-alpha'
-PACKAGE_STRING='bash 4.3-alpha'
+PACKAGE_VERSION='4.3-beta'
+PACKAGE_STRING='bash 4.3-beta'
 PACKAGE_BUGREPORT='bug-bash@gnu.org'
 PACKAGE_URL=''
 
@@ -789,6 +809,7 @@ enable_disabled_builtins
 enable_dparen_arithmetic
 enable_extended_glob
 enable_extended_glob_default
+enable_glob_asciiranges_default
 enable_help_builtin
 enable_history
 enable_job_control
@@ -1287,8 +1308,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1374,7 +1393,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bash 4.3-alpha to adapt to many kinds of systems.
+\`configure' configures bash 4.3-beta to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1439,7 +1458,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bash 4.3-alpha:";;
+     short | recursive ) echo "Configuration of bash 4.3-beta:";;
    esac
   cat <<\_ACEOF
 
@@ -1479,6 +1498,9 @@ Optional Features:
   --enable-extended-glob-default
                           force extended pattern matching to be enabled by
                           default
+  --enable-glob-asciiranges-default
+                          force bracket range expressions in pattern matching
+                          to use the C locale by default
   --enable-help-builtin   include the help builtin
   --enable-history        turn on command history
   --enable-job-control    enable job control features
@@ -1628,10 +1650,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-bash configure 4.3-alpha
-generated by GNU Autoconf 2.68
+bash configure 4.3-beta
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1707,7 +1729,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
+        test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -2111,7 +2133,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2127,7 +2150,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2153,7 +2177,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2169,7 +2194,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2203,7 +2229,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2332,8 +2359,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bash $as_me 4.3-alpha, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+It was created by bash $as_me 4.3-beta, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2726,7 +2753,7 @@ ac_config_headers="$ac_config_headers config.h"
 
 
 BASHVERS=4.3
-RELSTATUS=alpha
+RELSTATUS=beta
 
 case "$RELSTATUS" in
 alp*|bet*|dev*|rc*|maint*)     DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;;
@@ -2973,6 +3000,7 @@ opt_casemod_attrs=yes
 opt_casemod_expansions=yes
 opt_extglob_default=no
 opt_dircomplete_expand_default=no
+opt_globascii_default=no
 
 opt_static_link=no
 opt_profiling=no
@@ -2993,6 +3021,7 @@ if test $opt_minimal_config = yes; then
        opt_net_redirs=no opt_progcomp=no opt_separate_help=no
        opt_multibyte=yes opt_cond_regexp=no opt_coproc=no
        opt_casemod_attrs=no opt_casemod_expansions=no opt_extglob_default=no
+       opt_globascii_default=no
 fi
 
 # Check whether --enable-alias was given.
@@ -3085,6 +3114,11 @@ if test "${enable_extended_glob_default+set}" = set; then :
   enableval=$enable_extended_glob_default; opt_extglob_default=$enableval
 fi
 
+# Check whether --enable-glob-asciiranges-default was given.
+if test "${enable_glob_asciiranges_default+set}" = set; then :
+  enableval=$enable_glob_asciiranges_default; opt_globascii_default=$enableval
+fi
+
 # Check whether --enable-help-builtin was given.
 if test "${enable_help_builtin+set}" = set; then :
   enableval=$enable_help_builtin; opt_help=$enableval
@@ -3299,6 +3333,13 @@ fi
 if test $opt_dircomplete_expand_default = yes; then
 $as_echo "#define DIRCOMPLETE_EXPAND_DEFAULT 1" >>confdefs.h
 
+fi
+if test $opt_globascii_default = yes; then
+$as_echo "#define GLOBASCII_DEFAULT 1" >>confdefs.h
+
+else
+$as_echo "#define GLOBASCII_DEFAULT 0" >>confdefs.h
+
 fi
 
 if test $opt_memscramble = yes; then
@@ -3372,7 +3413,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3412,7 +3453,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3465,7 +3506,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3506,7 +3547,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3564,7 +3605,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3608,7 +3649,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4054,8 +4095,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -4339,7 +4379,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4405,7 +4445,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4612,8 +4652,8 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#        define __EXTENSIONS__ 1
-         $ac_includes_default
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
 int
 main ()
 {
@@ -4841,6 +4881,8 @@ _ACEOF
 esac
 rm -rf conftest*
   fi
+
+
 fi
 
 
@@ -5480,7 +5522,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
          if test $ac_prog = install &&
            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
@@ -5553,7 +5595,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="${ac_tool_prefix}ar"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5593,7 +5635,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="ar"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5646,7 +5688,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5686,7 +5728,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5739,7 +5781,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_YACC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5796,6 +5838,12 @@ $as_echo "no" >&6; }
 fi
 
 
+case "$ac_cv_prog_YACC" in
+*bison*)       ;;
+*)     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: bison not available; needed to process parse.y" >&5
+$as_echo "$as_me: WARNING: bison not available; needed to process parse.y" >&2;} ;;
+esac
+
 case "$host_os" in
 opennt*|interix*)      MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;;
 *)                     MAKE_SHELL=/bin/sh ;;
@@ -5872,11 +5920,11 @@ else
 int
 main ()
 {
-/* FIXME: Include the comments suggested by Paul. */
+
 #ifndef __cplusplus
-  /* Ultrix mips cc rejects this.  */
+  /* Ultrix mips cc rejects this sort of thing.  */
   typedef int charset[2];
-  const charset cs;
+  const charset cs = { 0, 0 };
   /* SunOS 4.1.1 cc rejects this.  */
   char const *const *pcpcc;
   char **ppc;
@@ -5893,8 +5941,9 @@ main ()
   ++pcpcc;
   ppc = (char**) pcpcc;
   pcpcc = (char const *const *) ppc;
-  { /* SCO 3.2v4 cc rejects this.  */
-    char *t;
+  { /* SCO 3.2v4 cc rejects this sort of thing.  */
+    char tx;
+    char *t = &tx;
     char const *s = 0 ? (char *) 0 : (char const *) 0;
 
     *t++ = 0;
@@ -5910,10 +5959,10 @@ main ()
     iptr p = 0;
     ++p;
   }
-  { /* AIX XL C 1.02.0.0 rejects this saying
+  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; };
-    struct s *b; b->j = 5;
+    struct s { int j; const int *ap[3]; } bx;
+    struct s *b = &bx; b->j = 5;
   }
   { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
     const int foo = 10;
@@ -6266,7 +6315,8 @@ static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP)
                   - (LDBL_MANT_DIG < DBL_MANT_DIG)))
            && (int) LDBL_EPSILON == 0
          )];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -6322,7 +6372,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(((char) -1) < 0)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -6540,7 +6591,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6904,23 +6955,20 @@ else
 /* end confdefs.h.  */
 $ac_includes_default
 int
-find_stack_direction ()
+find_stack_direction (int *addr, int depth)
 {
-  static char *addr = 0;
-  auto char dummy;
-  if (addr == 0)
-    {
-      addr = &dummy;
-      return find_stack_direction ();
-    }
-  else
-    return (&dummy > addr) ? 1 : -1;
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
 }
 
 int
-main ()
+main (int argc, char **argv)
 {
-  return find_stack_direction () < 0;
+  return find_stack_direction (0, argc + !argv + 20) < 0;
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
@@ -8278,7 +8326,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_INTLBISON="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9422,23 +9470,20 @@ else
 /* end confdefs.h.  */
 $ac_includes_default
 int
-find_stack_direction ()
+find_stack_direction (int *addr, int depth)
 {
-  static char *addr = 0;
-  auto char dummy;
-  if (addr == 0)
-    {
-      addr = &dummy;
-      return find_stack_direction ();
-    }
-  else
-    return (&dummy > addr) ? 1 : -1;
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
 }
 
 int
-main ()
+main (int argc, char **argv)
 {
-  return find_stack_direction () < 0;
+  return find_stack_direction (0, argc + !argv + 20) < 0;
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
@@ -13380,7 +13425,7 @@ if test $bash_cv_type_socklen_t = yes; then
        fi
 if test $bash_cv_type_socklen_t = no; then
   cat >>confdefs.h <<_ACEOF
-#define socklen_t int
+#define socklen_t unsigned int
 _ACEOF
 
 fi
@@ -16395,16 +16440,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -16464,28 +16509,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -16506,8 +16539,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by bash $as_me 4.3-alpha, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+This file was extended by bash $as_me 4.3-beta, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -16572,11 +16605,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-bash config.status 4.3-alpha
-configured by $0, generated by GNU Autoconf 2.68,
+bash config.status 4.3-beta
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -16665,7 +16698,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
index 0e5a81b8b4629372c663cb8142c4235363411a5b..4ad6f568f64173c9a87bc15be42f4842145f8303 100644 (file)
@@ -21,10 +21,10 @@ dnl Process this file with autoconf to produce a configure script.
 #   You should have received a copy of the GNU General Public License
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-AC_REVISION([for Bash 4.3, version 4.056])dnl
+AC_REVISION([for Bash 4.3, version 4.059])dnl
 
 define(bashvers, 4.3)
-define(relstatus, alpha)
+define(relstatus, beta)
 
 AC_INIT([bash], bashvers-relstatus, [bug-bash@gnu.org])
 
@@ -191,6 +191,7 @@ opt_casemod_attrs=yes
 opt_casemod_expansions=yes
 opt_extglob_default=no
 opt_dircomplete_expand_default=no
+opt_globascii_default=no
 
 dnl options that affect how bash is compiled and linked
 opt_static_link=no
@@ -211,6 +212,7 @@ if test $opt_minimal_config = yes; then
        opt_net_redirs=no opt_progcomp=no opt_separate_help=no
        opt_multibyte=yes opt_cond_regexp=no opt_coproc=no
        opt_casemod_attrs=no opt_casemod_expansions=no opt_extglob_default=no
+       opt_globascii_default=no
 fi
 
 AC_ARG_ENABLE(alias, AC_HELP_STRING([--enable-alias], [enable shell aliases]), opt_alias=$enableval)
@@ -231,6 +233,7 @@ AC_ARG_ENABLE(disabled-builtins, AC_HELP_STRING([--enable-disabled-builtins], [a
 AC_ARG_ENABLE(dparen-arithmetic, AC_HELP_STRING([--enable-dparen-arithmetic], [include ((...)) command]), opt_dparen_arith=$enableval)
 AC_ARG_ENABLE(extended-glob, AC_HELP_STRING([--enable-extended-glob], [include ksh-style extended pattern matching]), opt_extended_glob=$enableval)
 AC_ARG_ENABLE(extended-glob-default, AC_HELP_STRING([--enable-extended-glob-default], [force extended pattern matching to be enabled by default]), opt_extglob_default=$enableval)
+AC_ARG_ENABLE(glob-asciiranges-default, AC_HELP_STRING([--enable-glob-asciiranges-default], [force bracket range expressions in pattern matching to use the C locale by default]), opt_globascii_default=$enableval)
 AC_ARG_ENABLE(help-builtin, AC_HELP_STRING([--enable-help-builtin], [include the help builtin]), opt_help=$enableval)
 AC_ARG_ENABLE(history, AC_HELP_STRING([--enable-history], [turn on command history]), opt_history=$enableval)
 AC_ARG_ENABLE(job-control, AC_HELP_STRING([--enable-job-control], [enable job control features]), opt_job_control=$enableval)
@@ -348,6 +351,11 @@ fi
 if test $opt_dircomplete_expand_default = yes; then
 AC_DEFINE(DIRCOMPLETE_EXPAND_DEFAULT)
 fi
+if test $opt_globascii_default = yes; then
+AC_DEFINE(GLOBASCII_DEFAULT, 1)
+else
+AC_DEFINE(GLOBASCII_DEFAULT, 0)
+fi
 
 if test $opt_memscramble = yes; then
 AC_DEFINE(MEMSCRAMBLE)
@@ -634,6 +642,11 @@ AC_PROG_RANLIB
 AC_PROG_YACC
 AC_PROG_MAKE_SET
 
+case "$ac_cv_prog_YACC" in
+*bison*)       ;;
+*)     AC_MSG_WARN([bison not available; needed to process parse.y]) ;;
+esac
+
 case "$host_os" in
 opennt*|interix*)      MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;;
 *)                     MAKE_SHELL=/bin/sh ;;
@@ -933,7 +946,7 @@ BASH_CHECK_TYPE(quad_t, , long, HAVE_QUAD_T)
 BASH_CHECK_TYPE(intmax_t, , $bash_cv_type_long_long)
 BASH_CHECK_TYPE(uintmax_t, , $bash_cv_type_unsigned_long_long)
 if test "$ac_cv_header_sys_socket_h" = "yes"; then
-BASH_CHECK_TYPE(socklen_t, [#include <sys/socket.h>], int, HAVE_SOCKLEN_T)
+BASH_CHECK_TYPE(socklen_t, [#include <sys/socket.h>], [unsigned int], HAVE_SOCKLEN_T)
 fi
 BASH_TYPE_RLIMIT
 
index 2cd81dcd053581b6bf16d2f6075cbbb5c4caf6bf..f843a24706d6d7a962ffc96bad540eada32f6bb2 100644 (file)
@@ -5,12 +5,12 @@
 .\"    Case Western Reserve University
 .\"    chet@po.cwru.edu
 .\"
-.\"    Last Change: Sun Mar 10 12:10:16 EDT 2013
+.\"    Last Change: Sat Jul 13 13:32:19 EDT 2013
 .\"
 .\" bash_builtins, strip all but Built-Ins section
 .if \n(zZ=1 .ig zZ
 .if \n(zY=1 .ig zY
-.TH BASH 1 "2013 March 10" "GNU Bash 4.3"
+.TH BASH 1 "2013 July 13" "GNU Bash 4.3"
 .\"
 .\" There's some problem with having a `@'
 .\" in a tagged paragraph with the BSD man macros.
@@ -424,8 +424,8 @@ The
 .B \-\-norc
 option may be used to inhibit this behavior, and the
 .B \-\-rcfile
-option may be used to force another file to be read, but
-\fIrshd\fP does not generally invoke the shell with those options
+option may be used to force another file to be read, but neither
+\fIrshd\fP nor \fIsshd\fP generally invoke the shell with those options
 or allow them to be specified.
 .PP
 If the shell is started with the effective user (group) id not equal to the
@@ -535,11 +535,11 @@ command (see
 .SM
 .B REDIRECTION
 below).
-If \fB|&\fP is used, \fIcommand\fP's standard output and standard error
-are connected to
+If \fB|&\fP is used, \fIcommand\fP's standard error, in addition to its
+standard output, is connected to
 \fIcommand2\fP's standard input through the pipe;
 it is shorthand for \fB2>&1 |\fP.
-This implicit redirection of the standard error is
+This implicit redirection of the standard error to the standard output is
 performed after any redirections specified by the command.
 .PP
 The return status of a pipeline is the exit status of the last
@@ -1871,8 +1871,9 @@ below.
 .TP
 .B BASH_COMPAT
 The value is used to set the shell's compatibility level.
-See the description of the \fBshopt\fB builtin below under
-\fBSHELL BUILTIN COMMANDS\fP  for a description of the various compatibility
+See the description of the \fBshopt\fP builtin below under
+\fBSHELL BUILTIN COMMANDS\fP
+for a description of the various compatibility
 levels and their effects.
 The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
 corresponding to the desired compatibility level.
@@ -2536,6 +2537,12 @@ array, and an index of \-1 references the last element.
 An array variable is considered set if a subscript has been assigned a
 value.  The null string is a valid value.
 .PP
+It is possible to obtain the keys (indices) of an array as well as the values.
+${\fB!\fP\fIname\fP[\fI@\fP]} and ${\fB!\fP\fIname\fP[\fI*\fP]}
+expand to the indices assigned in array variable \fIname\fP.
+The treatment when in double quotes is similar to the expansion of the
+special parameters \fI@\fP and \fI*\fP within double quotes.
+.PP
 The
 .B unset
 builtin is used to destroy arrays.  \fBunset\fP \fIname\fP[\fIsubscript\fP]
@@ -3136,8 +3143,9 @@ The
 .I expression
 is treated as if it were within double quotes, but a double quote
 inside the parentheses is not treated specially.
-All tokens in the expression undergo parameter expansion, string
-expansion, command substitution, and quote removal.
+All tokens in the expression undergo parameter and variable expansion,
+command substitution, and quote removal.
+The result is treated as the arithmetic expression to be evaluated.
 Arithmetic expansions may be nested.
 .PP
 The evaluation is performed according to the rules listed below under
@@ -5729,7 +5737,7 @@ the first call) of each line in turn.
 Any numeric argument supplied to these successive calls determines
 the direction to move through the history.  A negative argument switches
 the direction through the history (back or forward).
-The history expansion facilities are used to extract the last argument,
+The history expansion facilities are used to extract the last word,
 as if the "!$" history expansion had been specified.
 .TP
 .B shell\-expand\-line (M\-C\-e)
@@ -6665,7 +6673,8 @@ The \fIn\fRth word.
 The first argument.  That is, word 1.
 .TP
 .B $
-The last argument.
+The last word.  This is usually the last argument, but will expand to the
+zeroth word if there is only one word in the line.
 .TP
 .B %
 The word matched by the most recent `?\fIstring\fR?' search.
@@ -7393,7 +7402,8 @@ option will display the attributes and values of each
 .IR name .
 When
 .B \-p
-is used with \fIname\fP arguments, additional options are ignored.
+is used with \fIname\fP arguments, additional options,
+other than \fB\-f\fP and \fB\-F\fP, are ignored.
 When
 .B \-p
 is supplied without \fIname\fP arguments, it will display the attributes
@@ -9110,7 +9120,12 @@ is greater than
 or less than zero; otherwise 0.
 .TP
 \fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP ...]
-Toggle the values of variables controlling optional shell behavior.
+Toggle the values of settings controlling optional shell behavior.
+The settings can be either those listed below, or, if the
+.B \-o
+option is used, those available with the
+.B \-o
+option to the \fBset\fP builtin command.
 With no options, or with the
 .B \-p
 option, a list of all settable options is displayed, with
@@ -9383,7 +9398,7 @@ above for a description of
 This option is enabled by default.
 .TP 8
 .B globasciiranges
-If set, range expressions used in pattern matching (see
+If set, range expressions used in pattern matching bracket expressions (see
 .SM
 .B Pattern Matching
 above) behave as if in the traditional C locale when performing
@@ -10063,7 +10078,7 @@ subsequently reset.  The exit status is true unless a
 is readonly.
 .TP
 \fBwait\fP [\fB\--n\fP] [\fIn ...\fP]
-Wait for each specified process and return its termination status.
+Wait for each specified child process and return its termination status.
 Each
 .I n
 may be a process
@@ -10182,7 +10197,8 @@ script.
 .TP
 \fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
 .TP
-\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE
+\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE --
+http://pubs.opengroup.org/onlinepubs/9699919799/
 .TP
 http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
 .TP
index 05193c5b78094fdd5738710959ccac4ff56a1dc0..e679425b228354c8cd46a62c716905c6edd1a2f0 100644 (file)
@@ -621,11 +621,11 @@ That is, each command reads the previous command's output.  This
 connection is performed before any redirections specified by the
 command.
 
-If @samp{|&} is used, @var{command1}'s standard output and standard error
-are connected to
+If @samp{|&} is used, @var{command1}'s standard error, in addition to
+its standard output, is connected to
 @var{command2}'s standard input through the pipe;
 it is shorthand for @code{2>&1 |}.
-This implicit redirection of the standard error is
+This implicit redirection of the standard error to the standard output is
 performed after any redirections specified by the command.
 
 The reserved word @code{time} causes timing statistics
@@ -2216,8 +2216,9 @@ $(( @var{expression} ))
 
 The expression is treated as if it were within double quotes, but
 a double quote inside the parentheses is not treated specially.
-All tokens in the expression undergo parameter expansion, command
-substitution, and quote removal.
+All tokens in the expression undergo parameter and variable expansion,
+command substitution, and quote removal.
+The result is treated as the arithmetic expression to be evaluated.
 Arithmetic expansions may be nested. 
 
 The evaluation is performed according to the rules listed below
@@ -3899,8 +3900,8 @@ are given, then display the values of variables instead.
 
 The @option{-p} option will display the attributes and values of each
 @var{name}.
-When @option{-p} is used with @var{name} arguments, additional options
-are ignored.
+When @option{-p} is used with @var{name} arguments, additional options,
+other than @option{-f} and @option{-F}, are ignored.
 
 When @option{-p} is supplied without @var{name} arguments, @code{declare}
 will display the attributes and values of all variables having the
@@ -4824,7 +4825,10 @@ This builtin allows you to change additional shell optional behavior.
 shopt [-pqsu] [-o] [@var{optname} @dots{}]
 @end example
 
-Toggle the values of variables controlling optional shell behavior.
+Toggle the values of settings controlling optional shell behavior.
+The settings can be either those listed below, or, if the
+@option{-o} option is used, those available with the @option{-o}
+option to the @code{set} builtin command (@pxref{The Set Builtin}).
 With no options, or with the @option{-p} option, a list of all settable
 options is displayed, with an indication of whether or not each is set.
 The @option{-p} option causes output to be displayed in a form that
@@ -5045,7 +5049,8 @@ the ignored words are the only possible completions.
 This option is enabled by default.
 
 @item globasciiranges
-If set, range expressions used in pattern matching (@pxref{Pattern Matching})
+If set, range expressions used in pattern matching bracket expressions
+(@pxref{Pattern Matching})
 behave as if in the traditional C locale when performing
 comparisons.  That is, the current locale's collating sequence
 is not taken into account, so
@@ -6224,8 +6229,8 @@ file exists and is readable.
 It will not do this if invoked as @code{sh}.
 The @option{--norc} option may be used to inhibit this behavior, and the
 @option{--rcfile} option may be used to force another file to be read, but
-@code{rshd} does not generally invoke the shell with those options or
-allow them to be specified.
+neither @code{rshd} nor @code{sshd} generally invoke the shell with those
+options or allow them to be specified.
 
 @subsubheading Invoked with unequal effective and real @sc{uid/gid}s
 
@@ -6813,6 +6818,12 @@ and an index of -1 refers to the last element.
 An array variable is considered set if a subscript has been assigned a
 value.  The null string is a valid value.
 
+It is possible to obtain the keys (indices) of an array as well as the values.
+$@{!@var{name}[@@]@} and $@{!@var{name}[*]@} expand to the indices
+assigned in array variable @var{name}.
+The treatment when in double quotes is similar to the expansion of the
+special parameters @samp{@@} and @samp{*} within double quotes.
+
 The @code{unset} builtin is used to destroy arrays.
 @code{unset @var{name}[@var{subscript}]}
 destroys the array element at index @var{subscript}.
@@ -8069,6 +8080,12 @@ above under @ref{Pattern Matching}.
 Set the default value of the @var{extglob} shell option described
 above under @ref{The Shopt Builtin} to be enabled.
 
+@item --enable-glob-asciirange-default
+Set the default value of the @var{globasciiranges} shell option described
+above under @ref{The Shopt Builtin} to be enabled.
+This controls the behavior of character ranges when used in pattern matching
+bracket expressions.
+
 @item --enable-help-builtin
 Include the @code{help} builtin, which displays help on shell builtins and
 variables (@pxref{Bash Builtins}).
index feccba92450cd75a4ed1d380b436cc7b276426b3..6b823bc614212dd4b546063d3825d54adc52ca52 100644 (file)
@@ -2,9 +2,9 @@
 Copyright (C) 1988-2013 Free Software Foundation, Inc.
 @end ignore
 
-@set LASTCHANGE Sun Mar 10 12:10:36 EDT 2013
+@set LASTCHANGE Sat Jul 13 13:32:05 EDT 2013
 
 @set EDITION 4.3
 @set VERSION 4.3
-@set UPDATED 10 March 2013 
-@set UPDATED-MONTH March 2013 
+@set UPDATED 13 July 2013
+@set UPDATED-MONTH July 2013 
index 343beb02e4b95eda55d9d13066d3ac1102251253..99549bf36b989d02dfe107264a8d706a2c7aa9c4 100644 (file)
@@ -85,7 +85,7 @@ INC = -I. -I.. -I$(topdir) -I$(topdir)/lib -I$(topdir)/builtins \
 
 ALLPROG = print truefalse sleep pushd finfo logname basename dirname \
          tty pathchk tee head mkdir rmdir printenv id whoami \
-         uname sync push ln unlink cut realpath getconf strftime mypid
+         uname sync push ln unlink realpath strftime mypid
 OTHERPROG = necho hello cat
 
 all:   $(SHOBJ_STATUS)
@@ -110,9 +110,6 @@ print:      print.o
 necho: necho.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ necho.o $(SHOBJ_LIBS)
 
-getconf: getconf.o
-       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ getconf.o $(SHOBJ_LIBS)
-
 hello: hello.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ hello.o $(SHOBJ_LIBS)
 
@@ -179,9 +176,6 @@ ln: ln.o
 unlink:        unlink.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ unlink.o $(SHOBJ_LIBS)
 
-cut:   cut.o
-       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ cut.o $(SHOBJ_LIBS)
-
 realpath:      realpath.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ realpath.o $(SHOBJ_LIBS)
 
@@ -229,7 +223,6 @@ tee.o: tee.c
 head.o: head.c
 rmdir.o: rmdir.c
 necho.o: necho.c
-getconf.o: getconf.c
 hello.o: hello.c
 cat.o: cat.c
 printenv.o: printenv.c
index f39181a342c6b71f1f1252094471b5b05eeb983c..f0ef2c6ac3f2f1265bdd08beaaa5324750c3374c 100644 (file)
@@ -353,11 +353,11 @@ executing_line_number ()
        return currently_executing_command->value.Cond->line;
 #endif
 #if defined (DPAREN_ARITHMETIC)
-      else if (currently_executing_command->type == cm_arith)
+      if (currently_executing_command->type == cm_arith)
        return currently_executing_command->value.Arith->line;
 #endif
 #if defined (ARITH_FOR_COMMAND)
-      else if (currently_executing_command->type == cm_arith_for)
+      if (currently_executing_command->type == cm_arith_for)
        return currently_executing_command->value.ArithFor->line;
 #endif
 
@@ -607,9 +607,11 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
             want to note this before execute_in_subshell modifies the
             COMMAND struct.  Need to keep in mind that execute_in_subshell
             runs the exit trap for () subshells itself. */
+         /* This handles { command; } & */
          s = user_subshell == 0 && command->type == cm_group && pipe_in == NO_PIPE && pipe_out == NO_PIPE && asynchronous;
-         /* run exit trap for : | { ...; } and : | ( ... ) */
-         s += user_subshell == 0 && command->type == cm_group && pipe_in != NO_PIPE && pipe_out == NO_PIPE && asynchronous == 0;
+         /* run exit trap for : | { ...; } and { ...; } | : */
+         /* run exit trap for : | ( ...; ) and ( ...; ) | : */
+         s += user_subshell == 0 && command->type == cm_group && (pipe_in != NO_PIPE || pipe_out != NO_PIPE) && asynchronous == 0;
 
          last_command_exit_value = execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close);
          if (s)
@@ -3754,8 +3756,13 @@ fix_assignment_words (words)
   b = 0;
   assoc = global = array = 0;
 
+  /* Skip over assignment statements preceding a command name */
   wcmd = words;
-  for (w = words; w; w = w->next)
+  for (wcmd = words; wcmd; wcmd = wcmd->next)
+    if ((wcmd->word->flags & W_ASSIGNMENT) == 0)
+      break;
+
+  for (w = wcmd; w; w = w->next)
     if (w->word->flags & W_ASSIGNMENT)
       {
        if (b == 0)
diff --git a/expr.c b/expr.c
index ac0330183d706d78edf3bf3de8aad037ed48ec9f..c3023d469e68c69d883e91a2c2f889609092a68d 100644 (file)
--- a/expr.c
+++ b/expr.c
 /* Maximum amount of recursion allowed.  This prevents a non-integer
    variable such as "num=num+2" from infinitely adding to itself when
    "let num=num+2" is given. */
-#if 0
 #define MAX_EXPR_RECURSION_LEVEL 1024
-#else
-#define MAX_EXPR_RECURSION_LEVEL 16
-#endif
 
 /* The Tokens.  Singing "The Lion Sleeps Tonight". */
 
@@ -685,6 +681,7 @@ expbor ()
       readtok ();
       val2 = expbxor ();
       val1 = val1 | val2;
+      lasttok = NUM;
     }
 
   return (val1);
@@ -703,6 +700,7 @@ expbxor ()
       readtok ();
       val2 = expband ();
       val1 = val1 ^ val2;
+      lasttok = NUM;
     }
 
   return (val1);
@@ -721,6 +719,7 @@ expband ()
       readtok ();
       val2 = exp5 ();
       val1 = val1 & val2;
+      lasttok = NUM;
     }
 
   return (val1);
@@ -743,6 +742,7 @@ exp5 ()
        val1 = (val1 == val2);
       else if (op == NEQ)
        val1 = (val1 != val2);
+      lasttok = NUM;
     }
   return (val1);
 }
@@ -771,6 +771,7 @@ exp4 ()
        val1 = val1 < val2;
       else                     /* (op == GT) */
        val1 = val1 > val2;
+      lasttok = NUM;
     }
   return (val1);
 }
@@ -794,6 +795,7 @@ expshift ()
        val1 = val1 << val2;
       else
        val1 = val1 >> val2;
+      lasttok = NUM;
     }
 
   return (val1);
@@ -817,6 +819,7 @@ exp3 ()
        val1 += val2;
       else if (op == MINUS)
        val1 -= val2;
+      lasttok = NUM;
     }
   return (val1);
 }
@@ -868,6 +871,7 @@ exp2 ()
 #else
        val1 = (op == DIV) ? val1 / val2 : val1 % val2;
 #endif
+      lasttok = NUM;
     }
   return (val1);
 }
@@ -899,6 +903,7 @@ exppower ()
     {
       readtok ();
       val2 = exppower ();      /* exponentiation is right-associative */
+      lasttok = NUM;
       if (val2 == 0)
        return (1);
       if (val2 < 0)
@@ -917,21 +922,25 @@ exp1 ()
     {
       readtok ();
       val = !exp1 ();
+      lasttok = NUM;
     }
   else if (curtok == BNOT)
     {
       readtok ();
       val = ~exp1 ();
+      lasttok = NUM;
     }
   else if (curtok == MINUS)
     {
       readtok ();
       val = - exp1 ();
+      lasttok = NUM;
     }
   else if (curtok == PLUS)
     {
       readtok ();
       val = exp1 ();
+      lasttok = NUM;
     }
   else
     val = exp0 ();
index 3948495e7ccccd0fea5b9e2242bd4f0e90a04801..b94b19efc76d5e21e2d6b5315cd6db7bb69de0e6 100644 (file)
--- a/general.c
+++ b/general.c
@@ -770,7 +770,7 @@ trim_pathname (name, maxlen)
   *nbeg++ = '.';
 
   nlen = nend - ntail;
-  memcpy (nbeg, ntail, nlen);
+  memmove (nbeg, ntail, nlen);
   nbeg[nlen] = '\0';
 
   return name;
diff --git a/input.c b/input.c
index ad3ee513a55a715f463a0aeb919d0a11827920c3..e809a38ec36c8dc2ae79a4f197563762985ec0de 100644 (file)
--- a/input.c
+++ b/input.c
@@ -308,7 +308,7 @@ save_bash_input (fd, new_fd)
    the buffered stream.  Make sure the file descriptor used to save bash
    input is set close-on-exec. Returns 0 on success, -1 on failure.  This
    works only if fd is > 0 -- if fd == 0 and bash is reading input from
-   fd 0, save_bash_input is used instead, to cooperate with input
+   fd 0, sync_buffered_stream is used instead, to cooperate with input
    redirection (look at redir.c:add_undo_redirect()). */
 int
 check_bash_input (fd)
diff --git a/jobs.c b/jobs.c
index 2f914ffe2fadb6d51a01fb2fbf3d11c5437da178..0e81940dd17cbf4403a5d54462aa83e7a27502c1 100644 (file)
--- a/jobs.c
+++ b/jobs.c
@@ -2482,6 +2482,9 @@ wait_for (pid)
          waiting_for_child++;
          r = waitchld (pid, 1);        /* XXX */
          waiting_for_child--;
+#if 0
+itrace("wait_for: blocking wait for %d returns %d child = %p", (int)pid, r, child);
+#endif
 #  if defined (MUST_UNBLOCK_CHLD)
          sigaction (SIGCHLD, &oact, (struct sigaction *)NULL);
          sigprocmask (SIG_SETMASK, &chldset, (sigset_t *)NULL);
@@ -3218,6 +3221,10 @@ waitchld (wpid, block)
 
       pid = WAITPID (-1, &status, waitpid_flags);
 
+#if 0
+if (wpid != -1 && block)
+  itrace("waitchld: blocking waitpid returns %d", pid);
+#endif
       /* WCONTINUED may be rejected by waitpid as invalid even when defined */
       if (wcontinued && pid < 0 && errno == EINVAL)
        {
@@ -3240,6 +3247,9 @@ waitchld (wpid, block)
            break;
        }
 
+#if 0
+itrace("waitchld: waitpid returns %d block = %d", pid, block);
+#endif
       /* If waitpid returns 0, there are running children.  If it returns -1,
         the only other error POSIX says it can return is EINTR. */
       CHECK_TERMSIG;
index 23b8fb1368f1e78c92f9f0c2fd7126267160ba2c..848610ab72d16ea9463f73474cd6c4bbadfba1e4 100644 (file)
 #define STREQ(a, b) ((a)[0] == (b)[0] && strcmp(a, b) == 0)
 #define STREQN(a, b, n) ((a)[0] == (b)[0] && strncmp(a, b, n) == 0)
 
-int glob_asciirange = 0;
+#ifndef GLOBASCII_DEFAULT
+#  define GLOBASCII_DEFAULT 0
+#endif
+
+int glob_asciirange = GLOBASCII_DEFAULT;
 
 /* We use strcoll(3) for range comparisons in bracket expressions,
    even though it can have unwanted side effects in locales
index 10bc711447c58cafbfdc14f0da59b3754ed8c07b..8acf4ac4ca0468e1ed2e53d8e7287e84f22730e1 100644 (file)
@@ -1330,6 +1330,7 @@ remove_trailing:
            {
              i = _rl_skip_to_delim (value, 1, *value);
              value[i] = '\0';
+             value++;  /* skip past the quote */
            }
          else
            goto remove_trailing;
index a74ca702f29c9bfd1b81e9612882b47151ee0f1a..89d9035f236ff90b6dcfe45334f0a43508ed919e 100644 (file)
@@ -167,13 +167,18 @@ _rl_print_color_indicator (char *f)
         {
           colored_filetype = C_DIR;
 
+#if defined (S_ISVTX)
           if ((mode & S_ISVTX) && (mode & S_IWOTH)
               && is_colored (C_STICKY_OTHER_WRITABLE))
             colored_filetype = C_STICKY_OTHER_WRITABLE;
-          else if ((mode & S_IWOTH) != 0 && is_colored (C_OTHER_WRITABLE))
+          else
+#endif
+          if ((mode & S_IWOTH) != 0 && is_colored (C_OTHER_WRITABLE))
             colored_filetype = C_OTHER_WRITABLE;
+#if defined (S_ISVTX)
           else if ((mode & S_ISVTX) != 0 && is_colored (C_STICKY))
             colored_filetype = C_STICKY;
+#endif
         }
       else if (S_ISLNK (mode))
         colored_filetype = ((linkok == 0
index 7e6700a827492a8bcdad64f4043d2f7ede42a49d..31f03f7bdefbf387c81846a68fc7718c01d2f711 100644 (file)
@@ -2132,13 +2132,17 @@ rl_completion_matches (text, entry_function)
          xfree (match_list);
          match_list = 0;
          match_list_size = 0;
+         matches = 0;
          RL_CHECK_SIGNALS ();
        }
 
-      if (matches + 1 == match_list_size)
+      if (matches + 1 >= match_list_size)
        match_list = (char **)xrealloc
          (match_list, ((match_list_size += 10) + 1) * sizeof (char *));
 
+      if (match_list == 0)
+       return (match_list);
+
       match_list[++matches] = string;
       match_list[matches + 1] = (char *)NULL;
     }
index eb540cd4bc46feb9733b5e1fac6e8dcca73b6278..8b3e1735395676f9ad25fea0395a246b14b13f5d 100644 (file)
@@ -612,6 +612,7 @@ means that vi mode is active.
 * Miscellaneous Functions::    Functions that don't fall into any category.
 * Alternate Interface::        Using Readline in a `callback' fashion.
 * A Readline Example::         An example Readline function.
+* Alternate Interface Example::        An example program using the alternate interface.
 @end menu
 
 @node Function Naming
@@ -1293,8 +1294,9 @@ are functions available to make this easy.
 @deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler)
 Set up the terminal for readline I/O and display the initial
 expanded value of @var{prompt}.  Save the value of @var{lhandler} to
-use as a function to call when a complete line of input has been entered.
-The function takes the text of the line as an argument.
+use as a handler function to call when a complete line of input has been
+entered.
+The handler function receives the text of the line as an argument.
 @end deftypefun
 
 @deftypefun void rl_callback_read_char (void)
@@ -1302,14 +1304,15 @@ Whenever an application determines that keyboard input is available, it
 should call @code{rl_callback_read_char()}, which will read the next
 character from the current input source.
 If that character completes the line, @code{rl_callback_read_char} will
-invoke the @var{lhandler} function saved by @code{rl_callback_handler_install}
-to process the line.
+invoke the @var{lhandler} function installed by
+@code{rl_callback_handler_install} to process the line.
 Before calling the @var{lhandler} function, the terminal settings are
 reset to the values they had before calling
 @code{rl_callback_handler_install}.
 If the @var{lhandler} function returns,
+and the line handler remains installed,
 the terminal settings are modified for Readline's use again.
-@code{EOF} is  indicated by calling @var{lhandler} with a
+@code{EOF} is indicated by calling @var{lhandler} with a
 @code{NULL} line.
 @end deftypefun
 
@@ -1389,6 +1392,98 @@ invert_case_line (count, key)
 @}
 @end example
 
+@node Alternate Interface Example
+@subsection Alternate Interface Example
+
+Here is a complete program that illustrates Readline's alternate interface.
+It reads lines from the terminal and displays them, providing the
+standard history and TAB completion functions.
+It understands the EOF character or "exit" to exit the program.
+
+@example
+/* Standard include files. stdio.h is required. */
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Used for select(2) */
+#include <sys/types.h>
+#include <sys/select.h>
+
+#include <stdio.h>
+
+/* Standard readline include files. */
+#include <readline/readline.h>
+#include <readline/history.h>
+
+static void cb_linehandler (char *);
+
+int running;
+const char *prompt = "rltest$ ";
+
+/* Callback function called for each line when accept-line executed, EOF
+   seen, or EOF character read.  This sets a flag and returns; it could
+   also call exit(3). */
+static void
+cb_linehandler (char *line)
+@{
+  /* Can use ^D (stty eof) or `exit' to exit. */
+  if (line == NULL || strcmp (line, "exit") == 0)
+    @{
+      if (line == 0)
+        printf ("\n");
+      printf ("exit\n");
+      /* This function needs to be called to reset the terminal settings,
+         and calling it from the line handler keeps one extra prompt from
+         being displayed. */
+      rl_callback_handler_remove ();
+
+      running = 0;
+    @}
+  else
+    @{
+      if (*line)
+        add_history (line);
+      printf ("input line: %s\n", line);
+      free (line);
+    @}
+@}
+
+int
+main (int c, char **v)
+@{
+  fd_set fds;
+  int r;
+
+  /* Install the line handler. */
+  rl_callback_handler_install (prompt, cb_linehandler);
+
+  /* Enter a simple event loop.  This waits until something is available
+     to read on readline's input stream (defaults to standard input) and
+     calls the builtin character read callback to read it.  It does not
+     have to modify the user's terminal settings. */
+  running = 1;
+  while (running)
+    @{
+      FD_ZERO (&fds);
+      FD_SET (fileno (rl_instream), &fds);    
+
+      r = select (FD_SETSIZE, &fds, NULL, NULL, NULL);
+      if (r < 0)
+        @{
+          perror ("rltest: select");
+          rl_callback_handler_remove ();
+          break;
+        @}
+
+      if (FD_ISSET (fileno (rl_instream), &fds))
+        rl_callback_read_char ();
+    @}
+
+  printf ("rltest: Event loop has exited\n");
+  return 0;
+@}
+@end example
+
 @node Readline Signal Handling
 @section Readline Signal Handling
 
index ba54465290e8de17c2befacb5b82dd5c8ae29458..db450183428fa742382aef514fc026da4a28d109 100644 (file)
@@ -1,10 +1,10 @@
 @ignore
-Copyright (C) 1988-2012 Free Software Foundation, Inc. 
+Copyright (C) 1988-2013 Free Software Foundation, Inc. 
 @end ignore
 
-@set EDITION 6.2
-@set VERSION 6.2
-@set UPDATED 15 November 2012
-@set UPDATED-MONTH November 2012
+@set EDITION 6.3
+@set VERSION 6.3
+@set UPDATED 26 May 2013
+@set UPDATED-MONTH May 2013
 
-@set LASTCHANGE Thu Nov 15 21:03:04 EST 2012
+@set LASTCHANGE Sat May 25 17:02:56 EDT 2013
diff --git a/lib/readline/examples/rl-callbacktest.c b/lib/readline/examples/rl-callbacktest.c
new file mode 100644 (file)
index 0000000..a7e451c
--- /dev/null
@@ -0,0 +1,81 @@
+/* Standard include files. stdio.h is required. */
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Used for select(2) */
+#include <sys/types.h>
+#include <sys/select.h>
+
+#include <stdio.h>
+
+/* Standard readline include files. */
+#include <readline/readline.h>
+#include <readline/history.h>
+
+static void cb_linehandler (char *);
+
+int running;
+const char *prompt = "rltest$ ";
+
+/* Callback function called for each line when accept-line executed, EOF
+   seen, or EOF character read.  This sets a flag and returns; it could
+   also call exit(3). */
+static void
+cb_linehandler (char *line)
+{
+  /* Can use ^D (stty eof) or `exit' to exit. */
+  if (line == NULL || strcmp (line, "exit") == 0)
+    {
+      if (line == 0)
+        printf ("\n");
+      printf ("exit\n");
+      /* This function needs to be called to reset the terminal settings,
+        and calling it from the line handler keeps one extra prompt from
+        being displayed. */
+      rl_callback_handler_remove ();
+
+      running = 0;
+    }
+  else
+    {
+      if (*line)
+       add_history (line);
+      printf ("input line: %s\n", line);
+      free (line);
+    }
+}
+
+int
+main (int c, char **v)
+{
+  fd_set fds;
+  int r;
+
+  /* Install the line handler. */
+  rl_callback_handler_install (prompt, cb_linehandler);
+
+  /* Enter a simple event loop.  This waits until something is available
+     to read on readline's input stream (defaults to standard input) and
+     calls the builtin character read callback to read it.  It does not
+     have to modify the user's terminal settings. */
+  running = 1;
+  while (running)
+    {
+      FD_ZERO (&fds);
+      FD_SET (fileno (rl_instream), &fds);    
+
+      r = select (FD_SETSIZE, &fds, NULL, NULL, NULL);
+      if (r < 0)
+       {
+         perror ("rltest: select");
+         rl_callback_handler_remove ();
+         break;
+       }
+
+      if (FD_ISSET (fileno (rl_instream), &fds))
+       rl_callback_read_char ();
+    }
+
+  printf ("rltest: Event loop has exited\n");
+  return 0;
+}
index 6ab3a1cea61e61bed63e7e558a43ea9284a76eb1..bb7431567ec6950e12d47914973b10919ec0e67a 100644 (file)
@@ -411,14 +411,16 @@ history_truncate_file (fname, lines)
      truncate to. */
   if (bp > buffer && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
     {
-      write (file, bp, chars_read - (bp - buffer));
+      if (write (file, bp, chars_read - (bp - buffer)) < 0)
+       rv = errno;
 
 #if defined (__BEOS__)
       /* BeOS ignores O_TRUNC. */
       ftruncate (file, chars_read - (bp - buffer));
 #endif
 
-      close (file);
+      if (close (file) < 0 && rv == 0)
+       rv = errno;
     }
 
  truncate_exit:
@@ -547,7 +549,8 @@ mmap_error:
 #endif
   }
 
-  close (file);
+  if (close (file) < 0 && rv == 0)
+    rv = errno;
 
   if (rv != 0 && output && bakname)
     rename (bakname, output);
index cd3e93926e27e2f8cec3b25db9ff2cd6cc0085ff..1181e7ccf83bcb98dc0b801cd25fd3fd584cd555 100644 (file)
@@ -318,7 +318,7 @@ add_history_time (string)
 {
   HIST_ENTRY *hs;
 
-  if (string == 0)
+  if (string == 0 || history_length < 1)
     return;
   hs = the_history[history_length - 1];
   FREE (hs->timestamp);
index b331977bab4715741d31a484d95b2a2055593de4..45e5ada58d15f8acc53b79c83c3342882c3d37cb 100644 (file)
@@ -397,8 +397,8 @@ readline_internal_setup ()
   _rl_out_stream = rl_outstream;
 
   /* Enable the meta key only for the duration of readline(), if this
-     terminal has one. */
-  if (_rl_enable_meta)
+     terminal has one and the terminal has been initialized */
+  if (_rl_enable_meta & RL_ISSTATE (RL_STATE_TERMPREPPED))
     _rl_enable_meta_key ();
 
   if (rl_startup_hook)
@@ -406,7 +406,7 @@ readline_internal_setup ()
 
 #if defined (VI_MODE)
   if (rl_editing_mode == vi_mode)
-    rl_vi_insert_mode (1, 'i');
+    rl_vi_insertion_mode (1, 'i');     /* don't want to reset last */
 #endif /* VI_MODE */
 
   /* If we're not echoing, we still want to at least print a prompt, because
@@ -469,7 +469,9 @@ readline_internal_teardown (eof)
   if (rl_undo_list)
     rl_free_undo_list ();
 
-  /* Disable the meta key, if this terminal has one. */
+  /* Disable the meta key, if this terminal has one and we were told to use it.
+     The check whether or not we sent the enable string is in
+     _rl_disable_meta_key(); the flag is set in _rl_enable_meta_key */
   _rl_disable_meta_key ();
 
   /* Restore normal cursor, if available. */
@@ -821,7 +823,7 @@ _rl_dispatch_subseq (key, map, got_subseq)
 
          rl_dispatching = 1;
          RL_SETSTATE(RL_STATE_DISPATCHING);
-         (*func) (rl_numeric_arg * rl_arg_sign, key);
+         r = (*func) (rl_numeric_arg * rl_arg_sign, key);
          RL_UNSETSTATE(RL_STATE_DISPATCHING);
          rl_dispatching = 0;
 
@@ -957,6 +959,7 @@ _rl_dispatch_subseq (key, map, got_subseq)
 #if defined (VI_MODE)
   if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
       key != ANYOTHERKEY &&
+      rl_key_sequence_length == 1 &&   /* XXX */
       _rl_vi_textmod_command (key))
     _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
 #endif
index 25e4f377422a97f5d21879aa1057f0db7175ca7c..d373ba141ec56c3c9592fee12e943cbac1c7cd75 100644 (file)
@@ -141,10 +141,19 @@ _rl_signal_handler (sig)
 
 #if defined (SIGWINCH)
   if (sig == SIGWINCH)
-    rl_resize_terminal ();
+    {
+      rl_resize_terminal ();
+      /* XXX - experimental for now */
+      /* Call a signal hook because though we called the original signal handler
+        in rl_sigwinch_handler below, we will not resend the signal to
+        ourselves. */
+      if (rl_signal_event_hook)
+       (*rl_signal_event_hook) ();
+    }
   else
 #endif
     _rl_handle_signal (sig);
+
   SIGHANDLER_RETURN;
 }
 
index 5edc08aa0e661b73c88fc6f1b61dce3089bd54b0..bbcffa6fa11fcda38b1bc62b8867bd6ca1af5cde 100644 (file)
@@ -39,6 +39,7 @@
 #include <shmbchar.h>
 #include <shmbutil.h>
 #include <chartypes.h>
+#include <typemax.h>
 
 #include <glob/strmatch.h>
 
 
 extern char *substring __P((char *, int, int));
 
+#ifndef UCHAR_MAX
+#  define UCHAR_MAX    TYPE_MAXIMUM(unsigned char)
+#endif
+
 #if defined (HANDLE_MULTIBYTE)
 static wchar_t
 cval (s, i)
@@ -141,8 +146,10 @@ sh_modcase (string, pat, flags)
       if (iswalnum (wc) == 0)
        {
          inword = 0;
+#if 0
          ADVANCE_CHAR (ret, end, start);
          continue;
+#endif
        }
 
       if (pat)
@@ -203,8 +210,11 @@ sh_modcase (string, pat, flags)
       else
        nop = flags;
 
-      if (MB_CUR_MAX == 1 || is_basic ((int)wc))
+      /* Need to check UCHAR_MAX since wc may have already been converted to a
+        wide character by cval() */
+      if (MB_CUR_MAX == 1 || (wc <= UCHAR_MAX && is_basic ((int)wc)))
        {
+singlebyte:
          switch (nop)
          {
          default:
@@ -221,7 +231,10 @@ sh_modcase (string, pat, flags)
        {
          m = mbrtowc (&wc, string + start, end - start, &state);
          if (MB_INVALIDCH (m))
-           wc = (wchar_t)string[start];
+           {
+             wc = (unsigned char)string[start];
+             goto singlebyte;
+           }
          else if (MB_NULLWCH (m))
            wc = L'\0';
          switch (nop)
index cddca48358adf1f738de49c218083850313741b7..26016b76b3787c84cc7d148745672b28cebb7657 100644 (file)
@@ -269,7 +269,7 @@ sh_realpath (pathname, resolved)
       wd = get_working_directory ("sh_realpath");
       if (wd == 0)
        return ((char *)NULL);
-      tdir = sh_makepath ((char *)pathname, wd, 0);
+      tdir = sh_makepath (wd, (char *)pathname, 0);
       free (wd);
     }
   else
index c79ba9cdfadceafa091b3cc490b1567356ff84d5..31cce1c179c504d48d87fa3de7adda46529aa308 100644 (file)
@@ -94,6 +94,15 @@ sh_single_quote (string)
 
   result = (char *)xmalloc (3 + (4 * strlen (string)));
   r = result;
+
+  if (string[0] == '\'' && string[1] == 0)
+    {
+      *r++ = '\\';
+      *r++ = '\'';
+      *r++ = 0;
+      return result;
+    }
+
   *r++ = '\'';
 
   for (s = string; s && (c = *s); s++)
diff --git a/parse.y b/parse.y
index fd3f97f6239f1d132b72d032a42e6abc33ce3053..58e1fc524717c442ff7fa7992574afc70ceb40d0 100644 (file)
--- a/parse.y
+++ b/parse.y
@@ -3301,6 +3301,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
         treat single quotes as special when inside a double-quoted
         ${...}. This logic must agree with subst.c:extract_dollar_brace_string
         since they share the same defines. */
+      /* FLAG POSIX INTERP 221 */
       if (flags & P_DOLBRACE)
         {
           /* ${param%[%]word} */
@@ -3311,7 +3312,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
            dolbrace_state = DOLBRACE_QUOTE;
           /* ${param/[/]pat/rep} */
          else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '/' && retind > 1)
-           dolbrace_state = DOLBRACE_QUOTE;
+           dolbrace_state = DOLBRACE_QUOTE2;   /* XXX */
           /* ${param^[^]pat} */
          else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '^' && retind > 1)
            dolbrace_state = DOLBRACE_QUOTE;
@@ -3353,7 +3354,18 @@ parse_matched_pair (qc, open, close, lenp, flags)
                  ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
                  xfree (nestret);
 
-                 if ((rflags & P_DQUOTE) == 0)
+                 /* If we're parsing a double-quoted brace expansion and we are
+                    not in a place where single quotes are treated specially,
+                    make sure we single-quote the results of the ansi
+                    expansion because quote removal should remove them later */
+                 /* FLAG POSIX INTERP 221 */
+                 if ((shell_compatibility_level > 42) && (rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE))
+                   {
+                     nestret = sh_single_quote (ttrans);
+                     free (ttrans);
+                     nestlen = strlen (nestret);
+                   }
+                 else if ((rflags & P_DQUOTE) == 0)
                    {
                      nestret = sh_single_quote (ttrans);
                      free (ttrans);
@@ -5344,9 +5356,13 @@ decode_prompt_string (string)
 #undef ROOT_PATH
 #undef DOUBLE_SLASH_ROOT
                else
-                 /* polite_directory_format is guaranteed to return a string
-                    no longer than PATH_MAX - 1 characters. */
-                 strcpy (t_string, polite_directory_format (t_string));
+                 {
+                   /* polite_directory_format is guaranteed to return a string
+                      no longer than PATH_MAX - 1 characters. */
+                   temp = polite_directory_format (t_string);
+                   if (temp != t_string)
+                     strcpy (t_string, temp);
+                 }
 
                temp = trim_pathname (t_string, PATH_MAX - 1);
                /* If we're going to be expanding the prompt string later,
index 5078456720da84040989ea1c3e5c722d263e314d..5d286923494ae857da3b396f05a6250df401834d 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -67,6 +67,7 @@ struct dstack {
 #define DOLBRACE_OP    0x02
 #define DOLBRACE_WORD  0x04
 
-#define DOLBRACE_QUOTE 0x40
+#define DOLBRACE_QUOTE 0x40    /* single quote is special in double quotes */
+#define DOLBRACE_QUOTE2        0x80    /* single quote is semi-special in double quotes */
 
 #endif /* _PARSER_H_ */
diff --git a/po/._hr.po b/po/._hr.po
new file mode 100644 (file)
index 0000000..059ef4e
Binary files /dev/null and b/po/._hr.po differ
index 8da7c6f085687198c4f972214f6dc478d9652f52..09b637837cee353596bb94e8d0c224338fd043ea 100644 (file)
--- a/po/hr.po
+++ b/po/hr.po
@@ -1,68 +1,67 @@
 # Translation of bash to Croatian.
-# Copyright (C) 2012 Free Software Foundation, Inc.
+# Copyright © 2012 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
-# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012, 2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: bash 4.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-03-08 16:00-0500\n"
-"PO-Revision-Date: 2012-11-01 01:46+0100\n"
+"POT-Creation-Date: 2011-01-28 22:09-0500\n"
+"PO-Revision-Date: 2013-04-18 01:00+0200\n"
 "Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: hr\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Gtranslator 2.91.6\n"
 
-#: arrayfunc.c:51
+#: arrayfunc.c:50
 msgid "bad array subscript"
 msgstr "neispravan indeks polja"
 
-#: arrayfunc.c:356 builtins/declare.def:578
+#: arrayfunc.c:313 builtins/declare.def:487
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: ne mogu pretvoriti indeksirano u asocijativno polje"
 
-#: arrayfunc.c:539
+#: arrayfunc.c:480
 #, c-format
 msgid "%s: invalid associative array key"
 msgstr "%s: neispravan ključ asocijativnog polja"
 
-#: arrayfunc.c:541
+#: arrayfunc.c:482
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: ne mogu pridružiti nenumeričkom indeksu"
 
-#: arrayfunc.c:586
+#: arrayfunc.c:518
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: mora koristiti indeks pri pridruživanju asocijativnog polja"
 
-#: bashhist.c:388
+#: bashhist.c:387
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: ne mogu napraviti: %s"
 
-#: bashline.c:3923
+#: bashline.c:3498
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: ne mogu pronaći tipkovničku mapu za naredbu"
 
-#: bashline.c:4010
+#: bashline.c:3584
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: prvi znak različit od praznine nije „\"”"
 
-#: bashline.c:4039
+#: bashline.c:3613
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "nema zatvorene „%c” u %s"
 
-#: bashline.c:4073
+#: bashline.c:3647
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: nedostaje dvotočje za razdvajanje"
@@ -72,36 +71,36 @@ msgstr "%s: nedostaje dvotočje za razdvajanje"
 msgid "`%s': invalid alias name"
 msgstr "„%s”: neispravno drugo ime"
 
-#: builtins/bind.def:123 builtins/bind.def:126
+#: builtins/bind.def:120 builtins/bind.def:123
 msgid "line editing not enabled"
 msgstr "uređivanje redaka nije omogućeno"
 
-#: builtins/bind.def:212
+#: builtins/bind.def:206
 #, c-format
 msgid "`%s': invalid keymap name"
 msgstr "„%s”: neispravno ime tipkovničke mape"
 
-#: builtins/bind.def:251
+#: builtins/bind.def:245
 #, c-format
 msgid "%s: cannot read: %s"
 msgstr "%s: ne mogu čitati: %s"
 
-#: builtins/bind.def:266
+#: builtins/bind.def:260
 #, c-format
 msgid "`%s': cannot unbind"
 msgstr "„%s”: ne mogu ukloniti vezu"
 
-#: builtins/bind.def:304 builtins/bind.def:334
+#: builtins/bind.def:295 builtins/bind.def:325
 #, c-format
 msgid "`%s': unknown function name"
 msgstr "„%s”: nepoznato ime funkcije"
 
-#: builtins/bind.def:312
+#: builtins/bind.def:303
 #, c-format
 msgid "%s is not bound to any keys.\n"
 msgstr "%s nije pridružen nijednoj tipki.\n"
 
-#: builtins/bind.def:316
+#: builtins/bind.def:307
 #, c-format
 msgid "%s can be invoked via "
 msgstr "%s se može pozvati pomoću "
@@ -124,15 +123,11 @@ msgstr ""
 "    \n"
 "    Bez IZRAZA vraća "
 
-#: builtins/cd.def:239
+#: builtins/cd.def:235
 msgid "HOME not set"
 msgstr "HOME nije postavljen"
 
-#: builtins/cd.def:247 builtins/common.c:166 test.c:855
-msgid "too many arguments"
-msgstr "previše argumenata"
-
-#: builtins/cd.def:258
+#: builtins/cd.def:247
 msgid "OLDPWD not set"
 msgstr "OLDPWD nije postavljen"
 
@@ -141,7 +136,7 @@ msgstr "OLDPWD nije postavljen"
 msgid "line %d: "
 msgstr "redak %d: "
 
-#: builtins/common.c:139 error.c:265
+#: builtins/common.c:139 error.c:261
 #, c-format
 msgid "warning: "
 msgstr "upozorenje: "
@@ -151,7 +146,11 @@ msgstr "upozorenje: "
 msgid "%s: usage: "
 msgstr "%s: uporaba: "
 
-#: builtins/common.c:191 shell.c:506 shell.c:788
+#: builtins/common.c:166 test.c:832
+msgid "too many arguments"
+msgstr "previše argumenata"
+
+#: builtins/common.c:191 shell.c:500 shell.c:782
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: opcija zahtijeva argument"
@@ -166,7 +165,7 @@ msgstr "%s: potreban je numerički argument"
 msgid "%s: not found"
 msgstr "%s: nije pronađen"
 
-#: builtins/common.c:214 shell.c:801
+#: builtins/common.c:214 shell.c:795
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: neispravna opcija"
@@ -176,7 +175,7 @@ msgstr "%s: neispravna opcija"
 msgid "%s: invalid option name"
 msgstr "%s: neispravno ime opcije"
 
-#: builtins/common.c:228 general.c:234 general.c:239
+#: builtins/common.c:228 general.c:231 general.c:236
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "„%s”: nije ispravan identifikator"
@@ -189,7 +188,7 @@ msgstr "neispravan oktalni broj"
 msgid "invalid hex number"
 msgstr "neispravan heksadekadski broj"
 
-#: builtins/common.c:242 expr.c:1451
+#: builtins/common.c:242 expr.c:1362
 msgid "invalid number"
 msgstr "neispravan broj"
 
@@ -203,7 +202,7 @@ msgstr "%s: neispravno naveden signal"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s”: nije pid ili ispravno naveden zadatak"
 
-#: builtins/common.c:264 error.c:458
+#: builtins/common.c:264 error.c:454
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: varijabla samo za čitanje"
@@ -275,58 +274,48 @@ msgstr "%s: greška pri otkrivanju trenutnog direktorija: %s: %s\n"
 msgid "%s: ambiguous job spec"
 msgstr "%s: višeznačan navod zadatka"
 
-#: builtins/complete.def:277
+#: builtins/complete.def:276
 #, c-format
 msgid "%s: invalid action name"
 msgstr "%s: neispravno ime radnje"
 
-#: builtins/complete.def:450 builtins/complete.def:645
-#: builtins/complete.def:855
+#: builtins/complete.def:449 builtins/complete.def:644
+#: builtins/complete.def:853
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: nije navedeno nadopunjavanje"
 
-#: builtins/complete.def:697
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "upozorenje: opcija -F možda neće raditi kako želite"
 
-#: builtins/complete.def:699
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "upozorenje: opcija -C možda neće raditi kako želite"
 
-#: builtins/complete.def:828
+#: builtins/complete.def:826
 msgid "not currently executing completion function"
 msgstr "trenutno ne izvršavam funkciju nadopunjavanja"
 
-#: builtins/declare.def:126
+#: builtins/declare.def:124
 msgid "can only be used in a function"
 msgstr "može se koristiti samo u funkciji"
 
-#: builtins/declare.def:311 builtins/declare.def:526
-#, c-format
-msgid "%s: reference variable cannot be an array"
-msgstr ""
-
-#: builtins/declare.def:317
-#, c-format
-msgid "%s: nameref variable self references not allowed"
-msgstr ""
-
-#: builtins/declare.def:415
+#: builtins/declare.def:366
 msgid "cannot use `-f' to make functions"
 msgstr "ne mogu koristiti „-f” za izradu funkcija"
 
-#: builtins/declare.def:427 execute_cmd.c:5315
+#: builtins/declare.def:378 execute_cmd.c:5105
 #, c-format
 msgid "%s: readonly function"
 msgstr "%s: funkcija samo za čitanje"
 
-#: builtins/declare.def:565
+#: builtins/declare.def:474
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: ne mogu uništiti varijable polja na ovaj način"
 
-#: builtins/declare.def:572 builtins/read.def:721
+#: builtins/declare.def:481
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: ne mogu pretvoriti asocijativno u indeksirano polje"
@@ -355,23 +344,24 @@ msgstr "%s: nije dinamički učitan"
 msgid "%s: cannot delete: %s"
 msgstr "%s: ne mogu ukloniti: %s"
 
-#: builtins/evalfile.c:140 builtins/hash.def:171 execute_cmd.c:5162
-#: shell.c:1481
+#: builtins/evalfile.c:135 builtins/hash.def:171 execute_cmd.c:4961
+#: shell.c:1457
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: to je direktorij"
 
-#: builtins/evalfile.c:146
+#: builtins/evalfile.c:140
 #, c-format
 msgid "%s: not a regular file"
 msgstr "%s: nije obična datoteka"
 
-#: builtins/evalfile.c:155
+#: builtins/evalfile.c:148
 #, c-format
 msgid "%s: file is too large"
 msgstr "%s: datoteka je prevelika"
 
-#: builtins/evalfile.c:190 builtins/evalfile.c:208 shell.c:1491
+#: builtins/evalfile.c:182 builtins/evalfile.c:200 execute_cmd.c:5032
+#: shell.c:1467
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: ne mogu izvršiti binarnu datoteku"
@@ -406,7 +396,7 @@ msgstr "naredba nije pronađena"
 
 #: builtins/fc.def:312 builtins/fc.def:359
 msgid "history specification"
-msgstr ""
+msgstr "specifikacija povijesti"
 
 #: builtins/fc.def:380
 #, c-format
@@ -444,28 +434,27 @@ msgstr "%s: tablica raspršivanja prazna\n"
 #: builtins/hash.def:245
 #, c-format
 msgid "hits\tcommand\n"
-msgstr ""
+msgstr "pogoci\tnaredba\n"
 
 #: builtins/help.def:130
 #, c-format
 msgid "Shell commands matching keyword `"
 msgid_plural "Shell commands matching keywords `"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Naredbe ljuske koje odgovaraju ključnoj riječi „"
+msgstr[1] "Naredbe ljuske koje odgovaraju ključnim riječima „"
+msgstr[2] "Naredbe ljuske koje odgovaraju ključnim riječima „"
 
 #: builtins/help.def:168
 #, c-format
-msgid ""
-"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
+msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr "nisu pronađene teme pomoći za „%s”. Pokušajte „help help”, „man -k %s” ili „info %s”."
 
 #: builtins/help.def:185
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: ne mogu otvoriti: %s"
 
-#: builtins/help.def:471
+#: builtins/help.def:337
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -476,6 +465,13 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
+"Ove naredbe ljuske su interno definirane. Upišite „help” za prikaz popisa.\n"
+"Upišite „help ime” za više podataka o funkciji „ime”.\n"
+"Koristite „info bash” za više općenitih podataka o ljusci.\n"
+"Koristite „man -k” ili „info” za više podataka o naredbama izvan ovog popisa.\n"
+"\n"
+"Zvjezdica (*) pokraj imena označava onemogućenu naredbu.\n"
+"\n"
 
 #: builtins/history.def:154
 msgid "cannot use more than one of -anrw"
@@ -485,7 +481,7 @@ msgstr "ne mogu koristiti više od jedne od opcija -anrw"
 msgid "history position"
 msgstr "mjesto u povijesti"
 
-#: builtins/history.def:366
+#: builtins/history.def:365
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: proširenje povijesti nije uspjelo"
@@ -499,16 +495,16 @@ msgstr "%s: inlib nije uspio"
 msgid "no other options allowed with `-x'"
 msgstr "nisu dozvoljene druge opcije uz „-x”"
 
-#: builtins/kill.def:200
+#: builtins/kill.def:198
 #, c-format
 msgid "%s: arguments must be process or job IDs"
 msgstr "%s: argumenti moraju biti identifikatori procesa ili zadataka"
 
-#: builtins/kill.def:263
+#: builtins/kill.def:261
 msgid "Unknown error"
 msgstr "Nepoznata greška"
 
-#: builtins/let.def:95 builtins/let.def:120 expr.c:586 expr.c:601
+#: builtins/let.def:95 builtins/let.def:120 expr.c:552 expr.c:567
 msgid "expression expected"
 msgstr "očekujem izraz"
 
@@ -517,64 +513,64 @@ msgstr "očekujem izraz"
 msgid "%s: not an indexed array"
 msgstr "%s: nije indeksirano polje"
 
-#: builtins/mapfile.def:259 builtins/read.def:302
+#: builtins/mapfile.def:256 builtins/read.def:279
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: neispravno naveden opisnik datoteke"
 
-#: builtins/mapfile.def:267 builtins/read.def:309
+#: builtins/mapfile.def:264 builtins/read.def:286
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: neispravan opisnik datoteke: %s"
 
-#: builtins/mapfile.def:276 builtins/mapfile.def:314
+#: builtins/mapfile.def:273 builtins/mapfile.def:311
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: neispravan broj redaka"
 
-#: builtins/mapfile.def:287
+#: builtins/mapfile.def:284
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: neispravan izvor polja"
 
-#: builtins/mapfile.def:304
+#: builtins/mapfile.def:301
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: neispravan element povratnog poziva"
 
-#: builtins/mapfile.def:336
+#: builtins/mapfile.def:333
 msgid "empty array variable name"
 msgstr "prazno ime varijable polja"
 
-#: builtins/mapfile.def:357
+#: builtins/mapfile.def:354
 msgid "array variable support required"
 msgstr "potrebna je podrška varijable polja"
 
-#: builtins/printf.def:402
+#: builtins/printf.def:394
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s”: nedostaje znak oblika"
 
-#: builtins/printf.def:456
+#: builtins/printf.def:448
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "„%c”: neispravno naveden oblik vremena"
 
-#: builtins/printf.def:658
+#: builtins/printf.def:635
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c”: neispravan znak oblika"
 
-#: builtins/printf.def:684
+#: builtins/printf.def:662
 #, c-format
 msgid "warning: %s: %s"
 msgstr "upozorenje: %s: %s"
 
-#: builtins/printf.def:865
+#: builtins/printf.def:840
 msgid "missing hex digit for \\x"
 msgstr "nedostaje heksadekadska znamenka za \\x"
 
-#: builtins/printf.def:880
+#: builtins/printf.def:855
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "nedostaje unicode znamenka za \\%c"
@@ -583,24 +579,19 @@ msgstr "nedostaje unicode znamenka za \\%c"
 msgid "no other directory"
 msgstr "nema drugog direktorija"
 
-#: builtins/pushd.def:354
-#, fuzzy, c-format
-msgid "%s: invalid argument"
-msgstr "%s: neispravan argument ograničenja"
-
-#: builtins/pushd.def:468
+#: builtins/pushd.def:462
 msgid "<no current directory>"
 msgstr "<nema trenutnog direktorija>"
 
-#: builtins/pushd.def:512
+#: builtins/pushd.def:506
 msgid "directory stack empty"
 msgstr "stog direktorija je prazan"
 
-#: builtins/pushd.def:514
+#: builtins/pushd.def:508
 msgid "directory stack index"
 msgstr "indeks stoga direktorija"
 
-#: builtins/pushd.def:689
+#: builtins/pushd.def:683
 msgid ""
 "Display the list of currently remembered directories.  Directories\n"
 "    find their way onto the list with the `pushd' command; you can get\n"
@@ -615,16 +606,32 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
+"Prikaži popis trenutno zapamćenih direktorija. Direktoriji se dodaju\n"
+"    na popis naredbom „pushd”, kroz popis se možete vraćati naredbom\n"
+"    „popd”.\n"
+"    \n"
+"    Opcije:\n"
+"      -c\točisti stog direktorija uklanjanjem svih elemenata\n"
+"      -l\tne ispisuj tildom prefiksirane inačice direktorija\n"
+"    \trelativno u odnosu na početni direktorij\n"
+"      -p\tispiši stog direktorija jednu stavku po retku\n"
+"      -v\tispiši stog direktorija jednu stavku po retku\n"
+"    \tprefiksiranu položajem u stogu\n"
+"    \n"
+"    Argumenti:\n"
+"      +N\tPrikazuje N-tu stavku s lijeve strane popisa koju prikazuje naredba\n"
+"    \t„dirs” pozvana bez opcija, počevši od nule.\n"
+"    \n"
+"      -N\tPrikazuje N-tu stavku s desne strane popisa koju prikazuje naredba\n"
+"\t„dirs” pozvana bez opcija, počevši od nule."
 
-#: builtins/pushd.def:711
+#: builtins/pushd.def:705
 msgid ""
 "Adds a directory to the top of the directory stack, or rotates\n"
 "    the stack, making the new top of the stack the current working\n"
@@ -649,7 +656,7 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 
-#: builtins/pushd.def:736
+#: builtins/pushd.def:730
 msgid ""
 "Removes entries from the directory stack.  With no arguments, removes\n"
 "    the top directory from the stack, and changes to the new top directory.\n"
@@ -670,40 +677,40 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 
-#: builtins/read.def:275
+#: builtins/read.def:252
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: neispravno navedeno vremensko ograničenje"
 
-#: builtins/read.def:666
+#: builtins/read.def:588
 #, c-format
 msgid "read error: %d: %s"
 msgstr "greška čitanja: %d: %s"
 
-#: builtins/return.def:75
+#: builtins/return.def:73
 msgid "can only `return' from a function or sourced script"
 msgstr "pozivanje „return” je moguće samo iz funkcije ili pokrenute skripte"
 
-#: builtins/set.def:782
+#: builtins/set.def:771
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "ne mogu istovremeno poništiti funkciju i varijablu"
 
-#: builtins/set.def:826
+#: builtins/set.def:808
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: ne mogu poništiti"
 
-#: builtins/set.def:843
+#: builtins/set.def:815
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: ne mogu poništiti: %s je samo za čitanje"
 
-#: builtins/set.def:854
+#: builtins/set.def:826
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: nije varijabla polja"
 
-#: builtins/setattr.def:187
+#: builtins/setattr.def:186
 #, c-format
 msgid "%s: not a function"
 msgstr "%s: nije funkcija"
@@ -712,11 +719,11 @@ msgstr "%s: nije funkcija"
 msgid "shift count"
 msgstr "broj pomaka"
 
-#: builtins/shopt.def:279
+#: builtins/shopt.def:264
 msgid "cannot set and unset shell options simultaneously"
 msgstr "ne mogu istovremeno postaviti i poništiti opcije ljuske"
 
-#: builtins/shopt.def:346
+#: builtins/shopt.def:329
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: neispravno ime opcije ljuske"
@@ -741,7 +748,7 @@ msgstr "ne mogu zaustaviti prijavnu ljusku"
 #: builtins/type.def:234
 #, c-format
 msgid "%s is aliased to `%s'\n"
-msgstr ""
+msgstr "%s je drugo ime za „%s”\n"
 
 #: builtins/type.def:255
 #, c-format
@@ -758,7 +765,7 @@ msgstr "%s je funkcija\n"
 msgid "%s is a shell builtin\n"
 msgstr "%s je ugrađen u ljusku\n"
 
-#: builtins/type.def:317 builtins/type.def:393
+#: builtins/type.def:317 builtins/type.def:391
 #, c-format
 msgid "%s is %s\n"
 msgstr "%s je %s\n"
@@ -768,26 +775,26 @@ msgstr "%s je %s\n"
 msgid "%s is hashed (%s)\n"
 msgstr "%s je raspršen (%s)\n"
 
-#: builtins/ulimit.def:379
+#: builtins/ulimit.def:376
 #, c-format
 msgid "%s: invalid limit argument"
 msgstr "%s: neispravan argument ograničenja"
 
-#: builtins/ulimit.def:405
+#: builtins/ulimit.def:402
 #, c-format
 msgid "`%c': bad command"
 msgstr "„%c”: neispravna naredba"
 
-#: builtins/ulimit.def:434
+#: builtins/ulimit.def:431
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: ne mogu otkriti ograničenje: %s"
 
-#: builtins/ulimit.def:460
+#: builtins/ulimit.def:457
 msgid "limit"
 msgstr "ograničenje"
 
-#: builtins/ulimit.def:472 builtins/ulimit.def:772
+#: builtins/ulimit.def:469 builtins/ulimit.def:769
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: ne mogu urediti ograničenje: %s"
@@ -806,7 +813,7 @@ msgstr "„%c”: neispravan operator simboličkog načina"
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c”: neispravan znak simboličkog načina"
 
-#: error.c:90 error.c:325 error.c:327 error.c:329
+#: error.c:90 error.c:321 error.c:323 error.c:325
 msgid " line "
 msgstr " redak "
 
@@ -820,313 +827,298 @@ msgstr "posljednja naredba: %s\n"
 msgid "Aborting..."
 msgstr "Prekidam..."
 
-#: error.c:410
+#: error.c:406
 msgid "unknown command error"
 msgstr "nepoznata greška naredbe"
 
-#: error.c:411
+#: error.c:407
 msgid "bad command type"
 msgstr "neispravna vrsta naredbe"
 
-#: error.c:412
+#: error.c:408
 msgid "bad connector"
-msgstr ""
+msgstr "neispravno spajanje"
 
-#: error.c:413
+#: error.c:409
 msgid "bad jump"
 msgstr "neispravan skok"
 
-#: error.c:451
+#: error.c:447
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: nepovezana varijabla"
 
-#: eval.c:189
+#: eval.c:181
 #, c-format
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\avrijeme čekanja ulaza je isteklo: automatska-odjava\n"
 
-#: execute_cmd.c:512
+#: execute_cmd.c:504
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "ne mogu preusmjeriti standardni ulaz iz /dev/null: %s"
 
-#: execute_cmd.c:1228
+#: execute_cmd.c:1168
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
-msgstr ""
+msgstr "TIMEFORMAT: „%c”: neispravan znak oblika"
 
-#: execute_cmd.c:2282
+#: execute_cmd.c:2121
 msgid "pipe error"
 msgstr "greška cjevovoda"
 
-#: execute_cmd.c:4347
-#, c-format
-msgid "%s: maximum function nesting level exceeded (%d)"
-msgstr ""
-
-#: execute_cmd.c:4840
+#: execute_cmd.c:4640
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: ograničeno: ne možete navesti „/” u imenu naredbe"
 
-#: execute_cmd.c:4929
+#: execute_cmd.c:4735
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: naredba nije pronađena"
 
-#: execute_cmd.c:5160
+#: execute_cmd.c:4959
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5197
+#: execute_cmd.c:4995
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: neispravan tumač"
 
-#: execute_cmd.c:5234
-#, fuzzy, c-format
-msgid "%s: cannot execute binary file: %s"
-msgstr "%s: ne mogu izvršiti binarnu datoteku"
-
-#: execute_cmd.c:5306
-#, fuzzy, c-format
-msgid "`%s': is a special builtin"
-msgstr "%s je ugrađen u ljusku\n"
-
-#: execute_cmd.c:5358
+#: execute_cmd.c:5144
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "ne mogu udvostručiti opisnik datoteke %d u opisnik datoteke %d"
 
-#: expr.c:262
+#: expr.c:256
 msgid "expression recursion level exceeded"
 msgstr "razina rekurzije izraza je prekoračena"
 
-#: expr.c:286
+#: expr.c:280
 msgid "recursion stack underflow"
 msgstr "podljev stoga rekurzije"
 
-#: expr.c:434
+#: expr.c:422
 msgid "syntax error in expression"
 msgstr "sintaksna greška u izrazu"
 
-#: expr.c:478
+#: expr.c:463
 msgid "attempted assignment to non-variable"
 msgstr "pokušaj pridruživanja ne-varijabli"
 
-#: expr.c:498 expr.c:847
+#: expr.c:486 expr.c:491 expr.c:807
 msgid "division by 0"
 msgstr "dijeljenje s 0"
 
-#: expr.c:545
+#: expr.c:517
 msgid "bug: bad expassign token"
 msgstr "greška: neispravan simbol expassign"
 
-#: expr.c:598
+#: expr.c:564
 msgid "`:' expected for conditional expression"
 msgstr "očekujem „:” za uvjetni izraz"
 
-#: expr.c:904
+#: expr.c:832
 msgid "exponent less than 0"
 msgstr "eksponent je manji od 0"
 
-#: expr.c:957
+#: expr.c:887
 msgid "identifier expected after pre-increment or pre-decrement"
-msgstr ""
+msgstr "očekujem identifikator nakon pred-povećanja ili pred-smanjenja"
 
-#: expr.c:983
+#: expr.c:910
 msgid "missing `)'"
 msgstr "nedostaje „)”"
 
-#: expr.c:1034 expr.c:1371
+#: expr.c:959 expr.c:1282
 msgid "syntax error: operand expected"
 msgstr "sintaksna greška: očekujem operand"
 
-#: expr.c:1373
+#: expr.c:1284
 msgid "syntax error: invalid arithmetic operator"
 msgstr "sintaksna greška: neispravan aritmetički operator"
 
-#: expr.c:1397
+#: expr.c:1308
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (simbol greške je „%s”)"
 
-#: expr.c:1455
+#: expr.c:1366
 msgid "invalid arithmetic base"
 msgstr "neispravna aritmetička baza"
 
-#: expr.c:1475
+#: expr.c:1386
 msgid "value too great for base"
 msgstr "vrijednost baze je prevelika"
 
-#: expr.c:1524
+#: expr.c:1435
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: greška izraza\n"
 
 #: general.c:61
 msgid "getcwd: cannot access parent directories"
-msgstr ""
+msgstr "getcwd: ne mogu pristupiti nadređenim direktorijima"
 
-#: input.c:101 subst.c:5067
+#: input.c:94 subst.c:5082
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr ""
 
-#: input.c:267
+#: input.c:260
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr ""
+msgstr "ne mogu alocirati novi datotečni opisnik za bash ulaz iz fd %d"
 
-#: input.c:275
+#: input.c:268
 #, c-format
 msgid "save_bash_input: buffer already exists for new fd %d"
-msgstr ""
+msgstr "save_bash_input: međuspremnik već postoji za novi fd %d"
 
-#: jobs.c:471
+#: jobs.c:468
 msgid "start_pipeline: pgrp pipe"
-msgstr ""
+msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:892
+#: jobs.c:889
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "razdvojen pid %d se javlja u pokrenutom zadatku %d"
 
-#: jobs.c:1010
+#: jobs.c:1007
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "uklanjam zaustavljeni zadatak %d s grupom procesa %ld"
 
-#: jobs.c:1115
+#: jobs.c:1112
 #, c-format
 msgid "add_process: process %5ld (%s) in the_pipeline"
 msgstr "add_process: proces %5ld (%s) u the_pipeline"
 
-#: jobs.c:1118
+#: jobs.c:1115
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) označen kao još živ"
 
-#: jobs.c:1433
+#: jobs.c:1430
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: ne postoji takav pid"
 
-#: jobs.c:1448
+#: jobs.c:1445
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1462 jobs.c:1487
+#: jobs.c:1459 jobs.c:1484
 msgid "Done"
 msgstr "Gotovo"
 
-#: jobs.c:1467 siglist.c:123
+#: jobs.c:1464 siglist.c:123
 msgid "Stopped"
 msgstr "Zaustavljen"
 
-#: jobs.c:1471
+#: jobs.c:1468
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Zaustavljen(%s)"
 
-#: jobs.c:1475
+#: jobs.c:1472
 msgid "Running"
 msgstr "Pokrenut"
 
-#: jobs.c:1489
+#: jobs.c:1486
 #, c-format
 msgid "Done(%d)"
 msgstr "Gotovo(%d)"
 
-#: jobs.c:1491
+#: jobs.c:1488
 #, c-format
 msgid "Exit %d"
 msgstr "Izlaz %d"
 
-#: jobs.c:1494
+#: jobs.c:1491
 msgid "Unknown status"
 msgstr "Nepoznato stanje"
 
-#: jobs.c:1581
+#: jobs.c:1578
 #, c-format
 msgid "(core dumped) "
 msgstr "(jezgra izbačena) "
 
-#: jobs.c:1600
+#: jobs.c:1597
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:1817
+#: jobs.c:1805
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr ""
 
-#: jobs.c:2136 nojobs.c:605
+#: jobs.c:2133 nojobs.c:585
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld nije dijete ove ljuske"
 
-#: jobs.c:2383
+#: jobs.c:2360
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Ne postoji zapis o procesu %ld"
 
-#: jobs.c:2689
+#: jobs.c:2637
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: zadatak %d je zaustavljen"
 
-#: jobs.c:2981
+#: jobs.c:2859
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: zadatak je dovršen"
 
-#: jobs.c:2990
+#: jobs.c:2868
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: zadatak %d je već u pozadini"
 
-#: jobs.c:3215
+#: jobs.c:3089
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 
-#: jobs.c:3699
+#: jobs.c:3538
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: redak %d: "
 
-#: jobs.c:3713 nojobs.c:843
+#: jobs.c:3552 nojobs.c:814
 #, c-format
 msgid " (core dumped)"
 msgstr " (jezgra izbačena)"
 
-#: jobs.c:3725 jobs.c:3738
+#: jobs.c:3564 jobs.c:3577
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(sadašnji wd: %s)\n"
 
-#: jobs.c:3770
+#: jobs.c:3609
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp nije uspio"
 
-#: jobs.c:3831
+#: jobs.c:3669
 msgid "initialize_job_control: line discipline"
 msgstr ""
 
-#: jobs.c:3841
+#: jobs.c:3679
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:3862 jobs.c:3871
+#: jobs.c:3707
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "ne mogu postaviti grupu procesa terminala (%d)"
 
-#: jobs.c:3876
+#: jobs.c:3712
 msgid "no job control in this shell"
 msgstr "nema kontrole zadataka u ovoj ljusci"
 
@@ -1146,54 +1138,54 @@ msgstr ""
 msgid "unknown"
 msgstr "nepoznato"
 
-#: lib/malloc/malloc.c:801
+#: lib/malloc/malloc.c:797
 msgid "malloc: block on free list clobbered"
 msgstr ""
 
-#: lib/malloc/malloc.c:878
+#: lib/malloc/malloc.c:874
 msgid "free: called with already freed block argument"
 msgstr "free: pozvan s argumentom već oslobođenog bloka"
 
-#: lib/malloc/malloc.c:881
+#: lib/malloc/malloc.c:877
 msgid "free: called with unallocated block argument"
 msgstr "free: pozvan s argumentom nealociranog bloka"
 
-#: lib/malloc/malloc.c:900
+#: lib/malloc/malloc.c:896
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: otkriven podljev, mh_nbytes izvan granica"
 
-#: lib/malloc/malloc.c:906
+#: lib/malloc/malloc.c:902
 msgid "free: start and end chunk sizes differ"
 msgstr ""
 
-#: lib/malloc/malloc.c:1005
+#: lib/malloc/malloc.c:1001
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: pozvan s argumentom nealociranog bloka"
 
-#: lib/malloc/malloc.c:1020
+#: lib/malloc/malloc.c:1016
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: otkriven podljev, mh_nbytes izvan granica"
 
-#: lib/malloc/malloc.c:1026
+#: lib/malloc/malloc.c:1022
 msgid "realloc: start and end chunk sizes differ"
 msgstr ""
 
-#: lib/malloc/table.c:194
+#: lib/malloc/table.c:177
 #, c-format
 msgid "register_alloc: alloc table is full with FIND_ALLOC?\n"
 msgstr ""
 
-#: lib/malloc/table.c:203
+#: lib/malloc/table.c:184
 #, c-format
 msgid "register_alloc: %p already in table as allocated?\n"
 msgstr ""
 
-#: lib/malloc/table.c:256
+#: lib/malloc/table.c:220
 #, c-format
 msgid "register_free: %p already in table as free?\n"
-msgstr ""
+msgstr "register_free: %p već u tablici kao oslobođen?\n"
 
-#: lib/sh/fmtulong.c:102
+#: lib/sh/fmtulong.c:101
 msgid "invalid base"
 msgstr "neispravna baza"
 
@@ -1216,35 +1208,35 @@ msgstr "%s: neispravno navedena mrežna putanja"
 msgid "network operations not supported"
 msgstr "mrežne operacije nisu podržane"
 
-#: locale.c:204
+#: locale.c:192
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: ne mogu promijeniti lokal (%s)"
 
-#: locale.c:206
+#: locale.c:194
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: ne mogu promijeniti lokal (%s): %s"
 
-#: locale.c:263
+#: locale.c:247
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: ne mogu promijeniti lokal (%s)"
 
-#: locale.c:265
+#: locale.c:249
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: ne mogu promijeniti lokal (%s): %s"
 
-#: mailcheck.c:439
+#: mailcheck.c:433
 msgid "You have mail in $_"
 msgstr "Imate poštu u $_"
 
-#: mailcheck.c:464
+#: mailcheck.c:458
 msgid "You have new mail in $_"
 msgstr "Imate novu poštu u $_"
 
-#: mailcheck.c:480
+#: mailcheck.c:474
 #, c-format
 msgid "The mail in %s has been read\n"
 msgstr "Pošta u %s je pročitana\n"
@@ -1262,118 +1254,118 @@ msgstr "sintaksna greška: neočekivana „;”"
 msgid "syntax error: `((%s))'"
 msgstr "sintaksna greška: „((%s))”"
 
-#: make_cmd.c:578
+#: make_cmd.c:575
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: neispravna vrsta instrukcije %d"
 
-#: make_cmd.c:662
+#: make_cmd.c:659
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 
-#: make_cmd.c:759
+#: make_cmd.c:756
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr ""
 
-#: parse.y:3209 parse.y:3480
+#: parse.y:3173 parse.y:3444
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "neočekivani EOF pri traženju odgovarajućeg „%c”"
 
-#: parse.y:4086
+#: parse.y:4025
 msgid "unexpected EOF while looking for `]]'"
 msgstr "neočekivani EOF pri traženju „]]”"
 
-#: parse.y:4091
+#: parse.y:4030
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "sintaksna greška u uvjetnom izrazu: neočekivani simbol „%s”"
 
-#: parse.y:4095
+#: parse.y:4034
 msgid "syntax error in conditional expression"
 msgstr "sintaksna greška u uvjetnom izrazu"
 
-#: parse.y:4173
+#: parse.y:4112
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "neočekivani simbol „%s”, očekujem „)”"
 
-#: parse.y:4177
+#: parse.y:4116
 msgid "expected `)'"
 msgstr "očekujem „)”"
 
-#: parse.y:4205
+#: parse.y:4144
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "neočekivani argument „%s” uvjetnom unarnom operatoru"
 
-#: parse.y:4209
+#: parse.y:4148
 msgid "unexpected argument to conditional unary operator"
 msgstr "neočekivani argument uvjetnom unarnom operatoru"
 
-#: parse.y:4255
+#: parse.y:4194
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "neočekivani simbol „%s”, očekujem uvjetni binarni operator"
 
-#: parse.y:4259
+#: parse.y:4198
 msgid "conditional binary operator expected"
 msgstr "očekujem uvjetni binarni operator"
 
-#: parse.y:4281
+#: parse.y:4220
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "neočekivani argument „%s” uvjetnom binarnom operatoru"
 
-#: parse.y:4285
+#: parse.y:4224
 msgid "unexpected argument to conditional binary operator"
 msgstr "neočekivani argument uvjetnom binarnom operatoru"
 
-#: parse.y:4296
+#: parse.y:4235
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "neočekivani simbol „%c” u uvjetnoj naredbi"
 
-#: parse.y:4299
+#: parse.y:4238
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "neočekivani simbol „%s” u uvjetnoj naredbi"
 
-#: parse.y:4303
+#: parse.y:4242
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "neočekivani simbol %d u uvjetnoj naredbi"
 
-#: parse.y:5649
+#: parse.y:5566
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "sintaksna greška kod neočekivanog simbola „%s”"
 
-#: parse.y:5667
+#: parse.y:5584
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "sintaksna greška kod „%s”"
 
-#: parse.y:5677
+#: parse.y:5594
 msgid "syntax error: unexpected end of file"
 msgstr "sintaksna greška: neočekivani kraj datoteke"
 
-#: parse.y:5677
+#: parse.y:5594
 msgid "syntax error"
 msgstr "sintaksna greška"
 
-#: parse.y:5739
+#: parse.y:5656
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Koristite „%s” za napuštanje ljuske.\n"
 
-#: parse.y:5901
+#: parse.y:5818
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "neočekivani EOF pri traženju odgovarajuće „)”"
 
-#: pcomplete.c:1093
+#: pcomplete.c:1030
 #, c-format
 msgid "completion: function `%s' not found"
 msgstr "completion: funkcija „%s” nije pronađena"
@@ -1383,136 +1375,138 @@ msgstr "completion: funkcija „%s” nije pronađena"
 msgid "progcomp_insert: %s: NULL COMPSPEC"
 msgstr "progcomp_insert: %s: NULL COMPSPEC"
 
-#: print_cmd.c:300
+#: print_cmd.c:296
 #, c-format
 msgid "print_command: bad connector `%d'"
 msgstr ""
 
-#: print_cmd.c:373
+#: print_cmd.c:368
 #, c-format
 msgid "xtrace_set: %d: invalid file descriptor"
 msgstr "xtrace_set: %d: neispravan opisnik datoteke"
 
-#: print_cmd.c:378
+#: print_cmd.c:373
 msgid "xtrace_set: NULL file pointer"
 msgstr "xtrace_set: NULL pokazivač na datoteku"
 
-#: print_cmd.c:382
+#: print_cmd.c:377
 #, c-format
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr ""
 
-#: print_cmd.c:1518
+#: print_cmd.c:1478
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr ""
 
-#: redir.c:123 redir.c:170
+#: redir.c:122
 msgid "file descriptor out of range"
 msgstr "opisnik datoteke izvan granica"
 
-#: redir.c:177
+#: redir.c:178
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: višeznačno preusmjeravanje"
 
-#: redir.c:181
+#: redir.c:182
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: ne mogu pisati preko postojeće datoteke"
 
-#: redir.c:186
+#: redir.c:187
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: ograničeno: ne mogu preusmjeriti izlaz"
 
-#: redir.c:191
+#: redir.c:192
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "ne mogu napraviti privremenu datoteku za here-document: %s"
 
-#: redir.c:195
+#: redir.c:196
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: ne mogu pridružiti opisnik datoteke varijabli"
 
-#: redir.c:582
+#: redir.c:548
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port nije podržan bez umrežavanja"
 
-#: redir.c:861 redir.c:971 redir.c:1032 redir.c:1194
+#: redir.c:818 redir.c:930 redir.c:993 redir.c:1136
 msgid "redirection error: cannot duplicate fd"
 msgstr "greška preusmjeravanja: ne mogu udvostručiti opisnik datoteke"
 
-#: shell.c:339
+#: shell.c:333
 msgid "could not find /tmp, please create!"
 msgstr "ne mogu pronaći /tmp, molim, napravite ga!"
 
-#: shell.c:343
+#: shell.c:337
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp mora biti ispravno ime direktorija"
 
-#: shell.c:890
+#: shell.c:884
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: neispravna opcija"
 
-#: shell.c:1682
+#: shell.c:1652
 msgid "I have no name!"
 msgstr "Nemam ime!"
 
-#: shell.c:1827
+#: shell.c:1795
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, inačica %s-(%s)\n"
 
-#: shell.c:1828
+#: shell.c:1796
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 msgstr ""
+"Uporaba: %s [GNU dugačka opcija] [opcija] ...\n"
+"\t %s [GNU dugačka opcija] [opcija] skripta ...\n"
 
-#: shell.c:1830
+#: shell.c:1798
 msgid "GNU long options:\n"
-msgstr ""
+msgstr "GNU dugačke opcije:\n"
 
-#: shell.c:1834
+#: shell.c:1802
 msgid "Shell options:\n"
-msgstr ""
+msgstr "Opcije ljuske:\n"
 
-#: shell.c:1835
-msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
+#: shell.c:1803
+msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr ""
 
-#: shell.c:1850
+#: shell.c:1818
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr ""
 
-#: shell.c:1856
+#: shell.c:1824
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 
-#: shell.c:1857
+#: shell.c:1825
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 
-#: shell.c:1858
+#: shell.c:1826
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
-msgstr ""
+msgstr "Koristite naredbu „bashbug” za prijavljivanje grešaka.\n"
 
-#: sig.c:679
+#: sig.c:638
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr ""
 
 #: siglist.c:48
 msgid "Bogus signal"
-msgstr ""
+msgstr "Lažan signal"
 
 #: siglist.c:51
 msgid "Hangup"
@@ -1532,11 +1526,11 @@ msgstr "Nedozvoljena instrukcija"
 
 #: siglist.c:67
 msgid "BPT trace/trap"
-msgstr ""
+msgstr "BPT praćenje/zamka"
 
 #: siglist.c:75
 msgid "ABORT instruction"
-msgstr ""
+msgstr "ABORT instrukcija"
 
 #: siglist.c:79
 msgid "EMT instruction"
@@ -1560,7 +1554,7 @@ msgstr "Segmentacijska greška"
 
 #: siglist.c:99
 msgid "Bad system call"
-msgstr "Neispravan sustavski poziv"
+msgstr "Neispravan poziv sustava"
 
 #: siglist.c:103
 msgid "Broken pipe"
@@ -1572,7 +1566,7 @@ msgstr "Budilica"
 
 #: siglist.c:111
 msgid "Terminated"
-msgstr "Dovršen"
+msgstr "Završen"
 
 #: siglist.c:115
 msgid "Urgent IO condition"
@@ -1588,7 +1582,7 @@ msgstr "Nastavi"
 
 #: siglist.c:135
 msgid "Child death or stop"
-msgstr ""
+msgstr "Dijete je umrlo ili zaustavljeno"
 
 #: siglist.c:139
 msgid "Stopped (tty input)"
@@ -1612,7 +1606,7 @@ msgstr "Ograničenje datoteke"
 
 #: siglist.c:159
 msgid "Alarm (virtual)"
-msgstr ""
+msgstr "Budilica (virtualna)"
 
 #: siglist.c:163
 msgid "Alarm (profile)"
@@ -1679,238 +1673,224 @@ msgstr "Nepoznat signal #"
 msgid "Unknown Signal #%d"
 msgstr "Nepoznat signal #%d"
 
-#: subst.c:1352 subst.c:1510
+#: subst.c:1333 subst.c:1502
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "neispravna zamjena: nema zatvorene „%s” u %s"
 
-#: subst.c:2823
+#: subst.c:2795
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: ne mogu pridružiti popis elementu polja"
 
-#: subst.c:4964 subst.c:4980
+#: subst.c:4979 subst.c:4995
 msgid "cannot make pipe for process substitution"
 msgstr "ne mogu napraviti cjevovod za zamjenu procesa"
 
-#: subst.c:5012
+#: subst.c:5027
 msgid "cannot make child for process substitution"
 msgstr "ne mogu napraviti dijete za zamjenu procesa"
 
-#: subst.c:5057
+#: subst.c:5072
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "ne mogu otvoriti imenovani cjevovod %s za čitanje"
 
-#: subst.c:5059
+#: subst.c:5074
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "ne mogu otvoriti imenovani cjevovod %s za pisanje"
 
-#: subst.c:5077
+#: subst.c:5092
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "ne mogu udvostručiti imenovani cjevovod %s kao opisnik datoteke %d"
 
-#: subst.c:5273
+#: subst.c:5284
 msgid "cannot make pipe for command substitution"
 msgstr "ne mogu napraviti cjevovod za zamjenu naredbi"
 
-#: subst.c:5311
+#: subst.c:5322
 msgid "cannot make child for command substitution"
 msgstr "ne mogu napraviti dijete za zamjenu naredbi"
 
-#: subst.c:5330
+#: subst.c:5339
 msgid "command_substitute: cannot duplicate pipe as fd 1"
-msgstr ""
-"command_substitute: ne mogu udvostručiti cjevovod kao opisnik datoteke 1"
-
-#: subst.c:5733 subst.c:7900
-#, c-format
-msgid "%s: invalid variable name for name reference"
-msgstr ""
+msgstr "command_substitute: ne mogu udvostručiti cjevovod kao opisnik datoteke 1"
 
-#: subst.c:5926
+#: subst.c:5859
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parametar prazan ili nije postavljen"
 
-#: subst.c:6198 subst.c:6213
+#: subst.c:6125 subst.c:6140
 #, c-format
 msgid "%s: substring expression < 0"
-msgstr ""
+msgstr "%s: izraz podniza < 0"
 
-#: subst.c:7356
+#: subst.c:7271
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: neispravna zamjena"
 
-#: subst.c:7433
+#: subst.c:7347
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: ne mogu pridružiti na ovaj način"
 
-#: subst.c:7767
-msgid ""
-"future versions of the shell will force evaluation as an arithmetic "
-"substitution"
+#: subst.c:7684
+msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "buduće inačice ljuske će prisiliti procjenu kao aritmetičku zamjenu"
 
-#: subst.c:8271
+#: subst.c:8149
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "neispravna zamjena: nema zatvorenog „`” u %s"
 
-#: subst.c:9172
+#: subst.c:9036
 #, c-format
 msgid "no match: %s"
 msgstr "nema podudaranja: %s"
 
-#: test.c:147
+#: test.c:146
 msgid "argument expected"
 msgstr "očekujem argument"
 
-#: test.c:156
+#: test.c:155
 #, c-format
 msgid "%s: integer expression expected"
 msgstr "%s: očekujem cjelobrojni izraz"
 
-#: test.c:264
+#: test.c:263
 msgid "`)' expected"
 msgstr "očekujem „)”"
 
-#: test.c:266
+#: test.c:265
 #, c-format
 msgid "`)' expected, found %s"
 msgstr "očekujem „)”, našao %s"
 
-#: test.c:281 test.c:721 test.c:724
+#: test.c:280 test.c:698 test.c:701
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: očekujem unarni operator"
 
-#: test.c:468 test.c:764
+#: test.c:449 test.c:741
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: očekujem binarni operator"
 
-#: test.c:839
+#: test.c:816
 msgid "missing `]'"
 msgstr "nedostaje „]”"
 
-#: trap.c:217
+#: trap.c:207
 msgid "invalid signal number"
 msgstr "neispravan broj signala"
 
-#: trap.c:348
+#: trap.c:337
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr ""
 
-#: trap.c:352
+#: trap.c:341
 #, c-format
-msgid ""
-"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 
-#: trap.c:398
+#: trap.c:393
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: neispravan signal %d"
 
-#: variables.c:380
+#: variables.c:363
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "greška pri uvozu definicije funkcije za „%s”"
 
-#: variables.c:778
+#: variables.c:755
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "razina ljuske (%d) je previsoka, vraćam na 1"
 
-#: variables.c:2198
+#: variables.c:1932
 msgid "make_local_variable: no function context at current scope"
 msgstr ""
 
-#: variables.c:2217
-#, fuzzy, c-format
-msgid "%s: variable may not be assigned value"
-msgstr "%s: ne mogu pridružiti opisnik datoteke varijabli"
-
-#: variables.c:3554
+#: variables.c:3182
 msgid "all_local_variables: no function context at current scope"
 msgstr ""
 
-#: variables.c:3799
+#: variables.c:3427
 #, c-format
 msgid "%s has null exportstr"
-msgstr ""
+msgstr "%s ima prazan exportstr"
 
-#: variables.c:3804 variables.c:3813
+#: variables.c:3432 variables.c:3441
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr ""
 
-#: variables.c:3819
+#: variables.c:3447
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr ""
 
-#: variables.c:4252
+#: variables.c:3891
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 
-#: variables.c:4265
+#: variables.c:3904
 msgid "pop_var_context: no global_variables context"
 msgstr ""
 
-#: variables.c:4339
+#: variables.c:3978
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 
-#: variables.c:5165
+#: variables.c:4786
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: ne mogu otvoriti kao DATOTEKU"
 
-#: variables.c:5170
+#: variables.c:4791
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr ""
 
-#: variables.c:5215
-#, fuzzy, c-format
-msgid "%s: %s: compatibility value out of range"
-msgstr "%s: %s je izvan granica"
+#: version.c:46
+msgid "Copyright (C) 2011 Free Software Foundation, Inc."
+msgstr "Copyright © 2011 Free Software Foundation, Inc."
 
-#: version.c:46 version2.c:46
-#, fuzzy
-msgid "Copyright (C) 2012 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2011 Free Software Foundation, Inc."
+#: version.c:47
+msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
+msgstr "Licenca GPLv3+: GNU GPL inačica 3 ili novija <http://gnu.org/licenses/gpl.html>\n"
 
-#: version.c:47 version2.c:47
-msgid ""
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
-msgstr ""
-"Licenca GPLv3+: GNU GPL inačica 3 ili novija <http://gnu.org/licenses/gpl."
-"html>\n"
-
-#: version.c:86 version2.c:86
+#: version.c:86 version2.c:83
 #, c-format
 msgid "GNU bash, version %s (%s)\n"
 msgstr "GNU bash, inačica %s (%s)\n"
 
-#: version.c:91 version2.c:91
-#, fuzzy
-msgid "This is free software; you are free to change and redistribute it."
+#: version.c:91 version2.c:88
+#, c-format
+msgid "This is free software; you are free to change and redistribute it.\n"
 msgstr "Ovo je slobodan softver, slobodno ga smijete mijenjati i dijeliti.\n"
 
-#: version.c:92 version2.c:92
-#, fuzzy
-msgid "There is NO WARRANTY, to the extent permitted by law."
+#: version.c:92 version2.c:89
+#, c-format
+msgid "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr "NEMA JAMSTAVA, do krajnje mjere dozvoljene zakonom.\n"
 
+#: version2.c:86
+#, c-format
+msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n"
+msgstr "Copyright © 2009 Free Software Foundation, Inc.\n"
+
+#: version2.c:87
+#, c-format
+msgid "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>\n"
+msgstr "Licenca GPLv2+: GNU GPL inačica 2 ili novija <http://gnu.org/licenses/gpl.html>\n"
+
 #: xmalloc.c:91
 #, c-format
 msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)"
@@ -1940,9 +1920,7 @@ msgid "unalias [-a] name [name ...]"
 msgstr "unalias [-a] ime [ime ...]"
 
 #: builtins.c:51
-msgid ""
-"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgid "bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
 msgstr ""
 
 #: builtins.c:54
@@ -1986,9 +1964,8 @@ msgid "command [-pVv] command [arg ...]"
 msgstr ""
 
 #: builtins.c:76
-#, fuzzy
-msgid "declare [-aAfFgilnrtux] [-p] [name[=value] ...]"
-msgstr "alias [-p] [ime[=vrijednost] ... ]"
+msgid "declare [-aAfFgilrtux] [-p] [name[=value] ...]"
+msgstr ""
 
 #: builtins.c:78
 msgid "typeset [-aAfFgilrtux] [-p] name[=value] ..."
@@ -2051,9 +2028,7 @@ msgid "help [-dms] [pattern ...]"
 msgstr ""
 
 #: builtins.c:121
-msgid ""
-"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
-"[arg...]"
+msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
 msgstr ""
 
 #: builtins.c:125
@@ -2065,9 +2040,7 @@ msgid "disown [-h] [-ar] [jobspec ...]"
 msgstr ""
 
 #: builtins.c:132
-msgid ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
-"[sigspec]"
+msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
 msgstr ""
 
 #: builtins.c:134
@@ -2075,9 +2048,7 @@ msgid "let arg [arg ...]"
 msgstr ""
 
 #: builtins.c:136
-msgid ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
+msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
 msgstr ""
 
 #: builtins.c:138
@@ -2089,9 +2060,8 @@ msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
 msgstr ""
 
 #: builtins.c:142
-#, fuzzy
-msgid "unset [-f] [-v] [-n] [name ...]"
-msgstr "unalias [-a] ime [ime ...]"
+msgid "unset [-f] [-v] [name ...]"
+msgstr ""
 
 #: builtins.c:144
 msgid "export [-fn] [name[=value] ...] or export -p"
@@ -2138,7 +2108,7 @@ msgid "type [-afptP] name [name ...]"
 msgstr ""
 
 #: builtins.c:169
-msgid "ulimit [-SHabcdefilmnpqrstuvxT] [limit]"
+msgid "ulimit [-SHacdefilmnpqrstuvx] [limit]"
 msgstr ""
 
 #: builtins.c:172
@@ -2146,11 +2116,11 @@ msgid "umask [-p] [-S] [mode]"
 msgstr ""
 
 #: builtins.c:175
-msgid "wait [-n] [id ...]"
+msgid "wait [id]"
 msgstr ""
 
 #: builtins.c:179
-msgid "wait [pid ...]"
+msgid "wait [pid]"
 msgstr ""
 
 #: builtins.c:182
@@ -2174,9 +2144,7 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
 msgstr ""
 
 #: builtins.c:192
-msgid ""
-"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
-"COMMANDS; ] fi"
+msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
 msgstr ""
 
 #: builtins.c:194
@@ -2236,16 +2204,11 @@ msgid "printf [-v var] format [arguments]"
 msgstr ""
 
 #: builtins.c:229
-msgid ""
-"complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-"
-"W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
+msgid "complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
 msgstr ""
 
 #: builtins.c:233
-msgid ""
-"compgen [-abcdefgjksuv] [-o option]  [-A action] [-G globpat] [-W wordlist]  "
-"[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgid "compgen [-abcdefgjksuv] [-o option]  [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
 msgstr ""
 
 #: builtins.c:237
@@ -2253,15 +2216,11 @@ msgid "compopt [-o|+o option] [-DE] [name ...]"
 msgstr ""
 
 #: builtins.c:240
-msgid ""
-"mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c "
-"quantum] [array]"
+msgid "mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
 msgstr ""
 
 #: builtins.c:242
-msgid ""
-"readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c "
-"quantum] [array]"
+msgid "readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
 msgstr ""
 
 #: builtins.c:254
@@ -2279,8 +2238,7 @@ msgid ""
 "      -p\tPrint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has "
-"been\n"
+"    alias returns true unless a NAME is supplied for which no alias has been\n"
 "    defined."
 msgstr ""
 
@@ -2306,36 +2264,30 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
-"move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their "
-"values\n"
-"      -s                 List key sequences that invoke macros and their "
-"values\n"
+"      -S                 List key sequences that invoke macros and their values\n"
+"      -s                 List key sequences that invoke macros and their values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named "
-"function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X\t\t     List key sequences bound with -x and associated commands\n"
-"                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
 "    bind returns 0 unless an unrecognized option is given or an error occurs."
 msgstr ""
 
-#: builtins.c:328
+#: builtins.c:326
 msgid ""
 "Exit for, while, or until loops.\n"
 "    \n"
@@ -2346,7 +2298,7 @@ msgid ""
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
 
-#: builtins.c:340
+#: builtins.c:338
 msgid ""
 "Resume for, while, or until loops.\n"
 "    \n"
@@ -2357,21 +2309,20 @@ msgid ""
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
 
-#: builtins.c:352
+#: builtins.c:350
 msgid ""
 "Execute shell builtins.\n"
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the "
-"function.\n"
+"    as a shell function, but need to execute the builtin within the function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
 "    not a shell builtin.."
 msgstr ""
 
-#: builtins.c:367
+#: builtins.c:365
 msgid ""
 "Return the context of the current subroutine call.\n"
 "    \n"
@@ -2387,49 +2338,37 @@ msgid ""
 "    is invalid."
 msgstr ""
 
-#: builtins.c:385
+#: builtins.c:383
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of "
-"the\n"
+"    Change the current directory to DIR.  The default DIR is the value of the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory "
-"containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon "
-"(:).\n"
-"    A null directory name is the same as the current directory.  If DIR "
-"begins\n"
+"    The variable CDPATH defines the search path for the directory containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
+"    A null directory name is the same as the current directory.  If DIR begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is "
-"set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a "
-"value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
-"        -L\tforce symbolic links to be followed: resolve symbolic links in\n"
-"    \tDIR after processing instances of `..'\n"
+"        -L\tforce symbolic links to be followed\n"
 "        -P\tuse the physical directory structure without following symbolic\n"
-"    \tlinks: resolve symbolic links in DIR before processing instances\n"
-"    \tof `..'\n"
+"    \tlinks\n"
 "        -e\tif the -P option is supplied, and the current working directory\n"
 "    \tcannot be determined successfully, exit with a non-zero status\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname "
-"component\n"
-"    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully "
-"when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
 
-#: builtins.c:420
+#: builtins.c:414
 msgid ""
 "Print the name of the current working directory.\n"
 "    \n"
@@ -2445,7 +2384,7 @@ msgid ""
 "    cannot be read."
 msgstr ""
 
-#: builtins.c:437
+#: builtins.c:431
 msgid ""
 "Null command.\n"
 "    \n"
@@ -2461,7 +2400,7 @@ msgstr ""
 "    Izlazno stanje:\n"
 "    Uvijek uspješno."
 
-#: builtins.c:448
+#: builtins.c:442
 msgid ""
 "Return a successful result.\n"
 "    \n"
@@ -2473,7 +2412,7 @@ msgstr ""
 "    Izlazno stanje:\n"
 "    Uvijek uspješno."
 
-#: builtins.c:457
+#: builtins.c:451
 msgid ""
 "Return an unsuccessful result.\n"
 "    \n"
@@ -2485,13 +2424,12 @@ msgstr ""
 "    Izlazno stanje:\n"
 "    Uvijek neuspješno."
 
-#: builtins.c:466
+#: builtins.c:460
 msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke "
-"commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2504,7 +2442,7 @@ msgid ""
 "    Returns exit status of COMMAND, or failure if COMMAND is not found."
 msgstr ""
 
-#: builtins.c:485
+#: builtins.c:479
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -2524,7 +2462,6 @@ msgid ""
 "      -A\tto make NAMEs associative arrays (if supported)\n"
 "      -i\tto make NAMEs have the `integer' attribute\n"
 "      -l\tto convert NAMEs to lower case on assignment\n"
-"      -n\tmake NAME a reference to the variable named by its value\n"
 "      -r\tto make NAMEs readonly\n"
 "      -t\tto make NAMEs have the `trace' attribute\n"
 "      -u\tto convert NAMEs to upper case on assignment\n"
@@ -2535,16 +2472,14 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the "
-"`local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is supplied or a variable\n"
-"    assignment error occurs."
+"    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:525
+#: builtins.c:517
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -2554,7 +2489,7 @@ msgstr ""
 "    \n"
 "    Zastarjelo. Pogledajte „help declare”."
 
-#: builtins.c:533
+#: builtins.c:525
 msgid ""
 "Define local variables.\n"
 "    \n"
@@ -2565,17 +2500,15 @@ msgid ""
 "    only to the function where they are defined and its children.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is supplied, a variable\n"
-"    assignment error occurs, or the shell is not executing a function."
+"    Returns success unless an invalid option is supplied, an error occurs,\n"
+"    or the shell is not executing a function."
 msgstr ""
 
-#: builtins.c:550
+#: builtins.c:542
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by "
-"a\n"
-"    newline, on the standard output.\n"
+"    Display the ARGs on the standard output followed by a newline.\n"
 "    \n"
 "    Options:\n"
 "      -n\tdo not append a newline\n"
@@ -2587,7 +2520,6 @@ msgid ""
 "      \\b\tbackspace\n"
 "      \\c\tsuppress further output\n"
 "      \\e\tescape character\n"
-"      \\E\tescape character\n"
 "      \\f\tform feed\n"
 "      \\n\tnew line\n"
 "      \\r\tcarriage return\n"
@@ -2603,7 +2535,7 @@ msgid ""
 "    Returns success unless a write error occurs."
 msgstr ""
 
-#: builtins.c:586
+#: builtins.c:576
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
@@ -2616,7 +2548,7 @@ msgid ""
 "    Returns success unless a write error occurs."
 msgstr ""
 
-#: builtins.c:601
+#: builtins.c:591
 msgid ""
 "Enable and disable shell builtins.\n"
 "    \n"
@@ -2643,19 +2575,18 @@ msgid ""
 "    Returns success unless NAME is not a shell builtin or an error occurs."
 msgstr ""
 
-#: builtins.c:629
+#: builtins.c:619
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the "
-"shell,\n"
+"    Combine ARGs into a single string, use the result as input to the shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns exit status of command or success if command is null."
 msgstr ""
 
-#: builtins.c:641
+#: builtins.c:631
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -2696,13 +2627,12 @@ msgid ""
 "    encountered or an error occurs."
 msgstr ""
 
-#: builtins.c:683
+#: builtins.c:673
 msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
-"specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -2710,16 +2640,14 @@ msgid ""
 "      -c\t\texecute COMMAND with an empty environment\n"
 "      -l\t\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, "
-"unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error "
-"occurs."
+"    Returns success unless COMMAND is not found or a redirection error occurs."
 msgstr ""
 
-#: builtins.c:704
+#: builtins.c:694
 msgid ""
 "Exit the shell.\n"
 "    \n"
@@ -2731,12 +2659,11 @@ msgstr ""
 "    Izlazi iz ljuske sa stanjem N. Ako N nije naveden, izlazno stanje je\n"
 "    isto kao i stanje zadnje izvršene naredbe."
 
-#: builtins.c:713
+#: builtins.c:703
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not "
-"executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
 "Izađi iz prijavne ljuske.\n"
@@ -2744,19 +2671,17 @@ msgstr ""
 "    Izlazi iz prijavne ljuske s izlaznim stanjem N. Vraća grešku ako nije\n"
 "    izvršeno u prijavnoj ljusci."
 
-#: builtins.c:723
+#: builtins.c:713
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history "
-"list.\n"
+"    fc is used to list or edit and re-execute commands from the history list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
-"EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -2770,11 +2695,10 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error "
-"occurs."
+"    Returns success or status of executed command; non-zero if an error occurs."
 msgstr ""
 
-#: builtins.c:753
+#: builtins.c:743
 msgid ""
 "Move job to the foreground.\n"
 "    \n"
@@ -2786,27 +2710,24 @@ msgid ""
 "    Status of command placed in foreground, or failure if an error occurs."
 msgstr ""
 
-#: builtins.c:768
+#: builtins.c:758
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if "
-"they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
-"notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
 
-#: builtins.c:782
+#: builtins.c:772
 msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is "
-"displayed.\n"
+"    no arguments are given, information about remembered commands is displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\t\tforget the remembered location of each NAME\n"
@@ -2824,7 +2745,7 @@ msgid ""
 "    Returns success unless NAME is not found or an invalid option is given."
 msgstr ""
 
-#: builtins.c:807
+#: builtins.c:797
 msgid ""
 "Display information about builtin commands.\n"
 "    \n"
@@ -2842,11 +2763,10 @@ msgid ""
 "      PATTERN\tPattern specifiying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is "
-"given."
+"    Returns success unless PATTERN is not found or an invalid option is given."
 msgstr ""
 
-#: builtins.c:831
+#: builtins.c:821
 msgid ""
 "Display or manipulate the history list.\n"
 "    \n"
@@ -2873,14 +2793,13 @@ msgid ""
 "    \n"
 "    If the $HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed "
-"otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
 
-#: builtins.c:867
+#: builtins.c:857
 msgid ""
 "Display status of jobs.\n"
 "    \n"
@@ -2904,7 +2823,7 @@ msgid ""
 "    If -x is used, returns the exit status of COMMAND."
 msgstr ""
 
-#: builtins.c:894
+#: builtins.c:884
 msgid ""
 "Remove jobs from current shell.\n"
 "    \n"
@@ -2921,7 +2840,7 @@ msgid ""
 "    Returns success unless an invalid option or JOBSPEC is given."
 msgstr ""
 
-#: builtins.c:913
+#: builtins.c:903
 msgid ""
 "Send a signal to a job.\n"
 "    \n"
@@ -2943,15 +2862,14 @@ msgid ""
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
 
-#: builtins.c:936
+#: builtins.c:926
 msgid ""
 "Evaluate arithmetic expressions.\n"
 "    \n"
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are "
-"listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -2988,21 +2906,18 @@ msgid ""
 "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise."
 msgstr ""
 
-#: builtins.c:981
+#: builtins.c:971
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with "
-"word\n"
+"    if the -u option is supplied.  The line is split into fields as with word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as "
-"word\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
 "    delimiters.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY "
-"variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3014,32 +2929,26 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than NCHARS\n"
 "    \t\tcharacters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, "
-"unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any delimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
 "    \t\tattempting to read\n"
 "      -r\t\tdo not allow backslashes to escape any characters\n"
 "      -s\t\tdo not echo input coming from a terminal\n"
-"      -t timeout\ttime out and return failure if a complete line of input "
-"is\n"
-"    \t\tnot read within TIMEOUT seconds.  The value of the TMOUT\n"
+"      -t timeout\ttime out and return failure if a complete line of input is\n"
+"    \t\tnot read withint TIMEOUT seconds.  The value of the TMOUT\n"
 "    \t\tvariable is the default timeout.  TIMEOUT may be a\n"
-"    \t\tfractional number.  If TIMEOUT is 0, read returns immediately,\n"
-"    \t\twithout trying to read any data, returning success only if\n"
-"    \t\tinput is available on the specified file descriptor.  The\n"
+"    \t\tfractional number.  If TIMEOUT is 0, read returns success only\n"
+"    \t\tif input is available on the specified file descriptor.  The\n"
 "    \t\texit status is greater than 128 if the timeout is exceeded\n"
 "      -u fd\t\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times "
-"out\n"
-"    (in which case it's greater than 128), a variable assignment error "
-"occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times out,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
-#: builtins.c:1026
+#: builtins.c:1014
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3051,7 +2960,7 @@ msgid ""
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
 
-#: builtins.c:1039
+#: builtins.c:1027
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3094,8 +3003,7 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero "
-"status\n"
+"                           or zero if no command exited with a non-zero status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -3117,7 +3025,7 @@ msgid ""
 "      -E  If set, the ERR trap is inherited by shell functions.\n"
 "      -H  Enable ! style history substitution.  This flag is on\n"
 "          by default when the shell is interactive.\n"
-"      -P  If set, do not resolve symbolic links when executing commands\n"
+"      -P  If set, do not follow symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
 "      -T  If set, the DEBUG trap is inherited by shell functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
@@ -3136,7 +3044,7 @@ msgid ""
 "    Returns success unless an invalid option is given."
 msgstr ""
 
-#: builtins.c:1124
+#: builtins.c:1112
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3145,11 +3053,8 @@ msgid ""
 "    Options:\n"
 "      -f\ttreat each NAME as a shell function\n"
 "      -v\ttreat each NAME as a shell variable\n"
-"      -n\ttreat each NAME as a name reference and unset the variable itself\n"
-"    \trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that "
-"fails,\n"
+"    Without options, unset first tries to unset a variable, and if that fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -3158,13 +3063,12 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1146
+#: builtins.c:1132
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before "
-"exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -3177,7 +3081,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1165
+#: builtins.c:1151
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3197,7 +3101,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1186
+#: builtins.c:1172
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3208,7 +3112,7 @@ msgid ""
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
 
-#: builtins.c:1198 builtins.c:1213
+#: builtins.c:1184 builtins.c:1199
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3222,7 +3126,7 @@ msgid ""
 "    FILENAME cannot be read."
 msgstr ""
 
-#: builtins.c:1229
+#: builtins.c:1215
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3236,7 +3140,7 @@ msgid ""
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
 
-#: builtins.c:1245
+#: builtins.c:1231
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3270,8 +3174,7 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last "
-"read.\n"
+"      -N FILE        True if the file has been modified since it was last read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -3292,8 +3195,7 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 "
-"lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -3301,8 +3203,6 @@ msgid ""
 "    \n"
 "      -o OPTION      True if the shell option OPTION is enabled.\n"
 "      -v VAR\t True if the shell variable VAR is set\n"
-"      -R VAR\t True if the shell variable VAR is set and is a name "
-"reference.\n"
 "      ! EXPR         True if expr is false.\n"
 "      EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.\n"
 "      EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.\n"
@@ -3319,7 +3219,7 @@ msgid ""
 "    false or an invalid argument is given."
 msgstr ""
 
-#: builtins.c:1326
+#: builtins.c:1311
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3327,24 +3227,22 @@ msgid ""
 "    be a literal `]', to match the opening `['."
 msgstr ""
 
-#: builtins.c:1335
+#: builtins.c:1320
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of "
-"its\n"
+"    Prints the accumulated user and system times for the shell and all of its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
 
-#: builtins.c:1347
+#: builtins.c:1332
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives "
-"signals\n"
+"    Defines and activates handlers to be run when the shell receives signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -3353,37 +3251,29 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
-"If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
-"If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
-"a\n"
-"    script run by the . or source builtins finishes executing.  A "
-"SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause "
-"the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
+"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands "
-"associated\n"
+"    If no arguments are supplied, trap prints the list of commands associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
-"number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is "
-"given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1383
+#: builtins.c:1368
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3409,16 +3299,14 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not "
-"found."
+"    Returns success if all of the NAMEs are found; fails if any are not found."
 msgstr ""
 
-#: builtins.c:1414
+#: builtins.c:1399
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and "
-"processes\n"
+"    Provides control over the resources available to the shell and processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -3442,9 +3330,6 @@ msgid ""
 "      -u\tthe maximum number of user processes\n"
 "      -v\tthe size of virtual memory\n"
 "      -x\tthe maximum number of file locks\n"
-"      -T    the maximum number of threads\n"
-"    \n"
-"    Not all options are available on all platforms.\n"
 "    \n"
 "    If LIMIT is given, it is the new value of the specified resource; the\n"
 "    special LIMIT values `soft', `hard', and `unlimited' stand for the\n"
@@ -3460,7 +3345,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1462
+#: builtins.c:1444
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -3478,42 +3363,35 @@ msgid ""
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1464
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or "
-"a\n"
+"    Waits for the process identified by ID, which may be a process ID or a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
-"    status is zero.  If ID is a a job specification, waits for all "
-"processes\n"
-"    in that job's pipeline.\n"
-"    \n"
-"    If the -n option is supplied, waits for the next job to terminate and\n"
-"    returns its exit status.\n"
+"    status is zero.  If ID is a a job specification, waits for all processes\n"
+"    in the job's pipeline.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last ID; fails if ID is invalid or an invalid\n"
-"    option is given."
+"    Returns the status of ID; fails if ID is invalid or an invalid option is\n"
+"    given."
 msgstr ""
 
-#: builtins.c:1503
+#: builtins.c:1482
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination "
-"status.\n"
-"    If PID is not given, waits for all currently active child processes,\n"
-"    and the return status is zero.  PID must be a process ID.\n"
+"    Waits for the specified process and reports its termination status.  If\n"
+"    PID is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an "
-"invalid\n"
-"    option is given."
+"    Returns the status of ID; fails if ID is invalid or an invalid option is\n"
+"    given."
 msgstr ""
 
-#: builtins.c:1518
+#: builtins.c:1497
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -3526,7 +3404,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1532
+#: builtins.c:1511
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -3543,7 +3421,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1550
+#: builtins.c:1529
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -3563,7 +3441,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1571
+#: builtins.c:1550
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -3579,7 +3457,7 @@ msgid ""
 "    The return status is the return status of PIPELINE."
 msgstr ""
 
-#: builtins.c:1588
+#: builtins.c:1567
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -3590,28 +3468,23 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1600
+#: builtins.c:1579
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
-"the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
-"is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  "
-"Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of "
-"the\n"
-"    entire construct is the exit status of the last command executed, or "
-"zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
+"    entire construct is the exit status of the last command executed, or zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1617
+#: builtins.c:1596
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
@@ -3622,7 +3495,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1629
+#: builtins.c:1608
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
@@ -3633,7 +3506,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1641
+#: builtins.c:1620
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -3646,13 +3519,12 @@ msgid ""
 "    Returns the exit status of COMMAND."
 msgstr ""
 
-#: builtins.c:1655
+#: builtins.c:1634
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
-"invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
@@ -3660,7 +3532,7 @@ msgid ""
 "    Returns success unless NAME is readonly."
 msgstr ""
 
-#: builtins.c:1669
+#: builtins.c:1648
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -3671,7 +3543,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1681
+#: builtins.c:1660
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -3685,7 +3557,7 @@ msgid ""
 "    Returns the status of the resumed job."
 msgstr ""
 
-#: builtins.c:1696
+#: builtins.c:1675
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -3696,16 +3568,13 @@ msgid ""
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
 
-#: builtins.c:1708
+#: builtins.c:1687
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the "
-"conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries "
-"used\n"
-"    by the `test' builtin, and may be combined using the following "
-"operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
+"    by the `test' builtin, and may be combined using the following operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -3724,7 +3593,7 @@ msgid ""
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
 
-#: builtins.c:1734
+#: builtins.c:1713
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -3778,7 +3647,7 @@ msgid ""
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
 
-#: builtins.c:1791
+#: builtins.c:1770
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -3809,7 +3678,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1825
+#: builtins.c:1804
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -3836,7 +3705,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1855
+#: builtins.c:1834
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -3853,25 +3722,22 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1884
+#: builtins.c:1863
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
 "    Change the setting of each shell option OPTNAME.  Without any option\n"
-"    arguments, list all shell options with an indication of whether or not "
-"each\n"
+"    arguments, list all shell options with an indication of whether or not each\n"
 "    is set.\n"
 "    \n"
 "    Options:\n"
@@ -3886,7 +3752,7 @@ msgid ""
 "    given or OPTNAME is disabled."
 msgstr ""
 
-#: builtins.c:1905
+#: builtins.c:1884
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -3894,45 +3760,31 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: "
-"plain\n"
-"    characters, which are simply copied to standard output; character "
-"escape\n"
+"    FORMAT is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output; character escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next "
-"successive\n"
+"    format specifications, each of which causes printing of the next successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in printf"
-"(1),\n"
-"    printf interprets:\n"
+"    In addition to the standard format specifications described in printf(1)\n"
+"    and printf(3), printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T output the date-time string resulting from using FMT as a "
-"format\n"
+"      %(fmt)T output the date-time string resulting from using FMT as a format\n"
 "            string for strftime(3)\n"
 "    \n"
-"    The format is re-used as necessary to consume all of the arguments.  If\n"
-"    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as "
-"appropriate,\n"
-"    had been supplied.\n"
-"    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or "
-"assignment\n"
+"    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
 
-#: builtins.c:1939
+#: builtins.c:1913
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no "
-"options\n"
-"    are supplied, existing completion specifications are printed in a way "
-"that\n"
+"    For each NAME, specify how arguments are to be completed.  If no options\n"
+"    are supplied, existing completion specifications are printed in a way that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -3952,29 +3804,25 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1967
+#: builtins.c:1941
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches "
-"against\n"
+"    completions.  If the optional WORD argument is supplied, matches against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1982
+#: builtins.c:1956
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are "
-"supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, "
-"print\n"
-"    the completion options for each NAME or the current completion "
-"specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, print\n"
+"    the completion options for each NAME or the current completion specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -3996,28 +3844,22 @@ msgid ""
 "    have a completion specification defined."
 msgstr ""
 
-#: builtins.c:2012
+#: builtins.c:1986
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable "
-"ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable "
-"MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
-"copied.\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
-"index is 0.\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied.\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0.\n"
 "      -s count \tDiscard the first COUNT lines read.\n"
 "      -t\t\tRemove a trailing newline from each line read.\n"
-"      -u fd\t\tRead lines from file descriptor FD instead of the standard "
-"input.\n"
+"      -u fd\t\tRead lines from file descriptor FD instead of the standard input.\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read.\n"
-"      -c quantum\tSpecify the number of lines read between each call to "
-"CALLBACK.\n"
+"      -c quantum\tSpecify the number of lines read between each call to CALLBACK.\n"
 "    \n"
 "    Arguments:\n"
 "      ARRAY\t\tArray variable name to use for file data.\n"
@@ -4027,17 +3869,15 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY "
-"before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly "
-"or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
 
-#: builtins.c:2046
+#: builtins.c:2020
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -4046,13 +3886,3 @@ msgstr ""
 "Učitaj retke iz datoteke u varijablu polja.\n"
 "    \n"
 "    Sinonim za „mapfile”."
-
-#~ msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n"
-#~ msgstr "Copyright (C) 2009 Free Software Foundation, Inc.\n"
-
-#~ msgid ""
-#~ "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl."
-#~ "html>\n"
-#~ msgstr ""
-#~ "Licenca GPLv2+: GNU GPL inačica 2 ili novija <http://gnu.org/licenses/gpl."
-#~ "html>\n"
diff --git a/redir.c b/redir.c
index 9e5ca0f08bcb257cef8621aefcb5c195fb6cf22c..89387fb41baeae9fcea9b71585eefd06493cac41 100644 (file)
--- a/redir.c
+++ b/redir.c
@@ -873,7 +873,9 @@ do_redirection_internal (redirect, flags)
            }
 
 #if defined (BUFFERED_INPUT)
-         check_bash_input (redirector);
+         /* inhibit call to sync_buffered_stream() for async processes */
+         if (redirector != 0 || (subshell_environment & SUBSHELL_ASYNC) == 0)
+           check_bash_input (redirector);
 #endif
 
          /* Make sure there is no pending output before we change the state
@@ -1055,7 +1057,9 @@ do_redirection_internal (redirect, flags)
                }
            }
 #if defined (BUFFERED_INPUT)
-         check_bash_input (redirector);
+         /* inhibit call to sync_buffered_stream() for async processes */
+         if (redirector != 0 || (subshell_environment & SUBSHELL_ASYNC) == 0)
+           check_bash_input (redirector);
 #endif
          if (redirect->rflags & REDIR_VARASSIGN)
            {
@@ -1138,15 +1142,16 @@ do_redirection_internal (redirect, flags)
          xtrace_fdchk (redirector);
 
 #if defined (BUFFERED_INPUT)
-         check_bash_input (redirector);
+         /* inhibit call to sync_buffered_stream() for async processes */
+         if (redirector != 0 || (subshell_environment & SUBSHELL_ASYNC) == 0)
+           check_bash_input (redirector);
          r = close_buffered_fd (redirector);
 #else /* !BUFFERED_INPUT */
          r = close (redirector);
 #endif /* !BUFFERED_INPUT */
-#if 0  /* bash-4.3 */
+
          if (r < 0 && (flags & RX_INTERNAL) && (errno == EIO || errno == ENOSPC))
            REDIRECTION_ERROR (r, errno, -1);
-#endif
        }
       break;
 
diff --git a/subst.c b/subst.c
index e5f1447aa3a430bb916d96bf40503f7cfa26aeee..9894792215eb717921836741cc5cfdbb3604d166 100644 (file)
--- a/subst.c
+++ b/subst.c
@@ -277,6 +277,7 @@ static int chk_atstar __P((char *, int, int *, int *));
 static int chk_arithsub __P((const char *, int));
 
 static WORD_DESC *parameter_brace_expand_word __P((char *, int, int, int, arrayind_t *));
+static char *parameter_brace_find_indir __P((char *, int, int, int));
 static WORD_DESC *parameter_brace_expand_indir __P((char *, int, int, int *, int *));
 static WORD_DESC *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *));
 static void parameter_brace_expand_error __P((char *, char *));
@@ -1470,7 +1471,7 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
       if (c == '\'')
        {
 /*itrace("extract_dollar_brace_string: c == single quote flags = %d quoted = %d dolbrace_state = %d", flags, quoted, dolbrace_state);*/
-         if (posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
+         if (posixly_correct && shell_compatibility_level > 42 && dolbrace_state != DOLBRACE_QUOTE && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
            ADVANCE_CHAR (string, slen, i);
          else
            {
@@ -1491,7 +1492,7 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
       else if (dolbrace_state == DOLBRACE_PARAM && c == '#' && (i - *sindex) > 1)
         dolbrace_state = DOLBRACE_QUOTE;
       else if (dolbrace_state == DOLBRACE_PARAM && c == '/' && (i - *sindex) > 1)
-        dolbrace_state = DOLBRACE_QUOTE;
+        dolbrace_state = DOLBRACE_QUOTE2;      /* XXX */
       else if (dolbrace_state == DOLBRACE_PARAM && c == '^' && (i - *sindex) > 1)
         dolbrace_state = DOLBRACE_QUOTE;
       else if (dolbrace_state == DOLBRACE_PARAM && c == ',' && (i - *sindex) > 1)
@@ -3129,7 +3130,58 @@ expand_arith_string (string, quoted)
      char *string;
      int quoted;
 {
-  return (expand_string_if_necessary (string, quoted, expand_string));
+  WORD_DESC td;
+  WORD_LIST *list, *tlist;
+  size_t slen;
+  int i, saw_quote;
+  char *ret;
+  DECLARE_MBSTATE;
+
+  /* Don't need string length for ADVANCE_CHAR unless multibyte chars possible. */
+  slen = (MB_CUR_MAX > 1) ? strlen (string) : 0;
+  i = saw_quote = 0;
+  while (string[i])
+    {
+      if (EXP_CHAR (string[i]))
+       break;
+      else if (string[i] == '\'' || string[i] == '\\' || string[i] == '"')
+       saw_quote = 1;
+      ADVANCE_CHAR (string, slen, i);
+    }
+
+  if (string[i])
+    {
+      /* This is expanded version of expand_string_internal as it's called by
+        expand_string_leave_quoted  */
+      td.flags = W_NOPROCSUB;  /* don't want process substitution */
+      td.word = savestring (string);
+      list = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL);
+      /* This takes care of the calls from expand_string_leave_quoted and
+        expand_string */
+      if (list)
+       {
+         tlist = word_list_split (list);
+         dispose_words (list);
+         list = tlist;
+         if (list)
+           dequote_list (list);
+       }
+      /* This comes from expand_string_if_necessary */
+      if (list)
+       {
+         ret = string_list (list);
+         dispose_words (list);
+       }
+      else
+       ret = (char *)NULL;
+      FREE (td.word);
+    }
+  else if (saw_quote && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0))
+    ret = string_quote_removal (string, quoted);
+  else
+    ret = savestring (string);
+
+  return ret;
 }
 
 #if defined (COND_COMMAND)
@@ -4460,6 +4512,11 @@ array_remove_pattern (var, pattern, patspec, varname, quoted)
 
   /* compute itype from varname here */
   v = array_variable_part (varname, &ret, 0);
+
+  /* XXX */
+  if (v && invisible_p (var))
+    return ((char *)NULL);
+
   itype = ret[0];
 
   a = (v && array_p (v)) ? array_cell (v) : 0;
@@ -5109,6 +5166,8 @@ process_substitute (string, open_for_read_in_child)
   close (open_for_read_in_child ? 0 : 1);
 #endif /* !HAVE_DEV_FD */
 
+  last_command_exit_value = result;
+  result = run_exit_trap ();
   exit (result);
   /*NOTREACHED*/
 }
@@ -5473,7 +5532,7 @@ array_length_reference (s)
 
   /* If unbound variables should generate an error, report one and return
      failure. */
-  if ((var == 0 || (assoc_p (var) == 0 && array_p (var) == 0)) && unbound_vars_is_error)
+  if ((var == 0 || invisible_p (var) || (assoc_p (var) == 0 && array_p (var) == 0)) && unbound_vars_is_error)
     {
       c = *--t;
       *t = '\0';
@@ -5482,7 +5541,7 @@ array_length_reference (s)
       *t = c;
       return (-1);
     }
-  else if (var == 0)
+  else if (var == 0 || invisible_p (var))
     return 0;
 
   /* We support a couple of expansions for variables that are not arrays.
@@ -5749,6 +5808,38 @@ expand_arrayref:
   return ret;
 }
 
+static char *
+parameter_brace_find_indir (name, var_is_special, quoted, find_nameref)
+     char *name;
+     int var_is_special, quoted, find_nameref;
+{
+  char *temp, *t;
+  WORD_DESC *w;
+  SHELL_VAR *v;
+
+  if (find_nameref && var_is_special == 0 && (v = find_variable_last_nameref (name)) &&
+      nameref_p (v) && (t = nameref_cell (v)) && *t)
+    return (savestring (t));
+
+  /* If var_is_special == 0, and name is not an array reference, this does
+     more expansion than necessary.  It should really look up the variable's
+     value and not try to expand it. */
+  w = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND, 0);
+  t = w->word;
+  /* Have to dequote here if necessary */
+  if (t)
+    {
+      temp = (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+               ? dequote_string (t)
+               : dequote_escapes (t);
+      free (t);
+      t = temp;
+    }
+  dispose_word_desc (w);
+
+  return t;
+}
+  
 /* Expand an indirect reference to a variable: ${!NAME} expands to the
    value of the variable whose name is the value of NAME. */
 static WORD_DESC *
@@ -5777,21 +5868,7 @@ parameter_brace_expand_indir (name, var_is_special, quoted, quoted_dollar_atp, c
        }
     }
 
-  /* If var_is_special == 0, and name is not an array reference, this does
-     more expansion than necessary.  It should really look up the variable's
-     value and not try to expand it. */
-  w = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND, 0);
-  t = w->word;
-  /* Have to dequote here if necessary */
-  if (t)
-    {
-      temp = (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
-               ? dequote_string (t)
-               : dequote_escapes (t);
-      free (t);
-      t = temp;
-    }
-  dispose_word_desc (w);
+  t = parameter_brace_find_indir (name, var_is_special, quoted, 0);
 
   chk_atstar (t, quoted, quoted_dollar_atp, contains_dollar_at);
   if (t == 0)
@@ -6245,26 +6322,41 @@ get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
      SHELL_VAR **varp;
      char **valp;
 {
-  int vtype;
-  char *temp;
+  int vtype, want_indir;
+  char *temp, *vname;
+  WORD_DESC *wd;
 #if defined (ARRAY_VARS)
   SHELL_VAR *v;
 #endif
   arrayind_t lind;
 
+  want_indir = *varname == '!' &&
+    (legal_variable_starter ((unsigned char)varname[1]) || DIGIT (varname[1])
+                                       || VALID_INDIR_PARAM (varname[1]));
+  if (want_indir)
+    vname = parameter_brace_find_indir (varname+1, SPECIAL_VAR (varname, 1), quoted, 1);
+  else
+    vname = varname;
+    
   /* This sets vtype to VT_VARIABLE or VT_POSPARMS */
-  vtype = (varname[0] == '@' || varname[0] == '*') && varname[1] == '\0';
-  if (vtype == VT_POSPARMS && varname[0] == '*')
+  vtype = (vname[0] == '@' || vname[0] == '*') && vname[1] == '\0';
+  if (vtype == VT_POSPARMS && vname[0] == '*')
     vtype |= VT_STARSUB;
   *varp = (SHELL_VAR *)NULL;
 
 #if defined (ARRAY_VARS)
-  if (valid_array_reference (varname))
+  if (valid_array_reference (vname))
     {
-      v = array_variable_part (varname, &temp, (int *)0);
+      v = array_variable_part (vname, &temp, (int *)0);
       /* If we want to signal array_value to use an already-computed index,
         set LIND to that index */
       lind = (ind != INTMAX_MIN && (flags & AV_USEIND)) ? ind : 0;
+      if (v && invisible_p (v))
+       {
+         vtype = VT_ARRAYMEMBER;
+         *varp = (SHELL_VAR *)NULL;
+         *valp = (char *)NULL;
+       }
       if (v && (array_p (v) || assoc_p (v)))
        { /* [ */
          if (ALL_ELEMENT_SUB (temp[0]) && temp[1] == ']')
@@ -6278,7 +6370,7 @@ get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
          else
            {
              vtype = VT_ARRAYMEMBER;
-             *valp = array_value (varname, Q_DOUBLE_QUOTES, flags, (int *)NULL, &lind);
+             *valp = array_value (vname, Q_DOUBLE_QUOTES, flags, (int *)NULL, &lind);
            }
          *varp = v;
        }
@@ -6295,10 +6387,10 @@ get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
        {
          vtype = VT_ARRAYMEMBER;
          *varp = v;
-         *valp = array_value (varname, Q_DOUBLE_QUOTES, flags, (int *)NULL, &lind);
+         *valp = array_value (vname, Q_DOUBLE_QUOTES, flags, (int *)NULL, &lind);
        }
     }
-  else if ((v = find_variable (varname)) && (invisible_p (v) == 0) && (assoc_p (v) || array_p (v)))
+  else if ((v = find_variable (vname)) && (invisible_p (v) == 0) && (assoc_p (v) || array_p (v)))
     {
       vtype = VT_ARRAYMEMBER;
       *varp = v;
@@ -6318,6 +6410,9 @@ get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
        *valp = value;
     }
 
+  if (want_indir)
+    free (vname);
+
   return vtype;
 }
 
diff --git a/subst.h b/subst.h
index 874e287b6715c8628339d95dcbcda354dc1455c0..afd3b3ddabba7f5b0ed36935be5a6f72a8c0434d 100644 (file)
--- a/subst.h
+++ b/subst.h
@@ -281,6 +281,7 @@ extern char *cond_expand_word __P((WORD_DESC *, int));
 #define SD_NOQUOTEDELIM        0x04    /* don't let single or double quotes act as delimiters */
 #define SD_NOSKIPCMD   0x08    /* don't skip over $(, <(, or >( command/process substitution */
 #define SD_EXTGLOB     0x10    /* skip over extended globbing patterns if appropriate */
+#define SD_IGNOREQUOTE 0x20    /* single and double quotes are not special */
 
 extern int skip_to_delim __P((char *, int, char *, int));
 
old mode 100644 (file)
new mode 100755 (executable)
index 994d98a..d622a44
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2008-03-12'
+timestamp='2012-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,9 +17,7 @@ timestamp='2008-03-12'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,16 +25,16 @@ timestamp='2008-03-12'
 # the same distribution terms that you use for the rest of that program.
 
 
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # exits with 0.  Otherwise, it exits with 1.
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -56,8 +54,9 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008,2009 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
        # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
        # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
        # switched to ELF, *-*-netbsd* would select the old
        # object file format.  This provides both forward
@@ -170,7 +169,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
            arm*|i386|m68k|ns32k|sh3*|sparc|vax)
                eval $set_cc_for_build
                if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-                       | grep __ELF__ >/dev/null
+                       | grep -q __ELF__
                then
                    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
                    # Return netbsd for either.  FIX?
@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                fi
                ;;
            *)
-               os=netbsd
+               os=netbsd
                ;;
        esac
        # The OS release
@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
                ;;
        *5.*)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
                ;;
        esac
        # According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
        echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       exit ;;
+       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+       exitcode=$?
+       trap '' 0
+       exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
        # How do we know it's Interix rather than the generic POSIX subsystem?
        # Should we change UNAME_MACHINE based on the output of uname instead
@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        echo s390-ibm-zvmoe
        exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+       echo powerpc-ibm-os400
        exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
        echo arm-acorn-riscix${UNAME_RELEASE}
@@ -324,14 +326,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        case `/usr/bin/uname -p` in
            sparc) echo sparc-icl-nx7; exit ;;
        esac ;;
+    s390x:SunOS:*:*)
+       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
     sun4H:SunOS:5.*:*)
        echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
        exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
        echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
        exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+       echo i386-pc-auroraux${UNAME_RELEASE}
+       exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       eval $set_cc_for_build
+       SUN_ARCH="i386"
+       # If there is a compiler, see if it is configured for 64-bit objects.
+       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+       # This test works for both compilers.
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               SUN_ARCH="x86_64"
+           fi
+       fi
+       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
        exit ;;
     sun4*:SunOS:6*:*)
        # According to config.sub, this is the proper way to canonicalize
@@ -375,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint${UNAME_RELEASE}
        exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
        echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+       exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint${UNAME_RELEASE}
        exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-milan-mint${UNAME_RELEASE}
+       exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-hades-mint${UNAME_RELEASE}
+       exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-unknown-mint${UNAME_RELEASE}
+       exit ;;
     m68k:machten:*:*)
        echo m68k-apple-machten${UNAME_RELEASE}
        exit ;;
@@ -461,8 +482,8 @@ EOF
        echo m88k-motorola-sysv3
        exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       # DG/UX returns AViiON for all architectures
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
        if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
        then
            if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -475,7 +496,7 @@ EOF
        else
            echo i586-dg-dgux${UNAME_RELEASE}
        fi
-       exit ;;
+       exit ;;
     M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
        echo m88k-dolphin-sysv3
        exit ;;
@@ -532,7 +553,7 @@ EOF
                echo rs6000-ibm-aix3.2
        fi
        exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[4567])
        IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
        if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
                IBM_ARCH=rs6000
@@ -575,52 +596,52 @@ EOF
            9000/[678][0-9][0-9])
                if [ -x /usr/bin/getconf ]; then
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                   case "${sc_cpu_version}" in
+                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                     532)                      # CPU_PA_RISC2_0
+                       case "${sc_kernel_bits}" in
+                         32) HP_ARCH="hppa2.0n" ;;
+                         64) HP_ARCH="hppa2.0w" ;;
                          '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+                       esac ;;
+                   esac
                fi
                if [ "${HP_ARCH}" = "" ]; then
                    eval $set_cc_for_build
-                   sed 's/^              //' << EOF >$dummy.c
+                   sed 's/^            //' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+               #define _HPUX_SOURCE
+               #include <stdlib.h>
+               #include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+               int main ()
+               {
+               #if defined(_SC_KERNEL_BITS)
+                   long bits = sysconf(_SC_KERNEL_BITS);
+               #endif
+                   long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-               {
-               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-                   switch (bits)
-                       {
-                       case 64: puts ("hppa2.0w"); break;
-                       case 32: puts ("hppa2.0n"); break;
-                       default: puts ("hppa2.0"); break;
-                       } break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-                   puts ("hppa2.0"); break;
-              #endif
-               default: puts ("hppa1.0"); break;
-               }
-                  exit (0);
-              }
+                   switch (cpu)
+                       {
+                       case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+                       case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+                       case CPU_PA_RISC2_0:
+               #if defined(_SC_KERNEL_BITS)
+                           switch (bits)
+                               {
+                               case 64: puts ("hppa2.0w"); break;
+                               case 32: puts ("hppa2.0n"); break;
+                               default: puts ("hppa2.0"); break;
+                               } break;
+               #else  /* !defined(_SC_KERNEL_BITS) */
+                           puts ("hppa2.0"); break;
+               #endif
+                       default: puts ("hppa1.0"); break;
+                       }
+                   exit (0);
+               }
 EOF
                    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -640,7 +661,7 @@ EOF
            # => hppa64-hp-hpux11.23
 
            if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-               grep __LP64__ >/dev/null
+               grep -q __LP64__
            then
                HP_ARCH="hppa2.0w"
            else
@@ -711,22 +732,22 @@ EOF
        exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
        echo c1-convex-bsd
-        exit ;;
+       exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
        if getsysinfo -f scalar_acc
        then echo c32-convex-bsd
        else echo c2-convex-bsd
        fi
-        exit ;;
+       exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
        echo c34-convex-bsd
-        exit ;;
+       exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
        echo c38-convex-bsd
-        exit ;;
+       exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
        echo c4-convex-bsd
-        exit ;;
+       exit ;;
     CRAY*Y-MP:*:*:*)
        echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
        exit ;;
@@ -750,14 +771,14 @@ EOF
        exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
        FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
        echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -769,13 +790,12 @@ EOF
        echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
        exit ;;
     *:FreeBSD:*:*)
-       case ${UNAME_MACHINE} in
-           pc98)
-               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       case ${UNAME_PROCESSOR} in
            amd64)
                echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
            *)
-               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
        esac
        exit ;;
     i*:CYGWIN*:*)
@@ -784,19 +804,22 @@ EOF
     *:MINGW*:*)
        echo ${UNAME_MACHINE}-pc-mingw32
        exit ;;
+    i*:MSYS*:*)
+       echo ${UNAME_MACHINE}-pc-msys
+       exit ;;
     i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
        exit ;;
     i*:PW*:*)
        echo ${UNAME_MACHINE}-pc-pw32
        exit ;;
-    *:Interix*:[3456]*)
-       case ${UNAME_MACHINE} in
+    *:Interix*:*)
+       case ${UNAME_MACHINE} in
            x86)
                echo i586-pc-interix${UNAME_RELEASE}
                exit ;;
-           EM64T | authenticamd)
+           authenticamd | genuineintel | EM64T)
                echo x86_64-unknown-interix${UNAME_RELEASE}
                exit ;;
            IA64)
@@ -806,6 +829,9 @@ EOF
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
        echo i${UNAME_MACHINE}-pc-mks
        exit ;;
+    8664:Windows_NT:*)
+       echo x86_64-pc-mks
+       exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
        # How do we know it's Interix rather than the generic POSIX subsystem?
        # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -835,6 +861,27 @@ EOF
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
        exit ;;
+    aarch64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    aarch64_be:Linux:*:*)
+       UNAME_MACHINE=aarch64_be
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+       esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
     arm*:Linux:*:*)
        eval $set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -842,20 +889,40 @@ EOF
        then
            echo ${UNAME_MACHINE}-unknown-linux-gnu
        else
-           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+               | grep -q __ARM_PCS_VFP
+           then
+               echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+           else
+               echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+           fi
        fi
        exit ;;
     avr32*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     cris:Linux:*:*)
-       echo cris-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-gnu
        exit ;;
     crisv32:Linux:*:*)
-       echo crisv32-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-gnu
        exit ;;
     frv:Linux:*:*)
-       echo frv-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    hexagon:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       LIBC=gnu
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
        exit ;;
     ia64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -866,74 +933,33 @@ EOF
     m68*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
-    mips:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef mips
-       #undef mipsel
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=mipsel
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=mips
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-           /^CPU/{
-               s: ::g
-               p
-           }'`"
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-       ;;
-    mips64:Linux:*:*)
+    mips:Linux:*:* | mips64:Linux:*:*)
        eval $set_cc_for_build
        sed 's/^        //' << EOF >$dummy.c
        #undef CPU
-       #undef mips64
-       #undef mips64el
+       #undef ${UNAME_MACHINE}
+       #undef ${UNAME_MACHINE}el
        #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=mips64el
+       CPU=${UNAME_MACHINE}el
        #else
        #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=mips64
+       CPU=${UNAME_MACHINE}
        #else
        CPU=
        #endif
        #endif
 EOF
-       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-           /^CPU/{
-               s: ::g
-               p
-           }'`"
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
        test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
        ;;
     or32:Linux:*:*)
-       echo or32-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-gnu
        exit ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
-       exit ;;
-    alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-         EV5)   UNAME_MACHINE=alphaev5 ;;
-         EV56)  UNAME_MACHINE=alphaev56 ;;
-         PCA56) UNAME_MACHINE=alphapca56 ;;
-         PCA57) UNAME_MACHINE=alphapca56 ;;
-         EV6)   UNAME_MACHINE=alphaev6 ;;
-         EV67)  UNAME_MACHINE=alphaev67 ;;
-         EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
        exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
@@ -943,14 +969,17 @@ EOF
          *)    echo hppa-unknown-linux-gnu ;;
        esac
        exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
        exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
        echo ${UNAME_MACHINE}-ibm-linux
        exit ;;
     sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     sh*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -958,78 +987,18 @@ EOF
     sparc:Linux:*:* | sparc64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
+    tile*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
     vax:Linux:*:*)
        echo ${UNAME_MACHINE}-dec-linux-gnu
        exit ;;
     x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
-    i*86:Linux:*:*)
-       # The BFD linker knows what the default object file format is, so
-       # first see if it will tell us. cd to the root directory to prevent
-       # problems with other programs or directories called `ld' in the path.
-       # Set LC_ALL=C to ensure ld outputs messages in English.
-       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-                        | sed -ne '/supported targets:/!d
-                                   s/[         ][      ]*/ /g
-                                   s/.*supported targets: *//
-                                   s/ .*//
-                                   p'`
-        case "$ld_supported_targets" in
-         elf32-i386)
-               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-               ;;
-         a.out-i386-linux)
-               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-               exit ;;
-         coff-i386)
-               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-               exit ;;
-         "")
-               # Either a pre-BFD a.out linker (linux-gnuoldld) or
-               # one that does not give us useful --help.
-               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-               exit ;;
-       esac
-       # Determine whether the default compiler is a.out or elf
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <features.h>
-       #ifdef __ELF__
-       # ifdef __GLIBC__
-       #  if __GLIBC__ >= 2
-       LIBC=gnu
-       #  else
-       LIBC=gnulibc1
-       #  endif
-       # else
-       LIBC=gnulibc1
-       # endif
-       #else
-       #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-       LIBC=gnu
-       #else
-       LIBC=gnuaout
-       #endif
-       #endif
-       #ifdef __dietlibc__
-       LIBC=dietlibc
-       #endif
-EOF
-       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-           /^LIBC/{
-               s: ::g
-               p
-           }'`"
-       test x"${LIBC}" != x && {
-               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-               exit
-       }
-       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-       ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
        # earlier versions are messed up and put the nodename in both
@@ -1037,11 +1006,11 @@ EOF
        echo i386-sequent-sysv4
        exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+       # Unixware is an offshoot of SVR4, but it has its own version
+       # number series starting with 2...
+       # I am not positive that other SVR4 systems won't match this,
        # I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+       # Use sysv4.2uw... so that sysv4* matches it.
        echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
        exit ;;
     i*86:OS/2:*:*)
@@ -1058,7 +1027,7 @@ EOF
     i*86:syllable:*:*)
        echo ${UNAME_MACHINE}-pc-syllable
        exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
        echo i386-unknown-lynxos${UNAME_RELEASE}
        exit ;;
     i*86:*DOS:*:*)
@@ -1073,7 +1042,7 @@ EOF
        fi
        exit ;;
     i*86:*:5:[678]*)
-       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
        case `/bin/uname -X | grep "^Machine"` in
            *486*)           UNAME_MACHINE=i486 ;;
            *Pentium)        UNAME_MACHINE=i586 ;;
@@ -1101,10 +1070,13 @@ EOF
        exit ;;
     pc:*:*:*)
        # Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-       echo i386-pc-msdosdjgpp
-        exit ;;
+       # uname -m prints for DJGPP always 'pc', but it prints nothing about
+       # the processor, so we play safe by assuming i586.
+       # Note: whatever this is, it MUST be the same as what config.sub
+       # prints for the "djgpp" host, or else GDB configury will decide that
+       # this is a cross-build.
+       echo i586-pc-msdosdjgpp
+       exit ;;
     Intel:Mach:3*:*)
        echo i386-pc-mach3
        exit ;;
@@ -1139,8 +1111,18 @@ EOF
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
          && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+       OS_REL='.3'
+       test -r /etc/.relid \
+           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
        echo m68k-unknown-lynxos${UNAME_RELEASE}
        exit ;;
@@ -1153,7 +1135,7 @@ EOF
     rs6000:LynxOS:2.*:*)
        echo rs6000-unknown-lynxos${UNAME_RELEASE}
        exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
        echo powerpc-unknown-lynxos${UNAME_RELEASE}
        exit ;;
     SM[BE]S:UNIX_SV:*:*)
@@ -1173,10 +1155,10 @@ EOF
                echo ns32k-sni-sysv
        fi
        exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                       # says <Richard.M.Bartel@ccMail.Census.GOV>
+       echo i586-unisys-sysv4
+       exit ;;
     *:UNIX_System_V:4*:FTX*)
        # From Gerald Hewes <hewes@openmarket.com>.
        # How about differentiating between stratus architectures? -djm
@@ -1202,11 +1184,11 @@ EOF
        exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
        if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
+               echo mips-nec-sysv${UNAME_RELEASE}
        else
-               echo mips-unknown-sysv${UNAME_RELEASE}
+               echo mips-unknown-sysv${UNAME_RELEASE}
        fi
-        exit ;;
+       exit ;;
     BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
        echo powerpc-be-beos
        exit ;;
@@ -1246,6 +1228,16 @@ EOF
     *:Darwin:*:*)
        UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
        case $UNAME_PROCESSOR in
+           i386)
+               eval $set_cc_for_build
+               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                     grep IS_64BIT_ARCH >/dev/null
+                 then
+                     UNAME_PROCESSOR="x86_64"
+                 fi
+               fi ;;
            unknown) UNAME_PROCESSOR=powerpc ;;
        esac
        echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
@@ -1261,6 +1253,9 @@ EOF
     *:QNX:*:4*)
        echo i386-pc-qnx
        exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+       echo neo-tandem-nsk${UNAME_RELEASE}
+       exit ;;
     NSE-?:NONSTOP_KERNEL:*:*)
        echo nse-tandem-nsk${UNAME_RELEASE}
        exit ;;
@@ -1306,13 +1301,13 @@ EOF
        echo pdp10-unknown-its
        exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+       echo mips-sei-seiux${UNAME_RELEASE}
        exit ;;
     *:DragonFly:*:*)
        echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
        exit ;;
     *:*VMS:*:*)
-       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
        case "${UNAME_MACHINE}" in
            A*) echo alpha-dec-vms ; exit ;;
            I*) echo ia64-dec-vms ; exit ;;
@@ -1327,6 +1322,12 @@ EOF
     i*86:rdos:*:*)
        echo ${UNAME_MACHINE}-pc-rdos
        exit ;;
+    i*86:AROS:*:*)
+       echo ${UNAME_MACHINE}-pc-aros
+       exit ;;
+    x86_64:VMkernel:*:*)
+       echo ${UNAME_MACHINE}-unknown-esx
+       exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1349,11 +1350,11 @@ main ()
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+       "4"
 #else
-         ""
+       ""
 #endif
-         ); exit (0);
+       ); exit (0);
 #endif
 #endif
 
old mode 100644 (file)
new mode 100755 (executable)
index d07267e..59bb593
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 20098
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2008-03-26'
+timestamp='2012-04-18'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2008-03-26'
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -32,13 +30,16 @@ timestamp='2008-03-26'
 
 
 # Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -72,8 +73,9 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008,2009 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -120,12 +122,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -148,10 +156,13 @@ case $os in
        -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
        -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
        -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray)
+       -apple | -axis | -knuth | -cray | -microblaze)
                os=
                basic_machine=$1
                ;;
+       -bluegene*)
+               os=-cnk
+               ;;
        -sim | -cisco | -oki | -wec | -winbond)
                os=
                basic_machine=$1
@@ -166,10 +177,10 @@ case $os in
                os=-chorusos
                basic_machine=$1
                ;;
-       -chorusrdb)
-               os=-chorusrdb
+       -chorusrdb)
+               os=-chorusrdb
                basic_machine=$1
-               ;;
+               ;;
        -hiux*)
                os=-hiuxwe2
                ;;
@@ -214,6 +225,12 @@ case $os in
        -isc*)
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
                ;;
+       -lynx*178)
+               os=-lynxos178
+               ;;
+       -lynx*5)
+               os=-lynxos5
+               ;;
        -lynx*)
                os=-lynxos
                ;;
@@ -238,17 +255,23 @@ case $basic_machine in
        # Some are omitted here because they have special meanings below.
        1750a | 580 \
        | a29k \
+       | aarch64 | aarch64_be \
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
        | am33_2.0 \
        | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
        | bfin \
        | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
+       | epiphany \
        | fido | fr30 | frv \
        | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | hexagon \
        | i370 | i860 | i960 | ia64 \
        | ip2k | iq2000 \
+       | le32 | le64 \
+       | lm32 \
        | m32c | m32r | m32rle | m68000 | m68k | m88k \
        | maxq | mb | microblaze | mcore | mep | metag \
        | mips | mipsbe | mipseb | mipsel | mipsle \
@@ -270,29 +293,42 @@ case $basic_machine in
        | mipsisa64sr71k | mipsisa64sr71kel \
        | mipstx39 | mipstx39el \
        | mn10200 | mn10300 \
+       | moxie \
        | mt \
        | msp430 \
+       | nds32 | nds32le | nds32be \
        | nios | nios2 \
        | ns16k | ns32k \
+       | open8 \
        | or32 \
        | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | powerpc | powerpc64 | powerpc64le | powerpcle \
        | pyramid \
+       | rl78 | rx \
        | score \
-       | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
        | sh64 | sh64le \
        | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
        | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu | strongarm \
-       | tahoe | thumb | tic4x | tic80 | tron \
-       | v850 | v850e \
+       | spu \
+       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+       | ubicom32 \
+       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
        | we32k \
-       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
-       | z8k)
+       | x86 | xc16x | xstormy16 | xtensa \
+       | z8k | z80)
                basic_machine=$basic_machine-unknown
                ;;
-       m6811 | m68hc11 | m6812 | m68hc12)
-               # Motorola 68HC11/12.
+       c54x)
+               basic_machine=tic54x-unknown
+               ;;
+       c55x)
+               basic_machine=tic55x-unknown
+               ;;
+       c6x)
+               basic_machine=tic6x-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
                basic_machine=$basic_machine-unknown
                os=-none
                ;;
@@ -302,6 +338,21 @@ case $basic_machine in
                basic_machine=mt-unknown
                ;;
 
+       strongarm | thumb | xscale)
+               basic_machine=arm-unknown
+               ;;
+       xgate)
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       xscaleeb)
+               basic_machine=armeb-unknown
+               ;;
+
+       xscaleel)
+               basic_machine=armel-unknown
+               ;;
+
        # We use `pc' rather than `unknown'
        # because (1) that's what they normally are, and
        # (2) the word "unknown" tends to confuse beginning users.
@@ -316,24 +367,29 @@ case $basic_machine in
        # Recognize the basic CPU types with company name.
        580-* \
        | a29k-* \
+       | aarch64-* | aarch64_be-* \
        | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
        | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
        | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
+       | be32-* | be64-* \
        | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* \
        | clipper-* | craynv-* | cydra-* \
        | d10v-* | d30v-* | dlx-* \
        | elxsi-* \
        | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | hexagon-* \
        | i*86-* | i860-* | i960-* | ia64-* \
        | ip2k-* | iq2000-* \
+       | le32-* | le64-* \
+       | lm32-* \
        | m32c-* | m32r-* | m32rle-* \
        | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
        | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
        | mips16-* \
        | mips64-* | mips64el-* \
@@ -355,27 +411,32 @@ case $basic_machine in
        | mmix-* \
        | mt-* \
        | msp430-* \
+       | nds32-* | nds32le-* | nds32be-* \
        | nios-* | nios2-* \
        | none-* | np1-* | ns16k-* | ns32k-* \
+       | open8-* \
        | orion-* \
        | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
        | pyramid-* \
-       | romp-* | rs6000-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | rl78-* | romp-* | rs6000-* | rx-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
        | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
        | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
        | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-       | tahoe-* | thumb-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+       | tahoe-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tile*-* \
        | tron-* \
-       | v850-* | v850e-* | vax-* \
+       | ubicom32-* \
+       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+       | vax-* \
        | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* \
        | xstormy16-* | xtensa*-* \
        | ymp-* \
-       | z8k-*)
+       | z8k-* | z80-*)
                ;;
        # Recognize the basic CPU types without company name, with glob match.
        xtensa*)
@@ -397,7 +458,7 @@ case $basic_machine in
                basic_machine=a29k-amd
                os=-udi
                ;;
-       abacus)
+       abacus)
                basic_machine=abacus-unknown
                ;;
        adobe68k)
@@ -443,6 +504,10 @@ case $basic_machine in
                basic_machine=m68k-apollo
                os=-bsd
                ;;
+       aros)
+               basic_machine=i386-pc
+               os=-aros
+               ;;
        aux)
                basic_machine=m68k-apple
                os=-aux
@@ -459,10 +524,27 @@ case $basic_machine in
                basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
                os=-linux
                ;;
+       bluegene*)
+               basic_machine=powerpc-ibm
+               os=-cnk
+               ;;
+       c54x-*)
+               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c55x-*)
+               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c6x-*)
+               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
        c90)
                basic_machine=c90-cray
                os=-unicos
                ;;
+       cegcc)
+               basic_machine=arm-unknown
+               os=-cegcc
+               ;;
        convex-c1)
                basic_machine=c1-convex
                os=-bsd
@@ -491,7 +573,7 @@ case $basic_machine in
                basic_machine=craynv-cray
                os=-unicosmp
                ;;
-       cr16)
+       cr16 | cr16-*)
                basic_machine=cr16-unknown
                os=-elf
                ;;
@@ -530,6 +612,10 @@ case $basic_machine in
                basic_machine=m88k-motorola
                os=-sysv3
                ;;
+       dicos)
+               basic_machine=i686-pc
+               os=-dicos
+               ;;
        djgpp)
                basic_machine=i586-pc
                os=-msdosdjgpp
@@ -645,7 +731,6 @@ case $basic_machine in
        i370-ibm* | ibm*)
                basic_machine=i370-ibm
                ;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
        i*86v32)
                basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
                os=-sysv32
@@ -703,6 +788,9 @@ case $basic_machine in
                basic_machine=ns32k-utek
                os=-sysv
                ;;
+       microblaze)
+               basic_machine=microblaze-xilinx
+               ;;
        mingw32)
                basic_machine=i386-pc
                os=-mingw32
@@ -739,10 +827,18 @@ case $basic_machine in
        ms1-*)
                basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
                ;;
+       msys)
+               basic_machine=i386-pc
+               os=-msys
+               ;;
        mvs)
                basic_machine=i370-ibm
                os=-mvs
                ;;
+       nacl)
+               basic_machine=le32-unknown
+               os=-nacl
+               ;;
        ncr3000)
                basic_machine=i486-ncr
                os=-sysv4
@@ -807,6 +903,9 @@ case $basic_machine in
        np1)
                basic_machine=np1-gould
                ;;
+       neo-tandem)
+               basic_machine=neo-tandem
+               ;;
        nse-tandem)
                basic_machine=nse-tandem
                ;;
@@ -892,9 +991,10 @@ case $basic_machine in
                ;;
        power)  basic_machine=power-ibm
                ;;
-       ppc)    basic_machine=powerpc-unknown
+       ppc | ppcbe)    basic_machine=powerpc-unknown
                ;;
-       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+       ppc-* | ppcbe-*)
+               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
        ppcle | powerpclittle | ppc-le | powerpc-little)
                basic_machine=powerpcle-unknown
@@ -988,6 +1088,9 @@ case $basic_machine in
                basic_machine=i860-stratus
                os=-sysv4
                ;;
+       strongarm-* | thumb-*)
+               basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
        sun2)
                basic_machine=m68000-sun
                ;;
@@ -1044,20 +1147,8 @@ case $basic_machine in
                basic_machine=t90-cray
                os=-unicos
                ;;
-       tic54x | c54x*)
-               basic_machine=tic54x-unknown
-               os=-coff
-               ;;
-       tic55x | c55x*)
-               basic_machine=tic55x-unknown
-               os=-coff
-               ;;
-       tic6x | c6x*)
-               basic_machine=tic6x-unknown
-               os=-coff
-               ;;
        tile*)
-               basic_machine=tile-unknown
+               basic_machine=$basic_machine-unknown
                os=-linux-gnu
                ;;
        tx39)
@@ -1127,6 +1218,9 @@ case $basic_machine in
        xps | xps100)
                basic_machine=xps100-honeywell
                ;;
+       xscale-* | xscalee[bl]-*)
+               basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+               ;;
        ymp)
                basic_machine=ymp-cray
                os=-unicos
@@ -1135,6 +1229,10 @@ case $basic_machine in
                basic_machine=z8k-unknown
                os=-sim
                ;;
+       z80-*-coff)
+               basic_machine=z80-unknown
+               os=-sim
+               ;;
        none)
                basic_machine=none-none
                os=-none
@@ -1173,7 +1271,7 @@ case $basic_machine in
        we32k)
                basic_machine=we32k-att
                ;;
-       sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
                basic_machine=sh-unknown
                ;;
        sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
@@ -1220,9 +1318,12 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+       # First match some system type aliases
+       # that might get confused with valid system types.
        # -solaris* is a basic system type, with this one exception.
+       -auroraux)
+               os=-auroraux
+               ;;
        -solaris1 | -solaris1.*)
                os=`echo $os | sed -e 's|solaris1|sunos4|'`
                ;;
@@ -1243,10 +1344,11 @@ case $os in
        # Each alternative MUST END IN A *, to match a version number.
        # -sysv* is not here because it comes later, after sysvr4.
        -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+             | -sym* | -kopensolaris* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* \
+             | -aos* | -aros* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
@@ -1255,9 +1357,10 @@ case $os in
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* \
-             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-uclibc* \
              | -uxpv* | -beos* | -mpeix* | -udk* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
              | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1265,7 +1368,7 @@ case $os in
              | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
              | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
              | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
        -qnx*)
@@ -1304,7 +1407,7 @@ case $os in
        -opened*)
                os=-openedition
                ;;
-        -os400*)
+       -os400*)
                os=-os400
                ;;
        -wince*)
@@ -1353,7 +1456,7 @@ case $os in
        -sinix*)
                os=-sysv4
                ;;
-        -tpf*)
+       -tpf*)
                os=-tpf
                ;;
        -triton*)
@@ -1395,6 +1498,11 @@ case $os in
        -zvmoe)
                os=-zvmoe
                ;;
+       -dicos*)
+               os=-dicos
+               ;;
+       -nacl*)
+               ;;
        -none)
                ;;
        *)
@@ -1417,10 +1525,10 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
-        score-*)
+       score-*)
                os=-elf
                ;;
-        spu-*)
+       spu-*)
                os=-elf
                ;;
        *-acorn)
@@ -1432,8 +1540,17 @@ case $basic_machine in
        arm*-semi)
                os=-aout
                ;;
-        c4x-* | tic4x-*)
-               os=-coff
+       c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       tic54x-*)
+               os=-coff
+               ;;
+       tic55x-*)
+               os=-coff
+               ;;
+       tic6x-*)
+               os=-coff
                ;;
        # This must come before the *-dec entry.
        pdp10-*)
@@ -1453,14 +1570,11 @@ case $basic_machine in
                ;;
        m68000-sun)
                os=-sunos3
-               # This also exists in the configure program, but was not the
-               # default.
-               # os=-sunos4
                ;;
        m68*-cisco)
                os=-aout
                ;;
-        mep-*)
+       mep-*)
                os=-elf
                ;;
        mips*-cisco)
@@ -1487,7 +1601,7 @@ case $basic_machine in
        *-ibm)
                os=-aix
                ;;
-       *-knuth)
+       *-knuth)
                os=-mmixware
                ;;
        *-wec)
@@ -1592,7 +1706,7 @@ case $basic_machine in
                        -sunos*)
                                vendor=sun
                                ;;
-                       -aix*)
+                       -cnk*|-aix*)
                                vendor=ibm
                                ;;
                        -beos*)
index 5d55b9c211524cbe49d280922be2f41babbc7942..9c8679211c28094effaa0726e4afa40862014ad3 100644 (file)
@@ -1,7 +1,7 @@
 14
 1 2 3 4 5 6
 1 2 3 4 51 6
-5
+145
 14
 7
 42
 4
 9
 16
-./appendop.tests: line 83: x: readonly variable
+./appendop.tests: line 84: x: readonly variable
 declare -A foo='([one]="bar" [two]="baz" [three]="quux" )'
 declare -A foo='([one]="bar" [two]="baz" [0]="zero" [three]="quux" )'
 declare -A foo='([four]="four" [one]="bar" [two]="baz" [0]="zero" [three]="quux" )'
 declare -ai iarr='([0]="3" [1]="2" [2]="3")'
 declare -ai iarr='([0]="3" [1]="2" [2]="3" [3]="4" [4]="5" [5]="6")'
+25 25
+7 7
+14
+145
+145 145
index be6c971661678b97e418efd7375f0b10f4e4ce75..e4e52c2fe589094123cbacf2fde154fdb6d04ca9 100644 (file)
@@ -12,7 +12,8 @@ x[4]+=1
 echo ${x[@]}
 
 # trickier cases
-
+# post-bash-4.2: bash understands += in environment assignments preceding
+# command names
 a+=5 printenv a
 echo $a
 
@@ -83,3 +84,4 @@ echo $x
 x+=5
 
 ${THIS_SH} ./appendop1.sub
+${THIS_SH} ./appendop2.sub
diff --git a/tests/appendop2.sub b/tests/appendop2.sub
new file mode 100644 (file)
index 0000000..4225ba3
--- /dev/null
@@ -0,0 +1,18 @@
+POSIXLY_CORRECT=1
+x=2
+x+=5 eval printf '"$x "'
+echo "$x"
+
+unset x
+typeset -i x=2
+x+=5 eval printf '"$x "'
+echo "$x"
+
+a=1
+a+=4
+echo $a
+
+# idiotically, ksh93 makes these two cases differ (?)
+a+=5 printenv a
+a+=5 eval printf '"$a "'
+echo $a
index 52fb8a149d4ded2920a665e986cc81f501bfbb89..58ab2a4faf08271a94d8c2568f7526e767557176 100644 (file)
@@ -7,3 +7,14 @@ no more clauses
 1.0
 ./case.tests: line 29: xx: readonly variable
 1.1
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+mysterious 1
+mysterious 2
index 37e7fb924fd34f33a4d9f214fa535fc96b42e70c..547e8ccd61d5613e93151d995fd29fa9147d7d8f 100644 (file)
@@ -28,3 +28,6 @@ unset x
 readonly xx=1
 case 1 in $((xx++)) ) echo hi1 ;; *) echo hi2; esac
 echo ${xx}.$?
+
+# tests of quote removal and pattern matching
+${THIS_SH} ./case1.sub
diff --git a/tests/case1.sub b/tests/case1.sub
new file mode 100644 (file)
index 0000000..7db09ab
--- /dev/null
@@ -0,0 +1,64 @@
+x='\x'
+
+case x in
+\x)    echo ok 1;;
+*)     echo bad 1;;
+esac
+
+case x in
+$x)    echo ok 2;;
+*)     echo bad 2;;
+esac
+
+case $x in
+\x)    echo bad 3;;
+\\x)   echo ok 3 ;;
+*)     echo bad 3.1 ;;
+esac
+
+case $x in
+\\$x)  echo ok 4 ;;
+x)     echo bad 4;;
+$x)    echo bad 4.1 ;;
+*)     echo bad 4.2;;
+esac
+
+case x in
+\\x)   echo bad 5;;
+\x)    echo ok 5;;
+*)     echo bad 5.1;;
+esac
+
+case x in
+\\x)   echo bad 6;;
+x)     echo ok 6;;
+*)     echo bad 6.1;;
+esac
+
+case x in
+$x)    echo ok 7 ;;
+\\$x)  echo bad 7 ;;
+*)     echo bad 7.1 ;;
+esac
+
+case x in
+\x)    echo ok 8 ;;
+\\x)   echo bad 8 ;;
+*)     echo bad 8.1 ;;
+esac
+
+case \x in
+\x)    echo ok 9 ;;
+\\x)   echo bad 9 ;;
+*)     echo bad 9.1 ;;
+esac
+
+case $x in
+$x)    echo oops 1 ;;
+*)     echo mysterious 1 ;;
+esac
+
+case \x in
+\x)    echo mysterious 2 ;;
+*)     echo oops 2 ;;
+esac
index 267f0e7fdebfee96982affa82ff8233c4133d46f..9d1290ef2bf711012e1f751d30c5cda53c89240a 100644 (file)
@@ -38,3 +38,21 @@ argv[1] = <'A^IB'>
 hello' world
 hello world!
 hello' world!
+'  |  '
+'  |  '
+x  |  x
+x  |  x
+'  |  '
+'  |  '
+'  |  '
+'  |  '
+'  |  '
+'  |  '
+x  |  x
+'
+$'\''
+'
+'abcd'
+$'\'abcd\''
+'
+1
index 720c3e157bc8b3e8835f27c1271261cad88e95c9..aa0a9d88f6bf51182e49833893120bcf0ffa2ff3 100644 (file)
@@ -116,3 +116,4 @@ recho "${mytab:-$'\t'}"
 recho "$( args $'A\tB' )"
 
 ${THIS_SH} ./nquote1.sub
+${THIS_SH} ./nquote2.sub
diff --git a/tests/nquote2.sub b/tests/nquote2.sub
new file mode 100644 (file)
index 0000000..d3325f1
--- /dev/null
@@ -0,0 +1,29 @@
+t() {
+    printf '%s  |  %s\n' "$1" "$2"
+  }
+  v="'"       # v <- '
+
+  #--
+  t "${v/$'\''/$'\''}"        "'"
+  t  ${v/$'\''/$'\''}         "'"
+  t "${v/$'\''/x}"            "x"
+  t  ${v/$'\''/x}             "x"
+  t "${v/x/$'\''}"            "'"
+  t  ${v/x/$'\''}             "'"
+  t "${v/x/$'\x5c\''}"        "'" 
+  t  ${v/x/$'\x5c\''}         "'" 
+  t "${v/\'/\'}"              "'"
+  t  ${v/\'/\'}               "'"
+  t  ${v/\'/x}               "x"
+
+echo "'"
+echo "$'\''"
+
+echo $'\''
+
+echo $'\'abcd\''
+echo "$'\'abcd\''"
+
+v=1
+echo ${v/1/\'}
+echo ${v/\'/2}
index a186e78191a4ae08a22e551b03ee232326208b11..d0fb46c60f203d30e28cee566e48263deec7ad5a 100644 (file)
@@ -146,7 +146,7 @@ fi
 newtest
 SQUOTE="'"
 val1=$(set | sed -n 's:^SQUOTE=::p')
-if [ "$val1" != "''\\'''" ]; then
+if [ "$val1" != "\'" ]; then
         testfail "variable quoting 1"
 fi
 
index c04d17260c5ee66816de5213b8852e8ded742652..1da72a52ff06dc979b0d78754e2bd05328ba963d 100644 (file)
@@ -85,6 +85,24 @@ outside 1
 outside 2
 outside 3
 outside 4
+sleep 2
+wait $!
+exit
+in trap EXIT
+sleep 2
+wait $!
+exit
+in trap EXIT
+works
+bar
+bar
+foo
+trap -- '' SIGINT
+trap -- '' SIGUSR2
+foo
+bar
+foo
+bar
 caught a child death
 caught a child death
 caught a child death
index e9859ec8f1d0fb9a4521d356e118d475a259f185..0af03ad7c0f9726ddfa8788694a74a0277992dfe 100644 (file)
@@ -70,6 +70,8 @@ ${THIS_SH} ./trap3.sub
 
 ${THIS_SH} ./trap4.sub
 
+${THIS_SH} ./trap5.sub
+
 #
 # show that setting a trap on SIGCHLD is not disastrous.
 #
index 6a8abdac2d35899238cebce70cff91f8adeac04c..ab5ca3e3be463bee1e4629c5b91d1517a2027c25 100644 (file)
@@ -15,3 +15,28 @@ trap 'echo inherited exit trap' EXIT
 : | ( exit; ) | : ; echo outside 4
 
 trap - EXIT
+
+# make sure group commands that are not at the beginning or end of pipelines
+# run an EXIT trap, with and without the exit builtin
+echo ignored |
+{
+    trap 'echo "in trap EXIT">&2' EXIT
+    sleep 4 &
+    echo 'sleep 2'>&2
+    sleep 2
+    echo 'wait $!'>&2
+    wait $!
+    echo 'exit'>&2
+    exit
+} | cat
+
+echo ignored |
+{
+    trap 'echo "in trap EXIT">&2' EXIT
+    sleep 4 &
+    echo 'sleep 2'>&2
+    sleep 2
+    echo 'wait $!'>&2
+    wait $!
+    echo 'exit'>&2
+} | cat
diff --git a/tests/trap5.sub b/tests/trap5.sub
new file mode 100644 (file)
index 0000000..7f3380b
--- /dev/null
@@ -0,0 +1,18 @@
+# make sure process substitution runs the exit trap
+[[ -n $(< <(trap "cat /dev/fd/0" EXIT)) ]] <<<works && echo works || echo "fail :("
+
+read foo < <(trap "echo bar" EXIT)
+echo $foo
+
+cat <(trap "echo bar" EXIT)
+
+trap "echo bar" EXIT   #should proc subst inherit this?
+cat <(echo foo ; exit 0;)
+
+trap - 0
+trap
+
+cat <(echo foo; trap "echo bar" EXIT)
+
+trap "echo bar" EXIT   #should proc subst inherit this?
+cat <(echo foo)
diff --git a/trap.c b/trap.c
index 1e11d1f9ffba34f504d171557bda28a22fdd48db..2bca008e1ae383cfd7f056c4bc74d97b24394f63 100644 (file)
--- a/trap.c
+++ b/trap.c
@@ -286,6 +286,9 @@ run_pending_traps ()
   if (catch_flag == 0)         /* simple optimization */
     return;
 
+  if (running_trap > 0)
+    return;                    /* no recursive trap invocations */
+
   catch_flag = trapped_signal_received = 0;
 
   /* Preserve $? when running trap. */
@@ -304,6 +307,8 @@ run_pending_traps ()
 
          BLOCK_SIGNAL (sig, set, oset);
 
+         running_trap = sig + 1;
+
          if (sig == SIGINT)
            {
              run_interrupt_trap ();
@@ -324,6 +329,7 @@ run_pending_traps ()
            {
              /* This can happen when run_pending_traps is called while
                 running a SIGCHLD trap handler. */
+             running_trap = 0;
              UNBLOCK_SIGNAL (oset);
              continue;                                 /* XXX */
            }
@@ -355,11 +361,19 @@ run_pending_traps ()
            }
          else
            {
+             /* XXX - should we use save_parser_state/restore_parser_state? */
              token_state = save_token_state ();
              save_subst_varlist = subst_assign_varlist;
              subst_assign_varlist = 0;
 
+#if defined (JOB_CONTROL)
+             save_pipeline (1);        /* XXX only provides one save level */
+#endif
              evalstring (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
+#if defined (JOB_CONTROL)
+             restore_pipeline (1);
+#endif
+
              restore_token_state (token_state);
              free (token_state);
 
@@ -367,6 +381,7 @@ run_pending_traps ()
            }
 
          pending_traps[sig] = 0;
+         running_trap = 0;
 
          UNBLOCK_SIGNAL (oset);
        }
index d3ed0dac44b8dfce444e692473f336fbd90b880f..596384574486931d02863dfef407a2fe78e55c93 100644 (file)
@@ -166,6 +166,8 @@ static int export_env_size;
 static int winsize_assignment;         /* currently assigning to LINES or COLUMNS */
 #endif
 
+static HASH_TABLE *last_table_searched;        /* hash_lookup sets this */
+
 /* Some forward declarations. */
 static void create_variable_tables __P((void));
 
@@ -1762,6 +1764,10 @@ hash_lookup (name, hashed_vars)
   BUCKET_CONTENTS *bucket;
 
   bucket = hash_search (name, hashed_vars, 0);
+  /* If we find the name in HASHED_VARS, set LAST_TABLE_SEARCHED to that
+     table. */
+  if (bucket)
+    last_table_searched = hashed_vars;
   return (bucket ? (SHELL_VAR *)bucket->data : (SHELL_VAR *)NULL);
 }
 
@@ -1840,17 +1846,25 @@ find_variable_nameref (v)
 {
   int level;
   char *newname;
+  SHELL_VAR *orig, *oldv;
 
   level = 0;
+  orig = v;
   while (v && nameref_p (v))
     {
       level++;
       if (level > NAMEREF_MAX)
-        return ((SHELL_VAR *)0);       /* error message here? */
+       return ((SHELL_VAR *)0);        /* error message here? */
       newname = nameref_cell (v);
       if (newname == 0 || *newname == '\0')
        return ((SHELL_VAR *)0);
+      oldv = v;
       v = find_variable_internal (newname, (expanding_redir == 0 && (assigning_in_environment || executing_builtin)));
+      if (v == orig || v == oldv)
+       {
+         internal_warning (_("%s: circular name reference"), orig->name);
+         return ((SHELL_VAR *)0);
+       }
     }
   return v;
 }
@@ -2066,6 +2080,7 @@ find_variable (name)
 {
   SHELL_VAR *v;
 
+  last_table_searched = 0;
   v = find_variable_internal (name, (expanding_redir == 0 && (assigning_in_environment || executing_builtin)));
   if (v && nameref_p (v))
     v = find_variable_nameref (v);
@@ -2186,6 +2201,21 @@ make_local_variable (name)
     }
 
   was_tmpvar = old_var && tempvar_p (old_var);
+  /* If we're making a local variable in a shell function, the temporary env
+     has already been merged into the function's variable context stack.  We
+     can assume that a temporary var in the same context appears in the same
+     VAR_CONTEXT and can safely be returned without creating a new variable
+     (which results in duplicate names in the same VAR_CONTEXT->table */
+  /* We can't just test tmpvar_p because variables in the temporary env given
+     to a shell function appear in the function's local variable VAR_CONTEXT
+     but retain their tempvar attribute.  We want temporary variables that are
+     found in temporary_env, hence the test for last_table_searched, which is
+     set in hash_lookup and only (so far) checked here. */
+  if (was_tmpvar && old_var->context == variable_context && last_table_searched != temporary_env)
+    {
+      VUNSETATTR (old_var, att_invisible);
+      return (old_var);
+    }
   if (was_tmpvar)
     tmp_value = value_cell (old_var);
 
@@ -2230,7 +2260,8 @@ make_local_variable (name)
 
       /* If we found this variable in one of the temporary environments,
         inherit its value.  Watch to see if this causes problems with
-        things like `x=4 local x'. */
+        things like `x=4 local x'. XXX - see above for temporary env
+        variables with the same context level as variable_context */
       /* XXX - we should only do this if the variable is not an array. */
       if (was_tmpvar)
        var_setvalue (new_var, savestring (tmp_value));
@@ -2741,6 +2772,8 @@ bind_int_variable (lhs, rhs)
   if (v && isint)
     VSETATTR (v, att_integer);
 
+  VUNSETATTR (v, att_invisible);
+
   return (v);
 }
 
@@ -2841,13 +2874,14 @@ assign_in_env (word, flags)
      WORD_DESC *word;
      int flags;
 {
-  int offset;
+  int offset, aflags;
   char *name, *temp, *value;
   SHELL_VAR *var;
   const char *string;
 
   string = word->word;
 
+  aflags = 0;
   offset = assignment (string, 0);
   name = savestring (string);
   value = (char *)NULL;
@@ -2858,7 +2892,10 @@ assign_in_env (word, flags)
 
       /* ignore the `+' when assigning temporary environment */
       if (name[offset - 1] == '+')
-       name[offset - 1] = '\0';
+       {
+         name[offset - 1] = '\0';
+         aflags |= ASS_APPEND;
+       }
 
       var = find_variable (name);
       if (var && (readonly_p (var) || noassign_p (var)))
@@ -2871,6 +2908,13 @@ assign_in_env (word, flags)
 
       temp = name + offset + 1;
       value = expand_assignment_string_to_string (temp, 0);
+
+      if (var && (aflags & ASS_APPEND))
+       {
+         temp = make_variable_value (var, value, aflags);
+         FREE (value);
+         value = temp;
+       }
     }
 
   if (temporary_env == 0)
diff --git a/y.tab.c b/y.tab.c
index ec2020eb2fbd091b2e454fbfa8e6562db4377fbb..465f54fc169c66094ab72e98ac49e096b7cd8305 100644 (file)
--- a/y.tab.c
+++ b/y.tab.c
 
 
 /* Copy the first part of user declarations.  */
-#line 21 "/Users/chet/src/bash/src/parse.y"
+#line 21 "/usr/homes/chet/src/bash/src/parse.y"
 
 #include "config.h"
 
@@ -492,7 +492,7 @@ static REDIRECTEE redir;
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 324 "/Users/chet/src/bash/src/parse.y"
+#line 324 "/usr/homes/chet/src/bash/src/parse.y"
 {
   WORD_DESC *word;             /* the word that we read. */
   int number;                  /* the number that we read. */
@@ -2093,7 +2093,7 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 378 "/Users/chet/src/bash/src/parse.y"
+#line 378 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          /* Case of regular command.  Discard the error
                             safety net,and return the command just parsed. */
@@ -2107,7 +2107,7 @@ yyreduce:
     break;
 
   case 3:
-#line 389 "/Users/chet/src/bash/src/parse.y"
+#line 389 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          /* Case of regular command, but not a very
                             interesting one.  Return a NULL command. */
@@ -2119,7 +2119,7 @@ yyreduce:
     break;
 
   case 4:
-#line 398 "/Users/chet/src/bash/src/parse.y"
+#line 398 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          /* Error during parsing.  Return NULL command. */
                          global_command = (COMMAND *)NULL;
@@ -2137,7 +2137,7 @@ yyreduce:
     break;
 
   case 5:
-#line 413 "/Users/chet/src/bash/src/parse.y"
+#line 413 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          /* Case of EOF seen by itself.  Do ignoreeof or
                             not. */
@@ -2148,17 +2148,17 @@ yyreduce:
     break;
 
   case 6:
-#line 423 "/Users/chet/src/bash/src/parse.y"
+#line 423 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
     break;
 
   case 7:
-#line 425 "/Users/chet/src/bash/src/parse.y"
+#line 425 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
     break;
 
   case 8:
-#line 429 "/Users/chet/src/bash/src/parse.y"
+#line 429 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 1;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2167,7 +2167,7 @@ yyreduce:
     break;
 
   case 9:
-#line 435 "/Users/chet/src/bash/src/parse.y"
+#line 435 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 0;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2176,7 +2176,7 @@ yyreduce:
     break;
 
   case 10:
-#line 441 "/Users/chet/src/bash/src/parse.y"
+#line 441 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2185,7 +2185,7 @@ yyreduce:
     break;
 
   case 11:
-#line 447 "/Users/chet/src/bash/src/parse.y"
+#line 447 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2194,7 +2194,7 @@ yyreduce:
     break;
 
   case 12:
-#line 453 "/Users/chet/src/bash/src/parse.y"
+#line 453 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2203,7 +2203,7 @@ yyreduce:
     break;
 
   case 13:
-#line 459 "/Users/chet/src/bash/src/parse.y"
+#line 459 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2212,7 +2212,7 @@ yyreduce:
     break;
 
   case 14:
-#line 465 "/Users/chet/src/bash/src/parse.y"
+#line 465 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 1;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2221,7 +2221,7 @@ yyreduce:
     break;
 
   case 15:
-#line 471 "/Users/chet/src/bash/src/parse.y"
+#line 471 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2230,7 +2230,7 @@ yyreduce:
     break;
 
   case 16:
-#line 477 "/Users/chet/src/bash/src/parse.y"
+#line 477 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2239,7 +2239,7 @@ yyreduce:
     break;
 
   case 17:
-#line 483 "/Users/chet/src/bash/src/parse.y"
+#line 483 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 1;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2248,7 +2248,7 @@ yyreduce:
     break;
 
   case 18:
-#line 489 "/Users/chet/src/bash/src/parse.y"
+#line 489 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2257,7 +2257,7 @@ yyreduce:
     break;
 
   case 19:
-#line 495 "/Users/chet/src/bash/src/parse.y"
+#line 495 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2266,7 +2266,7 @@ yyreduce:
     break;
 
   case 20:
-#line 501 "/Users/chet/src/bash/src/parse.y"
+#line 501 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 0;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2275,7 +2275,7 @@ yyreduce:
     break;
 
   case 21:
-#line 507 "/Users/chet/src/bash/src/parse.y"
+#line 507 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2284,7 +2284,7 @@ yyreduce:
     break;
 
   case 22:
-#line 513 "/Users/chet/src/bash/src/parse.y"
+#line 513 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2293,7 +2293,7 @@ yyreduce:
     break;
 
   case 23:
-#line 519 "/Users/chet/src/bash/src/parse.y"
+#line 519 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 0;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2303,7 +2303,7 @@ yyreduce:
     break;
 
   case 24:
-#line 526 "/Users/chet/src/bash/src/parse.y"
+#line 526 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2313,7 +2313,7 @@ yyreduce:
     break;
 
   case 25:
-#line 533 "/Users/chet/src/bash/src/parse.y"
+#line 533 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2323,7 +2323,7 @@ yyreduce:
     break;
 
   case 26:
-#line 540 "/Users/chet/src/bash/src/parse.y"
+#line 540 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 0;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2333,7 +2333,7 @@ yyreduce:
     break;
 
   case 27:
-#line 547 "/Users/chet/src/bash/src/parse.y"
+#line 547 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2343,7 +2343,7 @@ yyreduce:
     break;
 
   case 28:
-#line 554 "/Users/chet/src/bash/src/parse.y"
+#line 554 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2353,7 +2353,7 @@ yyreduce:
     break;
 
   case 29:
-#line 561 "/Users/chet/src/bash/src/parse.y"
+#line 561 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 0;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2362,7 +2362,7 @@ yyreduce:
     break;
 
   case 30:
-#line 567 "/Users/chet/src/bash/src/parse.y"
+#line 567 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2371,7 +2371,7 @@ yyreduce:
     break;
 
   case 31:
-#line 573 "/Users/chet/src/bash/src/parse.y"
+#line 573 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2380,7 +2380,7 @@ yyreduce:
     break;
 
   case 32:
-#line 579 "/Users/chet/src/bash/src/parse.y"
+#line 579 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 0;
                          redir.dest = (yyvsp[(2) - (2)].number);
@@ -2389,7 +2389,7 @@ yyreduce:
     break;
 
   case 33:
-#line 585 "/Users/chet/src/bash/src/parse.y"
+#line 585 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.dest = (yyvsp[(3) - (3)].number);
@@ -2398,7 +2398,7 @@ yyreduce:
     break;
 
   case 34:
-#line 591 "/Users/chet/src/bash/src/parse.y"
+#line 591 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.dest = (yyvsp[(3) - (3)].number);
@@ -2407,7 +2407,7 @@ yyreduce:
     break;
 
   case 35:
-#line 597 "/Users/chet/src/bash/src/parse.y"
+#line 597 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 1;
                          redir.dest = (yyvsp[(2) - (2)].number);
@@ -2416,7 +2416,7 @@ yyreduce:
     break;
 
   case 36:
-#line 603 "/Users/chet/src/bash/src/parse.y"
+#line 603 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.dest = (yyvsp[(3) - (3)].number);
@@ -2425,7 +2425,7 @@ yyreduce:
     break;
 
   case 37:
-#line 609 "/Users/chet/src/bash/src/parse.y"
+#line 609 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.dest = (yyvsp[(3) - (3)].number);
@@ -2434,7 +2434,7 @@ yyreduce:
     break;
 
   case 38:
-#line 615 "/Users/chet/src/bash/src/parse.y"
+#line 615 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 0;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2443,7 +2443,7 @@ yyreduce:
     break;
 
   case 39:
-#line 621 "/Users/chet/src/bash/src/parse.y"
+#line 621 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2452,7 +2452,7 @@ yyreduce:
     break;
 
   case 40:
-#line 627 "/Users/chet/src/bash/src/parse.y"
+#line 627 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2461,7 +2461,7 @@ yyreduce:
     break;
 
   case 41:
-#line 633 "/Users/chet/src/bash/src/parse.y"
+#line 633 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 1;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2470,7 +2470,7 @@ yyreduce:
     break;
 
   case 42:
-#line 639 "/Users/chet/src/bash/src/parse.y"
+#line 639 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2479,7 +2479,7 @@ yyreduce:
     break;
 
   case 43:
-#line 645 "/Users/chet/src/bash/src/parse.y"
+#line 645 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.filename = (yyvsp[(3) - (3)].word);
@@ -2488,7 +2488,7 @@ yyreduce:
     break;
 
   case 44:
-#line 651 "/Users/chet/src/bash/src/parse.y"
+#line 651 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 1;
                          redir.dest = 0;
@@ -2497,7 +2497,7 @@ yyreduce:
     break;
 
   case 45:
-#line 657 "/Users/chet/src/bash/src/parse.y"
+#line 657 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.dest = 0;
@@ -2506,7 +2506,7 @@ yyreduce:
     break;
 
   case 46:
-#line 663 "/Users/chet/src/bash/src/parse.y"
+#line 663 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.dest = 0;
@@ -2515,7 +2515,7 @@ yyreduce:
     break;
 
   case 47:
-#line 669 "/Users/chet/src/bash/src/parse.y"
+#line 669 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 0;
                          redir.dest = 0;
@@ -2524,7 +2524,7 @@ yyreduce:
     break;
 
   case 48:
-#line 675 "/Users/chet/src/bash/src/parse.y"
+#line 675 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = (yyvsp[(1) - (3)].number);
                          redir.dest = 0;
@@ -2533,7 +2533,7 @@ yyreduce:
     break;
 
   case 49:
-#line 681 "/Users/chet/src/bash/src/parse.y"
+#line 681 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.filename = (yyvsp[(1) - (3)].word);
                          redir.dest = 0;
@@ -2542,7 +2542,7 @@ yyreduce:
     break;
 
   case 50:
-#line 687 "/Users/chet/src/bash/src/parse.y"
+#line 687 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 1;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2551,7 +2551,7 @@ yyreduce:
     break;
 
   case 51:
-#line 693 "/Users/chet/src/bash/src/parse.y"
+#line 693 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          source.dest = 1;
                          redir.filename = (yyvsp[(2) - (2)].word);
@@ -2560,29 +2560,29 @@ yyreduce:
     break;
 
   case 52:
-#line 701 "/Users/chet/src/bash/src/parse.y"
+#line 701 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
     break;
 
   case 53:
-#line 703 "/Users/chet/src/bash/src/parse.y"
+#line 703 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
     break;
 
   case 54:
-#line 705 "/Users/chet/src/bash/src/parse.y"
+#line 705 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
     break;
 
   case 55:
-#line 709 "/Users/chet/src/bash/src/parse.y"
+#line 709 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
                        }
     break;
 
   case 56:
-#line 713 "/Users/chet/src/bash/src/parse.y"
+#line 713 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          register REDIRECT *t;
 
@@ -2594,27 +2594,27 @@ yyreduce:
     break;
 
   case 57:
-#line 724 "/Users/chet/src/bash/src/parse.y"
+#line 724 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
     break;
 
   case 58:
-#line 726 "/Users/chet/src/bash/src/parse.y"
+#line 726 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
     break;
 
   case 59:
-#line 730 "/Users/chet/src/bash/src/parse.y"
+#line 730 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
     break;
 
   case 60:
-#line 732 "/Users/chet/src/bash/src/parse.y"
+#line 732 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 61:
-#line 734 "/Users/chet/src/bash/src/parse.y"
+#line 734 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          COMMAND *tc;
 
@@ -2633,72 +2633,72 @@ yyreduce:
     break;
 
   case 62:
-#line 750 "/Users/chet/src/bash/src/parse.y"
+#line 750 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 63:
-#line 752 "/Users/chet/src/bash/src/parse.y"
+#line 752 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 64:
-#line 756 "/Users/chet/src/bash/src/parse.y"
+#line 756 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 65:
-#line 758 "/Users/chet/src/bash/src/parse.y"
+#line 758 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 66:
-#line 760 "/Users/chet/src/bash/src/parse.y"
+#line 760 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
     break;
 
   case 67:
-#line 762 "/Users/chet/src/bash/src/parse.y"
+#line 762 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
     break;
 
   case 68:
-#line 764 "/Users/chet/src/bash/src/parse.y"
+#line 764 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 69:
-#line 766 "/Users/chet/src/bash/src/parse.y"
+#line 766 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 70:
-#line 768 "/Users/chet/src/bash/src/parse.y"
+#line 768 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 71:
-#line 770 "/Users/chet/src/bash/src/parse.y"
+#line 770 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 72:
-#line 772 "/Users/chet/src/bash/src/parse.y"
+#line 772 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 73:
-#line 774 "/Users/chet/src/bash/src/parse.y"
+#line 774 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 74:
-#line 776 "/Users/chet/src/bash/src/parse.y"
+#line 776 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 75:
-#line 780 "/Users/chet/src/bash/src/parse.y"
+#line 780 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2706,7 +2706,7 @@ yyreduce:
     break;
 
   case 76:
-#line 785 "/Users/chet/src/bash/src/parse.y"
+#line 785 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2714,7 +2714,7 @@ yyreduce:
     break;
 
   case 77:
-#line 790 "/Users/chet/src/bash/src/parse.y"
+#line 790 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2722,7 +2722,7 @@ yyreduce:
     break;
 
   case 78:
-#line 795 "/Users/chet/src/bash/src/parse.y"
+#line 795 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2730,7 +2730,7 @@ yyreduce:
     break;
 
   case 79:
-#line 800 "/Users/chet/src/bash/src/parse.y"
+#line 800 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2738,7 +2738,7 @@ yyreduce:
     break;
 
   case 80:
-#line 805 "/Users/chet/src/bash/src/parse.y"
+#line 805 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2746,7 +2746,7 @@ yyreduce:
     break;
 
   case 81:
-#line 810 "/Users/chet/src/bash/src/parse.y"
+#line 810 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2754,7 +2754,7 @@ yyreduce:
     break;
 
   case 82:
-#line 815 "/Users/chet/src/bash/src/parse.y"
+#line 815 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2762,7 +2762,7 @@ yyreduce:
     break;
 
   case 83:
-#line 822 "/Users/chet/src/bash/src/parse.y"
+#line 822 "/usr/homes/chet/src/bash/src/parse.y"
     {
                                  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
                                  if (word_top > 0) word_top--;
@@ -2770,7 +2770,7 @@ yyreduce:
     break;
 
   case 84:
-#line 827 "/Users/chet/src/bash/src/parse.y"
+#line 827 "/usr/homes/chet/src/bash/src/parse.y"
     {
                                  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
                                  if (word_top > 0) word_top--;
@@ -2778,7 +2778,7 @@ yyreduce:
     break;
 
   case 85:
-#line 832 "/Users/chet/src/bash/src/parse.y"
+#line 832 "/usr/homes/chet/src/bash/src/parse.y"
     {
                                  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
                                  if (word_top > 0) word_top--;
@@ -2786,7 +2786,7 @@ yyreduce:
     break;
 
   case 86:
-#line 837 "/Users/chet/src/bash/src/parse.y"
+#line 837 "/usr/homes/chet/src/bash/src/parse.y"
     {
                                  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
                                  if (word_top > 0) word_top--;
@@ -2794,7 +2794,7 @@ yyreduce:
     break;
 
   case 87:
-#line 844 "/Users/chet/src/bash/src/parse.y"
+#line 844 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2802,7 +2802,7 @@ yyreduce:
     break;
 
   case 88:
-#line 849 "/Users/chet/src/bash/src/parse.y"
+#line 849 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2810,7 +2810,7 @@ yyreduce:
     break;
 
   case 89:
-#line 854 "/Users/chet/src/bash/src/parse.y"
+#line 854 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2818,7 +2818,7 @@ yyreduce:
     break;
 
   case 90:
-#line 859 "/Users/chet/src/bash/src/parse.y"
+#line 859 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2826,7 +2826,7 @@ yyreduce:
     break;
 
   case 91:
-#line 864 "/Users/chet/src/bash/src/parse.y"
+#line 864 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2834,7 +2834,7 @@ yyreduce:
     break;
 
   case 92:
-#line 869 "/Users/chet/src/bash/src/parse.y"
+#line 869 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2842,7 +2842,7 @@ yyreduce:
     break;
 
   case 93:
-#line 876 "/Users/chet/src/bash/src/parse.y"
+#line 876 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2850,7 +2850,7 @@ yyreduce:
     break;
 
   case 94:
-#line 881 "/Users/chet/src/bash/src/parse.y"
+#line 881 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2858,7 +2858,7 @@ yyreduce:
     break;
 
   case 95:
-#line 886 "/Users/chet/src/bash/src/parse.y"
+#line 886 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -2866,27 +2866,27 @@ yyreduce:
     break;
 
   case 96:
-#line 893 "/Users/chet/src/bash/src/parse.y"
+#line 893 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
     break;
 
   case 97:
-#line 896 "/Users/chet/src/bash/src/parse.y"
+#line 896 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
     break;
 
   case 98:
-#line 899 "/Users/chet/src/bash/src/parse.y"
+#line 899 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
     break;
 
   case 99:
-#line 903 "/Users/chet/src/bash/src/parse.y"
+#line 903 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 100:
-#line 905 "/Users/chet/src/bash/src/parse.y"
+#line 905 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          COMMAND *tc;
 
@@ -2918,7 +2918,7 @@ yyreduce:
     break;
 
   case 101:
-#line 936 "/Users/chet/src/bash/src/parse.y"
+#line 936 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL;
@@ -2926,7 +2926,7 @@ yyreduce:
     break;
 
   case 102:
-#line 943 "/Users/chet/src/bash/src/parse.y"
+#line 943 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
@@ -2934,7 +2934,7 @@ yyreduce:
     break;
 
   case 103:
-#line 948 "/Users/chet/src/bash/src/parse.y"
+#line 948 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          COMMAND *tc;
 
@@ -2954,7 +2954,7 @@ yyreduce:
     break;
 
   case 104:
-#line 965 "/Users/chet/src/bash/src/parse.y"
+#line 965 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
@@ -2962,7 +2962,7 @@ yyreduce:
     break;
 
   case 105:
-#line 970 "/Users/chet/src/bash/src/parse.y"
+#line 970 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          COMMAND *tc;
 
@@ -2982,7 +2982,7 @@ yyreduce:
     break;
 
   case 106:
-#line 987 "/Users/chet/src/bash/src/parse.y"
+#line 987 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
@@ -2990,117 +2990,117 @@ yyreduce:
     break;
 
   case 107:
-#line 994 "/Users/chet/src/bash/src/parse.y"
+#line 994 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
     break;
 
   case 108:
-#line 996 "/Users/chet/src/bash/src/parse.y"
+#line 996 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
     break;
 
   case 109:
-#line 998 "/Users/chet/src/bash/src/parse.y"
+#line 998 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
     break;
 
   case 110:
-#line 1003 "/Users/chet/src/bash/src/parse.y"
+#line 1003 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
     break;
 
   case 111:
-#line 1007 "/Users/chet/src/bash/src/parse.y"
+#line 1007 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
     break;
 
   case 112:
-#line 1011 "/Users/chet/src/bash/src/parse.y"
+#line 1011 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(2) - (3)].command); }
     break;
 
   case 113:
-#line 1015 "/Users/chet/src/bash/src/parse.y"
+#line 1015 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
     break;
 
   case 114:
-#line 1017 "/Users/chet/src/bash/src/parse.y"
+#line 1017 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
     break;
 
   case 115:
-#line 1019 "/Users/chet/src/bash/src/parse.y"
+#line 1019 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
     break;
 
   case 117:
-#line 1024 "/Users/chet/src/bash/src/parse.y"
+#line 1024 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
     break;
 
   case 118:
-#line 1028 "/Users/chet/src/bash/src/parse.y"
+#line 1028 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
     break;
 
   case 119:
-#line 1030 "/Users/chet/src/bash/src/parse.y"
+#line 1030 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
     break;
 
   case 120:
-#line 1032 "/Users/chet/src/bash/src/parse.y"
+#line 1032 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
     break;
 
   case 121:
-#line 1034 "/Users/chet/src/bash/src/parse.y"
+#line 1034 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
     break;
 
   case 122:
-#line 1038 "/Users/chet/src/bash/src/parse.y"
+#line 1038 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
     break;
 
   case 123:
-#line 1040 "/Users/chet/src/bash/src/parse.y"
+#line 1040 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
     break;
 
   case 124:
-#line 1042 "/Users/chet/src/bash/src/parse.y"
+#line 1042 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
     break;
 
   case 125:
-#line 1044 "/Users/chet/src/bash/src/parse.y"
+#line 1044 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
     break;
 
   case 126:
-#line 1046 "/Users/chet/src/bash/src/parse.y"
+#line 1046 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
     break;
 
   case 127:
-#line 1048 "/Users/chet/src/bash/src/parse.y"
+#line 1048 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
     break;
 
   case 128:
-#line 1052 "/Users/chet/src/bash/src/parse.y"
+#line 1052 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
     break;
 
   case 129:
-#line 1054 "/Users/chet/src/bash/src/parse.y"
+#line 1054 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
     break;
 
   case 130:
-#line 1063 "/Users/chet/src/bash/src/parse.y"
+#line 1063 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = (yyvsp[(2) - (2)].command);
                          if (need_here_doc)
@@ -3109,14 +3109,14 @@ yyreduce:
     break;
 
   case 132:
-#line 1072 "/Users/chet/src/bash/src/parse.y"
+#line 1072 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = (yyvsp[(2) - (2)].command);
                        }
     break;
 
   case 134:
-#line 1079 "/Users/chet/src/bash/src/parse.y"
+#line 1079 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          if ((yyvsp[(1) - (3)].command)->type == cm_connection)
                            (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&');
@@ -3126,17 +3126,17 @@ yyreduce:
     break;
 
   case 136:
-#line 1090 "/Users/chet/src/bash/src/parse.y"
+#line 1090 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
     break;
 
   case 137:
-#line 1092 "/Users/chet/src/bash/src/parse.y"
+#line 1092 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
     break;
 
   case 138:
-#line 1094 "/Users/chet/src/bash/src/parse.y"
+#line 1094 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          if ((yyvsp[(1) - (4)].command)->type == cm_connection)
                            (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&');
@@ -3146,37 +3146,37 @@ yyreduce:
     break;
 
   case 139:
-#line 1101 "/Users/chet/src/bash/src/parse.y"
+#line 1101 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
     break;
 
   case 140:
-#line 1103 "/Users/chet/src/bash/src/parse.y"
+#line 1103 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
     break;
 
   case 141:
-#line 1105 "/Users/chet/src/bash/src/parse.y"
+#line 1105 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 144:
-#line 1113 "/Users/chet/src/bash/src/parse.y"
+#line 1113 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.number) = '\n'; }
     break;
 
   case 145:
-#line 1115 "/Users/chet/src/bash/src/parse.y"
+#line 1115 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.number) = ';'; }
     break;
 
   case 146:
-#line 1117 "/Users/chet/src/bash/src/parse.y"
+#line 1117 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.number) = yacc_EOF; }
     break;
 
   case 149:
-#line 1131 "/Users/chet/src/bash/src/parse.y"
+#line 1131 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = (yyvsp[(1) - (1)].command);
                          if (need_here_doc)
@@ -3192,7 +3192,7 @@ yyreduce:
     break;
 
   case 150:
-#line 1144 "/Users/chet/src/bash/src/parse.y"
+#line 1144 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          if ((yyvsp[(1) - (2)].command)->type == cm_connection)
                            (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&');
@@ -3211,7 +3211,7 @@ yyreduce:
     break;
 
   case 151:
-#line 1160 "/Users/chet/src/bash/src/parse.y"
+#line 1160 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          (yyval.command) = (yyvsp[(1) - (2)].command);
                          if (need_here_doc)
@@ -3227,17 +3227,17 @@ yyreduce:
     break;
 
   case 152:
-#line 1175 "/Users/chet/src/bash/src/parse.y"
+#line 1175 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
     break;
 
   case 153:
-#line 1177 "/Users/chet/src/bash/src/parse.y"
+#line 1177 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
     break;
 
   case 154:
-#line 1179 "/Users/chet/src/bash/src/parse.y"
+#line 1179 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          if ((yyvsp[(1) - (3)].command)->type == cm_connection)
                            (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&');
@@ -3247,22 +3247,22 @@ yyreduce:
     break;
 
   case 155:
-#line 1186 "/Users/chet/src/bash/src/parse.y"
+#line 1186 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
     break;
 
   case 156:
-#line 1189 "/Users/chet/src/bash/src/parse.y"
+#line 1189 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 157:
-#line 1193 "/Users/chet/src/bash/src/parse.y"
+#line 1193 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 158:
-#line 1195 "/Users/chet/src/bash/src/parse.y"
+#line 1195 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          if ((yyvsp[(2) - (2)].command))
                            (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN;     /* toggle */
@@ -3271,7 +3271,7 @@ yyreduce:
     break;
 
   case 159:
-#line 1201 "/Users/chet/src/bash/src/parse.y"
+#line 1201 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          if ((yyvsp[(2) - (2)].command))
                            (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number);
@@ -3280,7 +3280,7 @@ yyreduce:
     break;
 
   case 160:
-#line 1207 "/Users/chet/src/bash/src/parse.y"
+#line 1207 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          ELEMENT x;
 
@@ -3300,7 +3300,7 @@ yyreduce:
     break;
 
   case 161:
-#line 1224 "/Users/chet/src/bash/src/parse.y"
+#line 1224 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          ELEMENT x;
 
@@ -3321,12 +3321,12 @@ yyreduce:
     break;
 
   case 162:
-#line 1244 "/Users/chet/src/bash/src/parse.y"
+#line 1244 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
     break;
 
   case 163:
-#line 1246 "/Users/chet/src/bash/src/parse.y"
+#line 1246 "/usr/homes/chet/src/bash/src/parse.y"
     {
                          /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
                          COMMAND *tc;
@@ -3352,22 +3352,22 @@ yyreduce:
     break;
 
   case 164:
-#line 1269 "/Users/chet/src/bash/src/parse.y"
+#line 1269 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.command) = (yyvsp[(1) - (1)].command); }
     break;
 
   case 165:
-#line 1273 "/Users/chet/src/bash/src/parse.y"
+#line 1273 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.number) = CMD_TIME_PIPELINE; }
     break;
 
   case 166:
-#line 1275 "/Users/chet/src/bash/src/parse.y"
+#line 1275 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
     break;
 
   case 167:
-#line 1277 "/Users/chet/src/bash/src/parse.y"
+#line 1277 "/usr/homes/chet/src/bash/src/parse.y"
     { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
     break;
 
@@ -3587,7 +3587,7 @@ yyreturn:
 }
 
 
-#line 1279 "/Users/chet/src/bash/src/parse.y"
+#line 1279 "/usr/homes/chet/src/bash/src/parse.y"
 
 
 /* Initial size to allocate for tokens, and the
@@ -5613,6 +5613,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
         treat single quotes as special when inside a double-quoted
         ${...}. This logic must agree with subst.c:extract_dollar_brace_string
         since they share the same defines. */
+      /* FLAG POSIX INTERP 221 */
       if (flags & P_DOLBRACE)
         {
           /* ${param%[%]word} */
@@ -5623,7 +5624,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
            dolbrace_state = DOLBRACE_QUOTE;
           /* ${param/[/]pat/rep} */
          else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '/' && retind > 1)
-           dolbrace_state = DOLBRACE_QUOTE;
+           dolbrace_state = DOLBRACE_QUOTE2;   /* XXX */
           /* ${param^[^]pat} */
          else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '^' && retind > 1)
            dolbrace_state = DOLBRACE_QUOTE;
@@ -5665,7 +5666,18 @@ parse_matched_pair (qc, open, close, lenp, flags)
                  ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
                  xfree (nestret);
 
-                 if ((rflags & P_DQUOTE) == 0)
+                 /* If we're parsing a double-quoted brace expansion and we are
+                    not in a place where single quotes are treated specially,
+                    make sure we single-quote the results of the ansi
+                    expansion because quote removal should remove them later */
+                 /* FLAG POSIX INTERP 221 */
+                 if ((shell_compatibility_level > 42) && (rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE))
+                   {
+                     nestret = sh_single_quote (ttrans);
+                     free (ttrans);
+                     nestlen = strlen (nestret);
+                   }
+                 else if ((rflags & P_DQUOTE) == 0)
                    {
                      nestret = sh_single_quote (ttrans);
                      free (ttrans);
@@ -7656,9 +7668,13 @@ decode_prompt_string (string)
 #undef ROOT_PATH
 #undef DOUBLE_SLASH_ROOT
                else
-                 /* polite_directory_format is guaranteed to return a string
-                    no longer than PATH_MAX - 1 characters. */
-                 strcpy (t_string, polite_directory_format (t_string));
+                 {
+                   /* polite_directory_format is guaranteed to return a string
+                      no longer than PATH_MAX - 1 characters. */
+                   temp = polite_directory_format (t_string);
+                   if (temp != t_string)
+                     strcpy (t_string, temp);
+                 }
 
                temp = trim_pathname (t_string, PATH_MAX - 1);
                /* If we're going to be expanding the prompt string later,
diff --git a/y.tab.h b/y.tab.h
index d79a07c0d8c3a828c7ddf38d557c271033d1439a..b280e4097a3ef915b59c3eb4b36ec4d939909eb6 100644 (file)
--- a/y.tab.h
+++ b/y.tab.h
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 324 "/Users/chet/src/bash/src/parse.y"
+#line 324 "/usr/homes/chet/src/bash/src/parse.y"
 {
   WORD_DESC *word;             /* the word that we read. */
   int number;                  /* the number that we read. */