From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Tremer To: development@lists.ipfire.org Subject: Re: [PATCH] bash: update to 4.3.30 Date: Sat, 04 Jun 2016 23:03:24 +0100 Message-ID: <1465077804.24121.78.camel@ipfire.org> In-Reply-To: <2b73875c762cb6813df2488787f36f5f@mail01.ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4737956273993460613==" List-Id: --===============4737956273993460613== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable On Fri, 2016-06-03 at 19:04 +0200, Marcel Lorenz wrote: > Am 2016-06-03 17:20, schrieb Michael Tremer: > >=20 > > On Thu, 2016-06-02 at 19:43 +0200, Marcel Lorenz wrote: > > >=20 > > > Old bash patches are removed > > Why? We need those. > ok, for what? The bash-4.3.30-upstream_fixes-3.patch is new... Well, have a look at the patches... Loading bashrc for sessions over SSH and such things... I didn't see that that was replaced by the upstream fixes patch. -Michael >=20 > Marcel > >=20 > >=20 > > >=20 > > >=20 > > > Signed-off-by: Marcel Lorenz > > > --- > > > =C2=A0config/rootfiles/common/bash=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0|=C2=A0=C2=A012 + > > > =C2=A0lfs/bash=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A020 +- > > > =C2=A0src/patches/bash-3.2-ssh_source_bash.patch=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0|=C2=A0=C2=A012 - > > > =C2=A0src/patches/bash-4.0-paths-1.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A011 - > > > =C2=A0src/patches/bash-4.0-profile-1.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A012 - > > > =C2=A0src/patches/bash-4.3.30-upstream_fixes-3.patch | 488 > > > +++++++++++++++++++++++++ > > > =C2=A06 files changed, 505 insertions(+), 50 deletions(-) > > > =C2=A0delete mode 100644 src/patches/bash-3.2-ssh_source_bash.patch > > > =C2=A0delete mode 100644 src/patches/bash-4.0-paths-1.patch > > > =C2=A0delete mode 100644 src/patches/bash-4.0-profile-1.patch > > > =C2=A0create mode 100644 src/patches/bash-4.3.30-upstream_fixes-3.patch > > >=20 > > > diff --git a/config/rootfiles/common/bash=C2=A0 > > > b/config/rootfiles/common/bash > > > index 84f587f..743a71a 100644 > > > --- a/config/rootfiles/common/bash > > > +++ b/config/rootfiles/common/bash > > > @@ -57,3 +57,15 @@ bin/bash > > > =C2=A0#usr/share/locale/zh_TW/LC_MESSAGES/bash.mo > > > =C2=A0#usr/share/man/man1/bash.1 > > > =C2=A0#usr/share/man/man1/bashbug.1 > > > +#usr/share/doc/bash-4.3.30 > > > +#usr/share/doc/bash-4.3.30/CHANGES > > > +#usr/share/doc/bash-4.3.30/COMPAT > > > +#usr/share/doc/bash-4.3.30/FAQ > > > +#usr/share/doc/bash-4.3.30/INTRO > > > +#usr/share/doc/bash-4.3.30/NEWS > > > +#usr/share/doc/bash-4.3.30/POSIX > > > +#usr/share/doc/bash-4.3.30/RBASH > > > +#usr/share/doc/bash-4.3.30/README > > > +#usr/share/doc/bash-4.3.30/bash.html > > > +#usr/share/doc/bash-4.3.30/bashref.html > > > + > > > diff --git a/lfs/bash b/lfs/bash > > > index c215b5a..416b382 100644 > > > --- a/lfs/bash > > > +++ b/lfs/bash > > > @@ -24,7 +24,7 @@ > > > =C2=A0 > > > =C2=A0include Config > > > =C2=A0 > > > -VER=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=3D 4.3 > > > +VER=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=3D 4.3.30 > > > =C2=A0 > > > =C2=A0THISAPP=C2=A0=C2=A0=C2=A0=C2=A0=3D bash-$(VER) > > > =C2=A0DL_FILE=C2=A0=C2=A0=C2=A0=C2=A0=3D $(THISAPP).tar.gz > > > @@ -43,7 +43,8 @@ else > > > =C2=A0endif > > > =C2=A0 > > > =C2=A0CONFIGURE_OPTIONS +=3D \ > > > - --without-bash-malloc > > > + --without-bash-malloc \ > > > + --docdir=3D/usr/share/doc/bash-4.3.30 > > > =C2=A0 > > > =C2=A0#################################################################= ######## > > > #### > > > ## > > > =C2=A0# Top-level Rules > > > @@ -53,7 +54,7 @@ objects =3D $(DL_FILE) > > > =C2=A0 > > > =C2=A0$(DL_FILE)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=3D $(DL_FROM)/$(DL_FILE) > > > =C2=A0 > > > -$(DL_FILE)_MD5=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =3D 81348932d5da294953e15d4814c74dd1 > > > +$(DL_FILE)_MD5=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =3D a27b3ee9be83bd3ba448c0ff52b28447 > > > =C2=A0 > > > =C2=A0install : $(TARGET) > > > =C2=A0 > > > @@ -83,18 +84,7 @@ $(subst %,%_MD5,$(objects)) : > > > =C2=A0$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > > > =C2=A0 @$(PREBUILD) > > > =C2=A0 @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zaxf > > > $(DIR_DL)/$(DL_FILE) > > > - > > > - sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \ > > > - -i $(DIR_APP)/builtins/enable.def > > > - > > > - for i in $$(seq 1 30); do \ > > > - cd $(DIR_APP) && patch -Np0 < > > > $(DIR_SRC)/src/patches/bash/bash43-$$(printf "%03d" "$${i}") || exit=C2= =A0 > > > 1; \ > > > - done > > > - > > > - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0- > > > paths- > > > 1.patch > > > - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0- > > > profile-1.patch > > > - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-3.2- > > > ssh_source_bash.patch > > > - > > > + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.3.30- > > > upstream_fixes-3.patch > > > =C2=A0 cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) > > > =C2=A0 cd $(DIR_APP) && make $(MAKETUNING) > > > =C2=A0 cd $(DIR_APP) && make install > > > diff --git a/src/patches/bash-3.2-ssh_source_bash.patch=C2=A0 > > > b/src/patches/bash- > > > 3.2-ssh_source_bash.patch > > > deleted file mode 100644 > > > index 5bd19ce..0000000 > > > --- a/src/patches/bash-3.2-ssh_source_bash.patch > > > +++ /dev/null > > > @@ -1,12 +0,0 @@ > > > -diff -up bash-4.0/config-top.h.ssh_source_bash bash-4.0/config-top.h > > > ---- bash-4.0/config-top.h.ssh_source_bash 2009-01-21 > > > 15:20:06.000000000 +0100 > > > -+++ bash-4.0/config-top.h 2009-01-21 15:25:46.000000000 +0100 > > > -@@ -90,7 +90,7 @@ > > > -=C2=A0=C2=A0=C2=A0=C2=A0sshd and source the .bashrc if so (like the rs= hd behavior).=C2=A0=C2=A0This=C2=A0 > > > checks > > > -=C2=A0=C2=A0=C2=A0=C2=A0for the presence of SSH_CLIENT or SSH2_CLIENT = in the initial=C2=A0 > > > environment, > > > -=C2=A0=C2=A0=C2=A0=C2=A0which can be fooled under certain not-uncommon= circumstances. */ > > > --/* #define SSH_SOURCE_BASHRC */ > > > -+#define SSH_SOURCE_BASHRC > > > -=C2=A0 > > > - /* Define if you want the case-capitalizing operators (~[~]) and the > > > -=C2=A0=C2=A0=C2=A0=C2=A0`capcase' variable attribute (declare -c). */ > > > diff --git a/src/patches/bash-4.0-paths-1.patch=C2=A0 > > > b/src/patches/bash-4.0-paths- > > > 1.patch > > > deleted file mode 100644 > > > index 24ec5cc..0000000 > > > --- a/src/patches/bash-4.0-paths-1.patch > > > +++ /dev/null > > > @@ -1,11 +0,0 @@ > > > ---- bash-3.0/config-top.h.paths 2003-08-05 15:36:12.000000000 > > > +0100 > > > -+++ bash-3.0/config-top.h 2004-07-28 09:36:27.117205637 +0100 > > > -@@ -66,7 +66,7 @@ > > > -=C2=A0=C2=A0=C2=A0=C2=A0the Posix.2 confstr () function, or CS_PATH de= fine are not=C2=A0 > > > present. */ > > > - #ifndef STANDARD_UTILS_PATH > > > - #define STANDARD_UTILS_PATH \ > > > --=C2=A0=C2=A0"/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc" > > > -+=C2=A0=C2=A0"/bin:/usr/bin:/usr/sbin:/sbin" > > > - #endif > > > -=C2=A0 > > > - /* Default primary and secondary prompt strings. */ > > > diff --git a/src/patches/bash-4.0-profile-1.patch=C2=A0 > > > b/src/patches/bash-4.0- > > > profile-1.patch > > > deleted file mode 100644 > > > index ba3344b..0000000 > > > --- a/src/patches/bash-4.0-profile-1.patch > > > +++ /dev/null > > > @@ -1,12 +0,0 @@ > > > -diff -up bash-3.2/config-top.h.profile bash-3.2/config-top.h > > > ---- bash-3.2/config-top.h.profile 2008-07-17 13:35:39.000000000 > > > +0200 > > > -+++ bash-3.2/config-top.h 2008-07-17 13:42:18.000000000 +0200 > > > -@@ -26,6 +26,8 @@ > > > -=C2=A0=C2=A0=C2=A0=C2=A0what POSIX.2 specifies. */ > > > - #define CONTINUE_AFTER_KILL_ERROR > > > -=C2=A0 > > > -+#define NON_INTERACTIVE_LOGIN_SHELLS > > > -+ > > > - /* Define BREAK_COMPLAINS if you want the non-standard, but useful > > > -=C2=A0=C2=A0=C2=A0=C2=A0error messages about `break' and `continue' ou= t of context. */ > > > - #define BREAK_COMPLAINS > > > diff --git a/src/patches/bash-4.3.30-upstream_fixes-3.patch > > > b/src/patches/bash-4.3.30-upstream_fixes-3.patch > > > new file mode 100644 > > > index 0000000..459ce26 > > > --- /dev/null > > > +++ b/src/patches/bash-4.3.30-upstream_fixes-3.patch > > > @@ -0,0 +1,488 @@ > > > +Submitted By:=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0Armin K. > > > +Date:=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A02016-02-16 > > > +Initial Package Version: 4.3 > > > +Upstream Status:=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= Already in upstream patch repo > > > +Origin:=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Upstream > > > +Description:=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0This patch contains upstream patch numbers=C2=A0 > > > 031 thru > > > 042 > > > + > > > +--- a/arrayfunc.c 2014-10-01 18:57:35.000000000 +0200 > > > ++++ b/arrayfunc.c 2015-09-06 22:57:56.328941059 +0200 > > > +@@ -404,6 +404,9 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(*var->assign_func) (var, l-= >word->word, i, 0); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0array_insert (a, i, l->word-= >word); > > > ++ > > > ++=C2=A0=C2=A0VUNSETATTR (var, att_invisible); /* no longer invisible */ > > > ++ > > > +=C2=A0=C2=A0=C2=A0return var; > > > + } > > > +=C2=A0 > > > +@@ -634,6 +637,10 @@ > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0if (nlist) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0dispose_words (nlist); > > > ++ > > > ++=C2=A0=C2=A0if (var) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0VUNSETATTR (var, att_invisible); /* no longer= invisible */ > > > ++ > > > +=C2=A0=C2=A0=C2=A0return (var); > > > + } > > > +=C2=A0 > > > +--- a/assoc.c 2011-11-05 21:39:05.000000000 +0100 > > > ++++ b/assoc.c 2015-09-06 22:57:56.328941059 +0200 > > > +@@ -436,6 +436,8 @@ > > > + #if 1 > > > +=C2=A0 if (sh_contains_shell_metas (tlist->key)) > > > +=C2=A0 =C2=A0=C2=A0istr =3D sh_double_quote (tlist->key); > > > ++ else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] =3D=3D > > > '\0') > > > ++ =C2=A0=C2=A0istr =3D sh_double_quote (tlist->key); > > > +=C2=A0 else > > > +=C2=A0 =C2=A0=C2=A0istr =3D tlist->key; > > > + #else > > > +--- a/bashline.c 2014-10-01 18:57:30.000000000 +0200 > > > ++++ b/bashline.c 2015-09-06 22:58:34.711768943 +0200 > > > +@@ -202,6 +202,7 @@ > > > + extern int last_command_exit_value; > > > + extern int array_needs_making; > > > + extern int posixly_correct, no_symbolic_links; > > > ++extern int sigalrm_seen; > > > + extern char *current_prompt_string, *ps1_prompt; > > > + extern STRING_INT_ALIST word_token_alist[]; > > > + extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin; > > > +@@ -1467,10 +1468,23 @@ > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0os =3D start; > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0n =3D 0; > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0was_assignment =3D 0; > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0s =3D find_cmd_start (os); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0e =3D find_cmd_end (end); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0do > > > +=C2=A0 { > > > ++ =C2=A0=C2=A0/* Don't read past the end of rl_line_buffer */ > > > ++ =C2=A0=C2=A0if (s > rl_end) > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0{ > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0s1 =3D s =3D e1; > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0break; > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0} > > > ++ =C2=A0=C2=A0/* Or past point if point is within an assignment statem= ent */ > > > ++ =C2=A0=C2=A0else if (was_assignment && s > rl_point) > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0{ > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0s1 =3D s =3D e1; > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0break; > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0 =C2=A0=C2=A0/* Skip over assignment statements preceding a comm= and > > > name.=C2=A0=C2=A0If > > > we > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0don't find a command name at all,= we can perform command > > > name > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0completion.=C2=A0=C2=A0If we find= a partial command name, we should > > > perform > > > +@@ -4208,8 +4222,9 @@ > > > + { > > > +=C2=A0=C2=A0=C2=A0/* If we're going to longjmp to top_level, make sure= we clean up=C2=A0 > > > readline. > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0check_signals will call QUIT, whic= h will eventually longjmp to > > > top_level, > > > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0calling run_interrupt_trap along the wa= y. */ > > > +-=C2=A0=C2=A0if (interrupt_state) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0calling run_interrupt_trap along the wa= y.=C2=A0=C2=A0The check for=C2=A0 > > > sigalrm_seen > > > is > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0to clean up the read builtin's state. */ > > > ++=C2=A0=C2=A0if (terminating_signal || interrupt_state || sigalrm_seen) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0rl_cleanup_after_signal (); > > > +=C2=A0=C2=A0=C2=A0bashline_reset_event_hook (); > > > +=C2=A0=C2=A0=C2=A0check_signals_and_traps (); /* XXX */ > > > +--- a/builtins/common.h 2014-10-01 18:57:47.000000000 +0200 > > > ++++ b/builtins/common.h 2015-09-06 22:57:56.330941103 +0200 > > > +@@ -122,6 +122,10 @@ > > > + /* Functions from getopts.def */ > > > + extern void getopts_reset __P((int)); > > > +=C2=A0 > > > ++/* Functions from read.def */ > > > ++extern void read_tty_cleanup __P((void)); > > > ++extern int read_tty_modified __P((void)); > > > ++ > > > + /* Functions from set.def */ > > > + extern int minus_o_option_value __P((char *)); > > > + extern void list_minus_o_opts __P((int, int)); > > > +--- a/builtins/read.def 2014-10-01 18:57:38.000000000 +0200 > > > ++++ b/builtins/read.def 2015-09-06 22:57:56.335941212 +0200 > > > +@@ -140,10 +140,12 @@ > > > + procenv_t alrmbuf; > > > + int sigalrm_seen; > > > +=C2=A0 > > > +-static int reading; > > > ++static int reading, tty_modified; > > > + static SigHandler *old_alrm; > > > + static unsigned char delim; > > > +=C2=A0 > > > ++static struct ttsave termsave; > > > ++ > > > + /* In all cases, SIGALRM just sets a flag that we check=C2=A0 > > > periodically.=C2=A0=C2=A0This > > > +=C2=A0=C2=A0=C2=A0=C2=A0avoids problems with the semi-tricky stuff we = do with the xfree=C2=A0 > > > of > > > +=C2=A0=C2=A0=C2=A0=C2=A0input_string at the top of the unwind-protect = list (see below).=C2=A0 > > > */ > > > +@@ -188,7 +190,6 @@ > > > +=C2=A0=C2=A0=C2=A0struct stat tsb; > > > +=C2=A0=C2=A0=C2=A0SHELL_VAR *var; > > > +=C2=A0=C2=A0=C2=A0TTYSTRUCT ttattrs, ttset; > > > +-=C2=A0=C2=A0struct ttsave termsave; > > > + #if defined (ARRAY_VARS) > > > +=C2=A0=C2=A0=C2=A0WORD_LIST *alist; > > > + #endif > > > +@@ -221,7 +222,7 @@ > > > +=C2=A0=C2=A0=C2=A0USE_VAR(ps2); > > > +=C2=A0=C2=A0=C2=A0USE_VAR(lastsig); > > > +=C2=A0 > > > +-=C2=A0=C2=A0sigalrm_seen =3D reading =3D 0; > > > ++=C2=A0=C2=A0sigalrm_seen =3D reading =3D tty_modified =3D 0; > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0i =3D 0; /* Index into the string that we are readi= ng. */ > > > +=C2=A0=C2=A0=C2=A0raw =3D edit =3D 0; /* Not reading raw input by defa= ult. */ > > > +@@ -438,6 +439,8 @@ > > > +=C2=A0 =C2=A0=C2=A0retval =3D 128+SIGALRM; > > > +=C2=A0 =C2=A0=C2=A0goto assign_vars; > > > +=C2=A0 } > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (interactive_shell =3D=3D 0) > > > ++ initialize_terminating_signals (); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0old_alrm =3D set_signal_hand= ler (SIGALRM, sigalrm); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0add_unwind_protect (reset_al= arm, (char *)NULL); > > > + #if defined (READLINE) > > > +@@ -482,7 +485,10 @@ > > > +=C2=A0 =C2=A0=C2=A0i =3D silent ? ttfd_cbreak (fd, &ttset) : ttfd_onec= har (fd,=C2=A0 > > > &ttset); > > > +=C2=A0 =C2=A0=C2=A0if (i < 0) > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0sh_ttyerror (1); > > > ++ =C2=A0=C2=A0tty_modified =3D 1; > > > +=C2=A0 =C2=A0=C2=A0add_unwind_protect ((Function *)ttyrestore, (char > > > *)&termsave); > > > ++ =C2=A0=C2=A0if (interactive_shell =3D=3D 0) > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0initialize_terminating_signals (); > > > +=C2=A0 } > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0=C2=A0=C2=A0else if (silent) /* turn off echo but leave term in = canonical > > > mode > > > */ > > > +@@ -497,7 +503,10 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (i < 0) > > > +=C2=A0 sh_ttyerror (1); > > > +=C2=A0 > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0tty_modified =3D 1; > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0add_unwind_protect ((Functio= n *)ttyrestore, (char=C2=A0 > > > *)&termsave); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (interactive_shell =3D=3D 0) > > > ++ initialize_terminating_signals (); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0/* This *must* be the top unwind-protect on the stac= k, so the=C2=A0 > > > manipulation > > > +@@ -588,6 +597,8 @@ > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0 =C2=A0=C2=A0else > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0lastsig =3D 0; > > > ++ =C2=A0=C2=A0if (terminating_signal && tty_modified) > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0ttyrestore (&termsave); /* fix terminal befo= re > > > exiting */ > > > +=C2=A0 =C2=A0=C2=A0CHECK_TERMSIG; > > > +=C2=A0 =C2=A0=C2=A0eof =3D 1; > > > +=C2=A0 =C2=A0=C2=A0break; > > > +@@ -978,6 +989,20 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0struct ttsave *ttp; > > > + { > > > +=C2=A0=C2=A0=C2=A0ttsetattr (ttp->fd, ttp->attrs); > > > ++=C2=A0=C2=A0tty_modified =3D 0; > > > ++} > > > ++ > > > ++void > > > ++read_tty_cleanup () > > > ++{ > > > ++=C2=A0=C2=A0if (tty_modified) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0ttyrestore (&termsave); > > > ++} > > > ++ > > > ++int > > > ++read_tty_modified () > > > ++{ > > > ++=C2=A0=C2=A0return (tty_modified); > > > + } > > > +=C2=A0 > > > + #if defined (READLINE) > > > +--- a/builtins/set.def 2013-04-19 13:20:34.000000000 +0200 > > > ++++ b/builtins/set.def 2015-09-06 22:57:56.336941234 +0200 > > > +@@ -751,9 +751,11 @@ > > > +=C2=A0=C2=A0=C2=A0WORD_LIST *list; > > > + { > > > +=C2=A0=C2=A0=C2=A0int unset_function, unset_variable, unset_array, opt= , nameref,=C2=A0 > > > any_failed; > > > ++=C2=A0=C2=A0int global_unset_func, global_unset_var; > > > +=C2=A0=C2=A0=C2=A0char *name; > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0unset_function =3D unset_variable =3D unset_array = =3D nameref =3D=C2=A0 > > > any_failed =3D 0; > > > ++=C2=A0=C2=A0global_unset_func =3D global_unset_var =3D 0; > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0reset_internal_getopt (); > > > +=C2=A0=C2=A0=C2=A0while ((opt =3D internal_getopt (list, "fnv")) !=3D = -1) > > > +@@ -761,10 +763,10 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0switch (opt) > > > +=C2=A0 { > > > +=C2=A0 case 'f': > > > +- =C2=A0=C2=A0unset_function =3D 1; > > > ++ =C2=A0=C2=A0global_unset_func =3D 1; > > > +=C2=A0 =C2=A0=C2=A0break; > > > +=C2=A0 case 'v': > > > +- =C2=A0=C2=A0unset_variable =3D 1; > > > ++ =C2=A0=C2=A0global_unset_var =3D 1; > > > +=C2=A0 =C2=A0=C2=A0break; > > > +=C2=A0 case 'n': > > > +=C2=A0 =C2=A0=C2=A0nameref =3D 1; > > > +@@ -777,7 +779,7 @@ > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0list =3D loptend; > > > +=C2=A0 > > > +-=C2=A0=C2=A0if (unset_function && unset_variable) > > > ++=C2=A0=C2=A0if (global_unset_func && global_unset_var) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0builtin_error (_("cannot sim= ultaneously unset a function and a > > > variable")); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return (EXECUTION_FAILURE); > > > +@@ -795,6 +797,9 @@ > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0name =3D list->word->word; > > > +=C2=A0 > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0unset_function =3D global_unset_f= unc; > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0unset_variable =3D global_unset_v= ar; > > > ++ > > > + #if defined (ARRAY_VARS) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0unset_array =3D 0; > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!unset_function && valid= _array_reference (name)) > > > +--- a/jobs.c 2014-10-01 18:57:26.000000000 +0200 > > > ++++ b/jobs.c 2015-09-06 22:57:56.340941321 +0200 > > > +@@ -3339,7 +3339,9 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (posixly_correct && this_= shell_builtin &&=C2=A0 > > > this_shell_builtin =3D=3D > > > wait_builtin) > > > +=C2=A0 { > > > +=C2=A0 =C2=A0=C2=A0interrupt_immediately =3D 0; > > > +- =C2=A0=C2=A0trap_handler (SIGCHLD); /* set pending_traps[SIGCHLD] > > > */ > > > ++ =C2=A0=C2=A0/* This was trap_handler (SIGCHLD) but that can lose tra= ps if > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0children_exited > 1 */ > > > ++ =C2=A0=C2=A0queue_sigchld_trap (children_exited); > > > +=C2=A0 =C2=A0=C2=A0wait_signal_received =3D SIGCHLD; > > > +=C2=A0 =C2=A0=C2=A0/* If we're in a signal handler, let CHECK_WAIT_INT= R pick it > > > up; > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0run_pending_traps will call run_s= igchld_trap later=C2=A0=C2=A0*/ > > > +--- a/lib/readline/complete.c 2013-10-14 15:27:10.000000000 +0200 > > > ++++ b/lib/readline/complete.c 2015-09-06 22:58:34.712768964 +0200 > > > +@@ -689,6 +689,8 @@ > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0if (temp =3D=3D 0 || *temp =3D=3D '\0') > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return (pathname); > > > ++=C2=A0=C2=A0else if (temp[1] =3D=3D 0 && temp =3D=3D pathname) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0return (pathname); > > > +=C2=A0=C2=A0=C2=A0/* If the basename is NULL, we might have a pathname= like=C2=A0 > > > '/usr/src/'. > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Look for a previous slash and, if = one is found, return the=C2=A0 > > > portion > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0following that slash.=C2=A0=C2=A0I= f there's no previous slash, just=C2=A0 > > > return the > > > +--- a/lib/sh/unicode.c 2014-01-30 22:47:19.000000000 +0100 > > > ++++ b/lib/sh/unicode.c 2015-09-06 22:57:56.341941343 +0200 > > > +@@ -78,13 +78,15 @@ > > > +=C2=A0=C2=A0=C2=A0s =3D strrchr (locale, '.'); > > > +=C2=A0=C2=A0=C2=A0if (s) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > > > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0strcpy (charsetbuf, s+1); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0strncpy (charsetbuf, s+1, sizeof = (charsetbuf) - 1); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0charsetbuf[sizeof (charsetbuf) - = 1] =3D '\0'; > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0t =3D strchr (charsetbuf, '@= '); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (t) > > > +=C2=A0 *t =3D 0; > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return charsetbuf; > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > > > +-=C2=A0=C2=A0strcpy (charsetbuf, locale); > > > ++=C2=A0=C2=A0strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1); > > > ++=C2=A0=C2=A0charsetbuf[sizeof (charsetbuf) - 1] =3D '\0'; > > > +=C2=A0=C2=A0=C2=A0return charsetbuf; > > > + } > > > + #endif > > > +--- a/parse.y 2014-10-05 19:52:50.000000000 +0200 > > > ++++ b/parse.y 2015-09-06 22:58:35.245780313 +0200 > > > +@@ -2818,11 +2818,16 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case AND_AND: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case OR_OR: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case '&': > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case WHILE: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case DO: > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case UNTIL: > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case IF: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case THEN: > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case ELIF: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case ELSE: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case '{': /* } */ > > > +-=C2=A0=C2=A0=C2=A0=C2=A0case '(': /* ) */ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case '(': /* )( */ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case ')': /* only valid in case statement */ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case BANG: /* ! time pipeline */ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case TIME: /* time time pipeline */ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case TIMEOPT: /* time -p time pipeline */ > > > +@@ -3703,6 +3708,8 @@ > > > + /*itrace("parse_comsub:%d: lex_inword -> 1 ch =3D `%c' (%d)",=C2=A0 > > > line_number, ch, > > > __LINE__);*/ > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0tflags |=3D LEX_INWORD; > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0lex_wlen =3D 0; > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (tflags & LEX_RESWDOK) > > > ++ lex_rwlen =3D 0; > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0 } > > > +=C2=A0 > > > +--- a/patchlevel.h 2014-10-05 19:52:50.000000000 +0200 > > > ++++ b/patchlevel.h 2015-09-06 22:58:35.248780377 +0200 > > > +@@ -25,6 +25,6 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0regexp `^#define[=C2=A0 ]*PATCHLEVEL', since t= hat's what > > > support/mkversion.sh > > > +=C2=A0=C2=A0=C2=A0=C2=A0looks for to find the patch level (for the scc= s version string).=C2=A0 > > > */ > > > +=C2=A0 > > > +-#define PATCHLEVEL 30 > > > ++#define PATCHLEVEL 42 > > > +=C2=A0 > > > + #endif /* _PATCHLEVEL_H_ */ > > > +--- a/shell.c 2014-01-14 14:04:32.000000000 +0100 > > > ++++ b/shell.c 2015-09-06 22:57:56.343941387 +0200 > > > +@@ -73,6 +73,7 @@ > > > + #endif > > > +=C2=A0 > > > + #if defined (READLINE) > > > ++#=C2=A0=C2=A0include > > > + #=C2=A0=C2=A0include "bashline.h" > > > + #endif > > > +=C2=A0 > > > +@@ -909,6 +910,14 @@ > > > +=C2=A0=C2=A0=C2=A0fflush (stdout); /* XXX */ > > > +=C2=A0=C2=A0=C2=A0fflush (stderr); > > > +=C2=A0 > > > ++=C2=A0=C2=A0/* Clean up the terminal if we are in a state where it's = been=C2=A0 > > > modified. */ > > > ++#if defined (READLINE) > > > ++=C2=A0=C2=A0if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_f= unction) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0(*rl_deprep_term_function) (); > > > ++#endif > > > ++=C2=A0=C2=A0if (read_tty_modified ()) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0read_tty_cleanup (); > > > ++ > > > +=C2=A0=C2=A0=C2=A0/* Do trap[0] if defined.=C2=A0=C2=A0Allow it to ove= rride the exit status > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0passed to us. */ > > > +=C2=A0=C2=A0=C2=A0if (signal_is_trapped (0)) > > > +--- a/sig.c 2014-01-10 21:06:06.000000000 +0100 > > > ++++ b/sig.c 2015-09-06 22:57:56.344941408 +0200 > > > +@@ -532,8 +532,10 @@ > > > + #if defined (READLINE) > > > +=C2=A0=C2=A0=C2=A0/* Set the event hook so readline will call it after= the signal=C2=A0 > > > handlers > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0finish executing, so if this inter= rupted character input we can=C2=A0 > > > get > > > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0quick response. */ > > > +-=C2=A0=C2=A0if (interactive_shell && interactive && no_line_editing = =3D=3D 0) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0quick response.=C2=A0=C2=A0If readline = is active or has modified the=C2=A0 > > > terminal we > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0need to set this no matter what the sig= nal is, though the check=C2=A0 > > > for > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0RL_STATE_TERMPREPPED is possibly redund= ant. */ > > > ++=C2=A0=C2=A0if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE=C2=A0 > > > (RL_STATE_TERMPREPPED)) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bashline_set_event_hook (); > > > + #endif > > > +=C2=A0 > > > +--- a/subst.c 2014-10-01 18:57:47.000000000 +0200 > > > ++++ b/subst.c 2015-09-06 22:58:34.177757570 +0200 > > > +@@ -5782,7 +5782,7 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* XXX - does this leak if n= ame[@] or name[*]? */ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (pflags & PF_ASSIGNRHS) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > > > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0temp =3D = array_variable_name (name, &tt, (int *)0); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0var =3D a= rray_variable_part (name, &tt, (int *)0); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (= ALL_ELEMENT_SUB (tt[0]) && tt[1] =3D=3D ']') > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0temp =3D array_value (name, quoted|Q_DO= UBLE_QUOTES, 0, &atype, > > > &ind); > > > +=C2=A0 =C2=A0=C2=A0else > > > +--- a/subst.h 2014-10-01 18:57:43.000000000 +0200 > > > ++++ b/subst.h 2015-09-06 22:57:56.344941408 +0200 > > > +@@ -47,6 +47,7 @@ > > > + #define ASS_MKASSOC 0x0004 > > > + #define ASS_MKGLOBAL 0x0008 /* force global assignment */ > > > + #define ASS_NAMEREF 0x0010 /* assigning to nameref > > > variable */ > > > ++#define ASS_FROMREF 0x0020 /* assigning from value of > > > nameref > > > variable */ > > > +=C2=A0 > > > + /* Flags for the string extraction functions. */ > > > + #define SX_NOALLOC 0x0001 /* just skip; don't return > > > substring > > > */ > > > +--- a/variables.c 2014-10-01 18:57:51.000000000 +0200 > > > ++++ b/variables.c 2015-09-06 22:57:56.345941430 +0200 > > > +@@ -2516,10 +2516,27 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0HASH_TABLE *table; > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int hflags, aflags; > > > + { > > > +-=C2=A0=C2=A0char *newval; > > > ++=C2=A0=C2=A0char *newname, *newval; > > > +=C2=A0=C2=A0=C2=A0SHELL_VAR *entry; > > > ++#if defined (ARRAY_VARS) > > > ++=C2=A0=C2=A0arrayind_t ind; > > > ++=C2=A0=C2=A0char *subp; > > > ++=C2=A0=C2=A0int sublen; > > > ++#endif > > > +=C2=A0 > > > ++=C2=A0=C2=A0newname =3D 0; > > > ++#if defined (ARRAY_VARS) > > > ++=C2=A0=C2=A0if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) =3D= =3D 0 && > > > valid_array_reference (name)) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0{ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0newname =3D array_variable_name (= name, &subp, &sublen); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (newname =3D=3D 0) > > > ++ return (SHELL_VAR *)NULL; /* XXX */ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0entry =3D hash_lookup (newname, t= able); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0} > > > ++=C2=A0=C2=A0else > > > ++#endif > > > +=C2=A0=C2=A0=C2=A0entry =3D (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL= : hash_lookup=C2=A0 > > > (name, > > > table); > > > ++ > > > +=C2=A0=C2=A0=C2=A0/* Follow the nameref chain here if this is the glob= al variables=C2=A0 > > > table */ > > > +=C2=A0=C2=A0=C2=A0if (entry && nameref_p (entry) && (invisible_p (entr= y) =3D=3D 0) &&=C2=A0 > > > table =3D=3D > > > global_variables->table) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > > > +@@ -2550,6 +2567,16 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0var_setvalue (entry, make_va= riable_value (entry, value, 0)); > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > > > ++#if defined (ARRAY_VARS) > > > ++=C2=A0=C2=A0else if (entry =3D=3D 0 && newname) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0{ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0entry =3D make_new_array_variable= (newname); /* indexed array > > > by > > > default */ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (entry =3D=3D 0) > > > ++ return entry; > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0ind =3D array_expand_index (name,= subp, sublen); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bind_array_element (entry, ind, v= alue, aflags); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0} > > > ++#endif > > > +=C2=A0=C2=A0=C2=A0else if (entry =3D=3D 0) > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0entry =3D make_new_variable = (name, table); > > > +@@ -2670,7 +2697,8 @@ > > > +=C2=A0 =C2=A0normal. */ > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (nameref_cell (nv) =3D= =3D 0) > > > +=C2=A0 return (bind_variable_internal (nv->name, value, > > > nvc->table, 0, flags)); > > > +- =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return (bind_variable_internal = (nameref_cell (nv), > > > value, nvc->table, 0, flags)); > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* XXX - bug here with ref=3Dar= ray[index] */ > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return (bind_variable_internal = (nameref_cell (nv), > > > value, nvc->table, 0, flags|ASS_FROMREF)); > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0 =C2=A0=C2=A0else > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0v =3D nv; > > > +@@ -2805,10 +2833,12 @@ > > > + #endif > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v =3D bind_variable (lhs, rhs, 0); > > > +=C2=A0 > > > +-=C2=A0=C2=A0if (v && isint) > > > +-=C2=A0=C2=A0=C2=A0=C2=A0VSETATTR (v, att_integer); > > > +- > > > +-=C2=A0=C2=A0VUNSETATTR (v, att_invisible); > > > ++=C2=A0=C2=A0if (v) > > > ++=C2=A0=C2=A0=C2=A0=C2=A0{ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (isint) > > > ++ VSETATTR (v, att_integer); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0VUNSETATTR (v, att_invisible); > > > ++=C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0 > > > +=C2=A0=C2=A0=C2=A0return (v); > > > + } > > > +--- a/y.tab.c 2014-10-05 19:52:50.000000000 +0200 > > > ++++ b/y.tab.c 2015-09-06 22:58:35.247780356 +0200 > > > +@@ -5130,11 +5130,16 @@ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case AND_AND: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case OR_OR: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case '&': > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case WHILE: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case DO: > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case UNTIL: > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case IF: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case THEN: > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case ELIF: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case ELSE: > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case '{': /* } */ > > > +-=C2=A0=C2=A0=C2=A0=C2=A0case '(': /* ) */ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case '(': /* )( */ > > > ++=C2=A0=C2=A0=C2=A0=C2=A0case ')': /* only valid in case statement */ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case BANG: /* ! time pipeline */ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case TIME: /* time time pipeline */ > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case TIMEOPT: /* time -p time pipeline */ > > > +@@ -6015,6 +6020,8 @@ > > > + /*itrace("parse_comsub:%d: lex_inword -> 1 ch =3D `%c' (%d)",=C2=A0 > > > line_number, ch, > > > __LINE__);*/ > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0tflags |=3D LEX_INWORD; > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0lex_wlen =3D 0; > > > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (tflags & LEX_RESWDOK) > > > ++ lex_rwlen =3D 0; > > > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0} > > > +=C2=A0 } > > > +=C2=A0 --===============4737956273993460613== Content-Type: application/pgp-signature Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="signature.asc" MIME-Version: 1.0 LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KVmVyc2lvbjogR251UEcgdjIKCmlRSWNCQUFC Q2dBR0JRSlhVMUFzQUFvSkVJQjU4UDl2a0FrSGl2d1AvMjdJbVhlc2YzcFZXRWk4MVg5OVUxc0QK bnRRYURwZkVpb2VlMC9UL0txajd4WjZqb3hJTkdJNDlhSmt2UHRxZmd5ejhaSzFRT3RTK3FEbEgz NHBHTm52TApvd0g4ZlA4TUpEdXhKSGp6UklXL1lEY0dWZlNUbVFyUU4ycnJIMkRPKzJscGc1M1RQ ckUzMGVBOGhCY1ZrZG44CkRudnphOU9EclNtSlFWRS91OW5yMzUyUHhrUWNZQUxYbEtGSCtTVFZS TlVoNGRTMVZ2WW1PWmhzbWhGbTUyVTEKcGxmNzF6MEtSWS8vc2pTdnQwRG8rekZuYjhhVVlaMlQ5 OVFQQ054S2JPVjBTT3ZZbmlmSzk2Z3FYajZDNDlPMwo2eXVpR1RQZ1oxM2o0UkpyNkczcytGMm1k UW5UaU5mUnNrbFZJQUE1bUZDSThHRnFBMmMrR0VXcjZ0dVZ1SkZYCldyRDlISmFlTkFFWUxORVg0 N3BwdDdoNkJBcThiNElGZFVycmpwL3h4VlNOazd5TkFTekU3dzFpMTB6bUhucEQKRVN1V3JxbkdK dVRBOUdrWXFGQjJrRHpZRHVMWnozQWwvL2JUb2MzVkRjampJY0d4cDdLSTM4QjYvUjN6OG9sdQps MHlabDlrYVNMZXo4TXo3N2kycTlubVdDdWV0TXdCdDE3MGN4eWRsQUpjSGk0MjJ6dHMxNkxPTFdX K1c4VU1CCkZwZGFqQjNsejdXRmZnMmthQ1R5Q0xTeFAySnUyTU0reGJJSFVTYlJPZmdhOVkyR1Y1 SHd6Z0l4V1ZVS0o5aHoKVUkwMVd5ZlFrZjlRMVlieHNEbTMyZEc2QjRjWks1dkVNUklrQnZKa0d2 U3BUYUZMcjI2Q01HVlJDd3NWZ0cxMAp3T2FTbHlXVis2T21VUkNpQ2FJZAo9cUloaQotLS0tLUVO RCBQR1AgU0lHTkFUVVJFLS0tLS0K --===============4737956273993460613==--