summaryrefslogtreecommitdiffhomepage
path: root/patches
diff options
context:
space:
mode:
Diffstat (limited to 'patches')
-rw-r--r--patches/Python-3.5.1.local.patch180
-rw-r--r--patches/apk-tools-2.6.6.local.patch55
-rw-r--r--patches/bash-4.3.local.patch7885
-rw-r--r--patches/binutils-2.24.51.local.patch739
-rw-r--r--patches/coreutils-8.23.local.patch59
-rw-r--r--patches/curl-7.47.1.local.patch41
-rw-r--r--patches/findutils-4.5.14.local.patch27
-rw-r--r--patches/glib-2.46.2.local.patch170
-rw-r--r--patches/gmp-5.1.3.local.patch22
-rw-r--r--patches/gnupg-2.1.15.local.patch105
-rw-r--r--patches/hexcurse.local.patch20
-rw-r--r--patches/htop-2.0.1.local.patch11
-rw-r--r--patches/irssi-0.8.18.local.patch103
-rw-r--r--patches/john-1.8.0.local.patch155
-rw-r--r--patches/libarchive-3.1.2.local.patch139
-rw-r--r--patches/libassuan-2.4.3.local.patch192
-rw-r--r--patches/libelf-0.8.13.local.patch39
-rw-r--r--patches/libevent-2.0.22-stable.local.patch11
-rw-r--r--patches/libfetch-2.33.local.patch149
-rw-r--r--patches/libffi-3.2.1.local.patch198
-rw-r--r--patches/libgcrypt-1.7.3.local.patch172
-rw-r--r--patches/libgpg-error-1.24.local.patch56
-rw-r--r--patches/libksba-1.3.5.local.patch160
-rw-r--r--patches/libressl-2.2.6.local.patch193
-rw-r--r--patches/lua-5.3.3.local.patch128
-rw-r--r--patches/mc-4.8.17.local.patch20
-rw-r--r--patches/nc110.local.patch56
-rw-r--r--patches/ncurses-6.0.local.patch33
-rw-r--r--patches/p7zip.local.patch14
-rw-r--r--patches/pacman-5.0.1.local.patch44
-rw-r--r--patches/pkg-cron.git.local.patch22
-rw-r--r--patches/tcsh-6.19.00.local.patch201
-rw-r--r--patches/tmux-2.2.local.patch51
-rw-r--r--patches/unzip60.local.patch14
-rw-r--r--patches/vim-7.4.1952.local.patch56
-rw-r--r--patches/weechat-1.6.local.patch45
-rw-r--r--patches/zip30.local.patch16
37 files changed, 11581 insertions, 0 deletions
diff --git a/patches/Python-3.5.1.local.patch b/patches/Python-3.5.1.local.patch
new file mode 100644
index 00000000..b96f19e7
--- /dev/null
+++ b/patches/Python-3.5.1.local.patch
@@ -0,0 +1,180 @@
+--- Python-3.5.1/configure.ac.orig 2015-12-07 01:39:11.000000000 +0000
++++ Python-3.5.1/configure.ac 2016-04-23 12:49:17.142936229 +0000
+@@ -58,6 +58,15 @@
+
+ if test "$cross_compiling" = yes; then
+ AC_MSG_CHECKING([for python interpreter for cross build])
++ AC_MSG_CHECKING(python for build)
++ PYTHON_FOR_BUILD="${PYTHON_FOR_BUILD:-${PWD}/hostpython}"
++ AC_MSG_RESULT($PYTHON_FOR_BUILD)
++ AC_MSG_CHECKING(pgen for build)
++ PGEN_FOR_BUILD="${PGEN_FOR_BUILD:-Parser/hostpgen}"
++ AC_MSG_RESULT($PGEN_FOR_BUILD)
++ AC_MSG_CHECKING(_freeze_importlib for build)
++ _FIP_FOR_BUILD="${_FIP_FOR_BUILD:-Programs/host_freeze_importlib}"
++ AC_MSG_RESULT($_FIP_FOR_BUILD)
+ if test -z "$PYTHON_FOR_BUILD"; then
+ for interp in python$PACKAGE_VERSION python3 python; do
+ which $interp >/dev/null 2>&1 || continue
+@@ -75,9 +84,16 @@
+ elif test "$cross_compiling" = maybe; then
+ AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])
+ else
+- PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E'
++ PYTHON_FOR_BUILD='$(BUILDPYTHON)'
++ PGEN_FOR_BUILD='$(PGEN)'
++ _FIP_FOR_BUILD='$(_FIP)'
+ fi
+ AC_SUBST(PYTHON_FOR_BUILD)
++AC_SUBST(PGEN_FOR_BUILD)
++AC_SUBST(_FIP_FOR_BUILD)
++AC_ARG_VAR(PYTHON_FOR_BUILD,[build system Python])
++AC_ARG_VAR(PGEN_FOR_BUILD,[build system Python pgen])
++AC_ARG_VAR(_FIP_FOR_BUILD,[build system Python _freeze_importlib])
+
+ dnl Ensure that if prefix is specified, it does not end in a slash. If
+ dnl it does, we get path names containing '//' which is both ugly and
+@@ -373,6 +389,9 @@
+ *-*-cygwin*)
+ ac_sys_system=Cygwin
+ ;;
++ *-*-midipix*)
++ ac_sys_system=Midipix
++ ;;
+ *)
+ # for now, limit cross builds to known configurations
+ MACHDEP="unknown"
+@@ -399,6 +418,7 @@
+ cygwin*) MACHDEP="cygwin";;
+ darwin*) MACHDEP="darwin";;
+ irix646) MACHDEP="irix6";;
++ midipix*) MACHDEP="midipix";;
+ '') MACHDEP="unknown";;
+ esac
+ fi
+@@ -406,6 +426,9 @@
+ AC_SUBST(_PYTHON_HOST_PLATFORM)
+ if test "$cross_compiling" = yes; then
+ case "$host" in
++ *-*-midipix*)
++ _host_cpu=
++ ;;
+ *-*-linux*)
+ case "$host_cpu" in
+ arm*)
+--- Python-3.5.1/Makefile.pre.in.orig 2015-12-07 01:39:09.000000000 +0000
++++ Python-3.5.1/Makefile.pre.in 2016-04-23 12:09:05.162989761 +0000
+@@ -276,6 +276,9 @@
+ ##########################################################################
+ # Parser
+ PGEN= Parser/pgen$(EXE)
++PGEN_FOR_BUILD= @PGEN_FOR_BUILD@
++_FIP= Programs/_freeze_importlib$(EXE)
++_FIP_FOR_BUILD= @_FIP_FOR_BUILD@
+
+ PSRCS= \
+ Parser/acceler.c \
+@@ -597,6 +600,7 @@
+ esac; \
+ $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \
+ _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
++ _PYTHON_HOST_PLATFORM='$(_PYTHON_HOST_PLATFORM)' \
+ $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
+
+ # Build static library
+@@ -708,15 +712,15 @@
+
+ Programs/_freeze_importlib.o: Programs/_freeze_importlib.c Makefile
+
+-Programs/_freeze_importlib: Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN)
++$(_FIP): Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN)
+ $(LINKCC) $(PY_LDFLAGS) -o $@ Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
+
+-Python/importlib_external.h: $(srcdir)/Lib/importlib/_bootstrap_external.py Programs/_freeze_importlib
+- ./Programs/_freeze_importlib \
++Python/importlib_external.h: $(srcdir)/Lib/importlib/_bootstrap_external.py $(_FIP_FOR_BUILD)
++ ./$(_FIP_FOR_BUILD) \
+ $(srcdir)/Lib/importlib/_bootstrap_external.py Python/importlib_external.h
+
+-Python/importlib.h: $(srcdir)/Lib/importlib/_bootstrap.py Programs/_freeze_importlib
+- ./Programs/_freeze_importlib \
++Python/importlib.h: $(srcdir)/Lib/importlib/_bootstrap.py $(_FIP_FOR_BUILD)
++ ./$(_FIP_FOR_BUILD) \
+ $(srcdir)/Lib/importlib/_bootstrap.py Python/importlib.h
+
+
+@@ -777,9 +781,9 @@
+
+ $(IO_OBJS): $(IO_H)
+
+-$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGEN)
++$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGEN_FOR_BUILD)
+ @$(MKDIR_P) Include
+- $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
++ $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
+ $(GRAMMAR_C): $(GRAMMAR_H)
+ touch $(GRAMMAR_C)
+
+@@ -1415,6 +1419,7 @@
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
+ sharedinstall: sharedmods
++ _PYTHON_HOST_PLATFORM='$(_PYTHON_HOST_PLATFORM)' \
+ $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \
+ --prefix=$(prefix) \
+ --install-scripts=$(BINDIR) \
+--- Python-3.5.1/Modules/socketmodule.c.orig 2015-12-07 01:39:10.000000000 +0000
++++ Python-3.5.1/Modules/socketmodule.c 2016-04-23 12:30:40.854961004 +0000
+@@ -1313,7 +1313,7 @@
+ }
+ #endif
+
+-#ifdef AF_CAN
++#if defined(HAVE_LINUX_CAN_H) && defined(AF_CAN)
+ case AF_CAN:
+ {
+ struct sockaddr_can *a = (struct sockaddr_can *)addr;
+@@ -1810,7 +1810,7 @@
+ }
+ #endif
+
+-#if defined(AF_CAN) && defined(CAN_RAW) && defined(CAN_BCM)
++#if defined(HAVE_LINUX_CAN_H) && defined(AF_CAN) && defined(CAN_RAW) && defined(CAN_BCM)
+ case AF_CAN:
+ switch (s->sock_proto) {
+ case CAN_RAW:
+@@ -2017,7 +2017,7 @@
+ }
+ #endif
+
+-#ifdef AF_CAN
++#if defined(HAVE_LINUX_CAN_H) && defined(AF_CAN)
+ case AF_CAN:
+ {
+ *len_ret = sizeof (struct sockaddr_can);
+@@ -6298,7 +6298,7 @@
+ PyModule_AddStringConstant(m, "BDADDR_LOCAL", "00:00:00:FF:FF:FF");
+ #endif
+
+-#ifdef AF_CAN
++#if defined(HAVE_LINUX_CAN_H) && defined(AF_CAN)
+ /* Controller Area Network */
+ PyModule_AddIntMacro(m, AF_CAN);
+ #endif
+--- Python-3.5.1/setup.py.orig 2015-12-07 01:39:11.000000000 +0000
++++ Python-3.5.1/setup.py 2016-04-23 15:59:20.902683131 +0000
+@@ -1294,7 +1294,13 @@
+ panel_library = 'panel'
+ if curses_library == 'ncursesw':
+ curses_defines.append(('HAVE_NCURSESW', '1'))
+- curses_includes.append('/usr/include/ncursesw')
++ cflags = sysconfig.get_config_var('CFLAGS')
++ m = re.search(r'-isysroot\s+(\S+)', cflags)
++ if m is None:
++ sysroot = '/usr'
++ else:
++ sysroot = m.group(1)
++ curses_includes.append(sysroot + '/include/ncursesw')
+ # Bug 1464056: If _curses.so links with ncursesw,
+ # _curses_panel.so must link with panelw.
+ panel_library = 'panelw'
diff --git a/patches/apk-tools-2.6.6.local.patch b/patches/apk-tools-2.6.6.local.patch
new file mode 100644
index 00000000..df03820e
--- /dev/null
+++ b/patches/apk-tools-2.6.6.local.patch
@@ -0,0 +1,55 @@
+--- apk-tools-2.6.6/src/apk.c.orig 2016-02-09 15:57:53.000000000 +0100
++++ apk-tools-2.6.6/src/apk.c 2016-03-09 10:24:39.763540600 +0100
+@@ -425,12 +425,15 @@
+
+ static void apk_applet_register_builtin(void)
+ {
++#if 0
+ extern apk_init_func_t __start_initapplets[], __stop_initapplets[];
+ apk_init_func_t *p;
+
+ list_init(&apk_applet_list);
+ for (p = __start_initapplets; p < __stop_initapplets; p++)
+ (*p)();
++#endif
++ list_init(&apk_applet_list);
+ }
+
+ int main(int argc, char **argv)
+--- apk-tools-2.6.6/Make.rules.orig 2016-02-09 15:57:53.000000000 +0100
++++ apk-tools-2.6.6/Make.rules 2016-03-09 10:44:12.457459300 +0100
+@@ -70,7 +70,7 @@
+ INSTALLDIR := $(INSTALL) -d
+
+ CFLAGS ?= -g -O2
+-CFLAGS_ALL := -Werror -Wall -Wstrict-prototypes -D_GNU_SOURCE -std=gnu99 -fPIC
++CFLAGS_ALL := -Wall -Wstrict-prototypes -D_GNU_SOURCE -std=gnu99 -fPIC
+ CFLAGS_ALL += $(CFLAGS)
+
+ LDFLAGS ?= -g
+--- apk-tools-2.6.6/src/Makefile.orig 2016-02-09 14:57:53.000000000 +0000
++++ apk-tools-2.6.6/src/Makefile 2016-06-23 08:14:37.843747529 +0000
+@@ -1,12 +1,12 @@
+ PKGDEPS := openssl zlib
+-PKG_CONFIG ?= pkg-config
++PKG_CONFIG ?= $(PKG_TARGET)-pkg-config
+ LUAAPK ?= yes
+
+ # lua module
+ ifneq ($(LUAAPK),)
+ LUA_VERSION ?= 5.2
+ LUA_PC ?= lua$(LUA_VERSION)
+-LUA_LIBDIR ?= /usr/lib/lua/$(LUA_VERSION)
++LUA_LIBDIR ?= $(PREFIX)/lib/lua/$(LUA_VERSION)
+ LIBAPK := YesPlease
+ shlibs-y += apk.so
+ apk.so-objs := lua-apk.o
+@@ -66,7 +66,7 @@
+ LDFLAGS_apk-test += -L$(obj)
+
+ CFLAGS_ALL += $(shell $(PKG_CONFIG) --cflags $(PKGDEPS))
+-LIBS := /usr/lib/libfetch.a \
++LIBS := $(PREFIX)/lib/libfetch.a \
+ -Wl,--as-needed \
+ $(shell $(PKG_CONFIG) --libs $(PKGDEPS)) \
+ -Wl,--no-as-needed
diff --git a/patches/bash-4.3.local.patch b/patches/bash-4.3.local.patch
new file mode 100644
index 00000000..995f7a7e
--- /dev/null
+++ b/patches/bash-4.3.local.patch
@@ -0,0 +1,7885 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-001
+
+Bug-Reported-by: NBaH <nbah@sfr.fr>
+Bug-Reference-ID: <ler0b5$iu9$1@speranza.aioe.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html
+
+Bug-Description:
+
+A missing check for a valid option prevented `test -R' from working. There
+is another problem that causes bash to look up the wrong variable name when
+processing the argument to `test -R'.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/test.c 2014-02-04 16:52:58.000000000 -0500
+--- test.c 2014-02-28 21:22:44.000000000 -0500
+***************
+*** 647,652 ****
+
+ case 'R':
+! v = find_variable (arg);
+! return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE);
+ }
+
+--- 647,652 ----
+
+ case 'R':
+! v = find_variable_noref (arg);
+! return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE);
+ }
+
+***************
+*** 724,727 ****
+--- 724,728 ----
+ case 'u': case 'v': case 'w': case 'x': case 'z':
+ case 'G': case 'L': case 'O': case 'S': case 'N':
++ case 'R':
+ return (1);
+ }
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 0
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-002
+
+Bug-Reported-by: Moe Tunes <moetunes42@gmail.com>
+Bug-Reference-ID: <53103F49.3070100@gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html
+
+Bug-Description:
+
+A change to save state while running the DEBUG trap caused pipelines to hang
+on systems which need process group synchronization while building pipelines.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/trap.c 2014-02-05 10:03:21.000000000 -0500
+--- trap.c 2014-02-28 09:51:43.000000000 -0500
+***************
+*** 921,925 ****
+
+ #if defined (JOB_CONTROL)
+! save_pipeline (1); /* XXX only provides one save level */
+ #endif
+
+--- 921,926 ----
+
+ #if defined (JOB_CONTROL)
+! if (sig != DEBUG_TRAP) /* run_debug_trap does this */
+! save_pipeline (1); /* XXX only provides one save level */
+ #endif
+
+***************
+*** 941,945 ****
+
+ #if defined (JOB_CONTROL)
+! restore_pipeline (1);
+ #endif
+
+--- 942,947 ----
+
+ #if defined (JOB_CONTROL)
+! if (sig != DEBUG_TRAP) /* run_debug_trap does this */
+! restore_pipeline (1);
+ #endif
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-003
+
+Bug-Reported-by: Anatol Pomozov <anatol.pomozov@gmail.com>
+Bug-Reference-ID: <CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
+
+Bug-Description:
+
+When in callback mode, some readline commands can cause readline to seg
+fault by passing invalid contexts to callback functions.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400
+--- lib/readline/readline.c 2014-03-10 14:15:02.000000000 -0400
+***************
+*** 745,749 ****
+
+ RL_CHECK_SIGNALS ();
+! if (r == 0) /* success! */
+ {
+ _rl_keyseq_chain_dispose ();
+--- 745,750 ----
+
+ RL_CHECK_SIGNALS ();
+! /* We only treat values < 0 specially to simulate recursion. */
+! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
+ {
+ _rl_keyseq_chain_dispose ();
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-004
+
+Bug-Reported-by: Daan van Rossum <daan@flash.uchicago.edu>
+Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu>
+Bug-Reference-URL:
+
+Bug-Description:
+
+The `.' command in vi mode cannot undo multi-key commands beginning with
+`c', `d', and `y' (command plus motion specifier).
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400
+--- lib/readline/readline.c 2014-03-07 15:20:33.000000000 -0500
+***************
+*** 965,969 ****
+ 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);
+--- 965,969 ----
+ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
+ key != ANYOTHERKEY &&
+! _rl_dispatching_keymap == vi_movement_keymap &&
+ _rl_vi_textmod_command (key))
+ _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 4
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-005
+
+Bug-Reported-by: David Sines <dave.gma@googlemail.com>
+Bug-Reference-ID: <CAO3BAa_CK_Rgkhdfzs+NJ4KFYdB9qW3pvXQK0xLCi6GMmDU8bw@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html
+
+Bug-Description:
+
+When in Posix mode, bash did not correctly interpret the ANSI-C-style
+$'...' quoting mechanism when performing pattern substitution word
+expansions within double quotes.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/parse.y 2014-02-11 09:42:10.000000000 -0500
+--- parse.y 2014-03-07 20:57:15.000000000 -0500
+***************
+*** 3399,3403 ****
+ unescaped double-quotes or single-quotes, if any, shall occur." */
+ /* This was changed in Austin Group Interp 221 */
+! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+ continue;
+
+--- 3399,3403 ----
+ unescaped double-quotes or single-quotes, if any, shall occur." */
+ /* This was changed in Austin Group Interp 221 */
+! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+ continue;
+
+*** bash-4.3/y.tab.c 2014-02-11 10:57:47.000000000 -0500
+--- y.tab.c 2014-03-28 10:41:15.000000000 -0400
+***************
+*** 5711,5715 ****
+ unescaped double-quotes or single-quotes, if any, shall occur." */
+ /* This was changed in Austin Group Interp 221 */
+! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+ continue;
+
+--- 5711,5715 ----
+ unescaped double-quotes or single-quotes, if any, shall occur." */
+ /* This was changed in Austin Group Interp 221 */
+! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+ continue;
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 4
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 5
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-006
+
+Bug-Reported-by: Eduardo A . Bustamante Lopez <dualbus@gmail.com>
+Bug-Reference-ID: <20140228170013.GA16015@dualbus.me>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html
+
+Bug-Description:
+
+A shell that started with job control active but was not interactive left
+the terminal in the wrong process group when exiting, causing its parent
+shell to get a stop signal when it attempted to read from the terminal.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/jobs.c 2014-01-10 09:05:34.000000000 -0500
+--- jobs.c 2014-03-02 18:05:09.000000000 -0500
+***************
+*** 4375,4379 ****
+ end_job_control ()
+ {
+! if (interactive_shell) /* XXX - should it be interactive? */
+ {
+ terminate_stopped_jobs ();
+--- 4375,4379 ----
+ end_job_control ()
+ {
+! if (interactive_shell || job_control) /* XXX - should it be just job_control? */
+ {
+ terminate_stopped_jobs ();
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 5
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 6
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-007
+
+Bug-Reported-by: geir.hauge@gmail.com
+Bug-Reference-ID: <20140318093650.B181C1C5B0B@gina.itea.ntnu.no>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html
+
+Bug-Description:
+
+Using compound assignments for associative arrays like
+
+assoc=( [x]= [y]=bar )
+
+left the value corresponding to the key `x' NULL. This caused subsequent
+lookups to interpret it as unset.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/arrayfunc.c 2013-08-02 16:19:59.000000000 -0400
+--- arrayfunc.c 2014-03-18 11:08:15.000000000 -0400
+***************
+*** 598,601 ****
+--- 598,606 ----
+ {
+ val = expand_assignment_string_to_string (val, 0);
++ if (val == 0)
++ {
++ val = (char *)xmalloc (1);
++ val[0] = '\0'; /* like do_assignment_internal */
++ }
+ free_val = 1;
+ }
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 6
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 7
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-008
+
+Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
+Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
+
+Bug-Description:
+
+Some extended glob patterns incorrectly matched filenames with a leading
+dot, regardless of the setting of the `dotglob' option.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/lib/glob/gmisc.c 2013-10-28 14:45:25.000000000 -0400
+--- lib/glob/gmisc.c 2014-03-19 09:16:08.000000000 -0400
+***************
+*** 211,214 ****
+--- 211,215 ----
+ case '!':
+ case '@':
++ case '?':
+ return (pat[1] == LPAREN);
+ default:
+*** bash-4.3/lib/glob/glob.c 2014-01-31 21:43:51.000000000 -0500
+--- lib/glob/glob.c 2014-03-20 09:01:26.000000000 -0400
+***************
+*** 180,202 ****
+ int flags;
+ {
+! char *pp, *pe, *t;
+! int n, r;
+
+ pp = pat + 2;
+! pe = pp + strlen (pp) - 1; /*(*/
+! if (*pe != ')')
+! return 0;
+! if ((t = strchr (pp, '|')) == 0) /* easy case first */
+ {
+ *pe = '\0';
+ r = skipname (pp, dname, flags); /*(*/
+ *pe = ')';
+ return r;
+ }
+ while (t = glob_patscan (pp, pe, '|'))
+ {
+ n = t[-1];
+ t[-1] = '\0';
+ r = skipname (pp, dname, flags);
+ t[-1] = n;
+ if (r == 0) /* if any pattern says not skip, we don't skip */
+--- 180,215 ----
+ int flags;
+ {
+! char *pp, *pe, *t, *se;
+! int n, r, negate;
+
++ negate = *pat == '!';
+ pp = pat + 2;
+! se = pp + strlen (pp) - 1; /* end of string */
+! pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
+! /* we should check for invalid extglob pattern here */
+! /* if pe != se we have more of the pattern at the end of the extglob
+! pattern. Check the easy case first ( */
+! if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
+ {
+ *pe = '\0';
++ #if defined (HANDLE_MULTIBYTE)
++ r = mbskipname (pp, dname, flags);
++ #else
+ r = skipname (pp, dname, flags); /*(*/
++ #endif
+ *pe = ')';
+ return r;
+ }
++
++ /* check every subpattern */
+ while (t = glob_patscan (pp, pe, '|'))
+ {
+ n = t[-1];
+ t[-1] = '\0';
++ #if defined (HANDLE_MULTIBYTE)
++ r = mbskipname (pp, dname, flags);
++ #else
+ r = skipname (pp, dname, flags);
++ #endif
+ t[-1] = n;
+ if (r == 0) /* if any pattern says not skip, we don't skip */
+***************
+*** 205,219 ****
+ } /*(*/
+
+! if (pp == pe) /* glob_patscan might find end of pattern */
+ return r;
+
+! *pe = '\0';
+! # if defined (HANDLE_MULTIBYTE)
+! r = mbskipname (pp, dname, flags); /*(*/
+! # else
+! r = skipname (pp, dname, flags); /*(*/
+! # endif
+! *pe = ')';
+! return r;
+ }
+ #endif
+--- 218,227 ----
+ } /*(*/
+
+! /* glob_patscan might find end of pattern */
+! if (pp == se)
+ return r;
+
+! /* but if it doesn't then we didn't match a leading dot */
+! return 0;
+ }
+ #endif
+***************
+*** 278,289 ****
+ {
+ #if EXTENDED_GLOB
+! wchar_t *pp, *pe, *t, n;
+! int r;
+
+ pp = pat + 2;
+! pe = pp + wcslen (pp) - 1; /*(*/
+! if (*pe != L')')
+! return 0;
+! if ((t = wcschr (pp, L'|')) == 0)
+ {
+ *pe = L'\0';
+--- 286,298 ----
+ {
+ #if EXTENDED_GLOB
+! wchar_t *pp, *pe, *t, n, *se;
+! int r, negate;
+
++ negate = *pat == L'!';
+ pp = pat + 2;
+! se = pp + wcslen (pp) - 1; /*(*/
+! pe = glob_patscan_wc (pp, se, 0);
+!
+! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
+ {
+ *pe = L'\0';
+***************
+*** 292,295 ****
+--- 301,306 ----
+ return r;
+ }
++
++ /* check every subpattern */
+ while (t = glob_patscan_wc (pp, pe, '|'))
+ {
+***************
+*** 306,313 ****
+ return r;
+
+! *pe = L'\0';
+! r = wchkname (pp, dname); /*(*/
+! *pe = L')';
+! return r;
+ #else
+ return (wchkname (pat, dname));
+--- 317,322 ----
+ return r;
+
+! /* but if it doesn't then we didn't match a leading dot */
+! return 0;
+ #else
+ return (wchkname (pat, dname));
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 7
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 8
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-009
+
+Bug-Reported-by: Matthias Klose <doko@debian.org>
+Bug-Reference-ID: <53346FC8.6090005@debian.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html
+
+Bug-Description:
+
+There is a problem with unsigned sign extension when attempting to reallocate
+the input line when it is fewer than 3 characters long and there has been a
+history expansion. The sign extension causes the shell to not reallocate the
+line, which results in a segmentation fault when it writes past the end.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/parse.y 2014-02-11 09:42:10.000000000 -0500
+--- parse.y 2014-03-27 16:33:29.000000000 -0400
+***************
+*** 2425,2429 ****
+ if (shell_input_line_terminator != EOF)
+ {
+! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
+ shell_input_line = (char *)xrealloc (shell_input_line,
+ 1 + (shell_input_line_size += 2));
+--- 2425,2429 ----
+ if (shell_input_line_terminator != EOF)
+ {
+! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
+ shell_input_line = (char *)xrealloc (shell_input_line,
+ 1 + (shell_input_line_size += 2));
+*** bash-4.3/y.tab.c 2014-03-28 11:17:06.000000000 -0400
+--- y.tab.c 2014-04-07 11:48:31.000000000 -0400
+***************
+*** 4737,4741 ****
+ if (shell_input_line_terminator != EOF)
+ {
+! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
+ shell_input_line = (char *)xrealloc (shell_input_line,
+ 1 + (shell_input_line_size += 2));
+--- 4737,4741 ----
+ if (shell_input_line_terminator != EOF)
+ {
+! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
+ shell_input_line = (char *)xrealloc (shell_input_line,
+ 1 + (shell_input_line_size += 2));
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 8
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 9
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-010
+
+Bug-Reported-by: Albert Shih <Albert.Shih@obspm.fr>
+Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html
+
+Bug-Description:
+
+Patch (apply with `patch -p0'):
+
+This patch changes the behavior of programmable completion to compensate
+for two assumptions made by the bash-completion package. Bash-4.3 changed
+to dequote the argument to programmable completion only under certain
+circumstances, to make the behavior of compgen more consistent when run
+from the command line -- closer to the behavior when run by a shell function
+run as part of programmable completion. Bash-completion can pass quoted
+arguments to compgen when the original word to be completed was not quoted,
+expecting programmable completion to dequote the word before attempting
+completion.
+
+This patch fixes two cases:
+
+1. An empty string that bash-completion passes to compgen as a quoted null
+ string ('').
+
+2. An unquoted word that bash-completion quotes using single quotes or
+ backslashes before passing it to compgen.
+
+In these cases, since readline did not detect a quote character in the original
+word to be completed, bash-4.3
+
+*** bash-4.3/externs.h 2014-01-02 14:58:20.000000000 -0500
+--- externs.h 2014-03-13 14:42:57.000000000 -0400
+***************
+*** 325,328 ****
+--- 325,329 ----
+ extern char *sh_backslash_quote_for_double_quotes __P((char *));
+ extern int sh_contains_shell_metas __P((char *));
++ extern int sh_contains_quotes __P((char *));
+
+ /* declarations for functions defined in lib/sh/spell.c */
+*** bash-4.3/lib/sh/shquote.c 2013-03-31 21:53:32.000000000 -0400
+--- lib/sh/shquote.c 2014-03-13 14:42:57.000000000 -0400
+***************
+*** 312,313 ****
+--- 312,327 ----
+ return (0);
+ }
++
++ int
++ sh_contains_quotes (string)
++ char *string;
++ {
++ char *s;
++
++ for (s = string; s && *s; s++)
++ {
++ if (*s == '\'' || *s == '"' || *s == '\\')
++ return 1;
++ }
++ return 0;
++ }
+*** bash-4.3/pcomplete.c 2013-08-26 15:23:45.000000000 -0400
+--- pcomplete.c 2014-03-25 17:23:23.000000000 -0400
+***************
+*** 184,187 ****
+--- 184,188 ----
+ COMPSPEC *pcomp_curcs;
+ const char *pcomp_curcmd;
++ const char *pcomp_curtxt;
+
+ #ifdef DEBUG
+***************
+*** 754,757 ****
+--- 755,784 ----
+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
+ }
++ /* Intended to solve a mismatched assumption by bash-completion. If
++ the text to be completed is empty, but bash-completion turns it into
++ a quoted string ('') assuming that this code will dequote it before
++ calling readline, do the dequoting. */
++ else if (iscompgen && iscompleting &&
++ pcomp_curtxt && *pcomp_curtxt == 0 &&
++ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 &&
++ rl_filename_dequoting_function)
++ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
++ /* Another mismatched assumption by bash-completion. If compgen is being
++ run as part of bash-completion, and the argument to compgen is not
++ the same as the word originally passed to the programmable completion
++ code, dequote the argument if it has quote characters. It's an
++ attempt to detect when bash-completion is quoting its filename
++ argument before calling compgen. */
++ /* We could check whether gen_shell_function_matches is in the call
++ stack by checking whether the gen-shell-function-matches tag is in
++ the unwind-protect stack, but there's no function to do that yet.
++ We could simply check whether we're executing in a function by
++ checking variable_context, and may end up doing that. */
++ else if (iscompgen && iscompleting && rl_filename_dequoting_function &&
++ pcomp_curtxt && text &&
++ STREQ (pcomp_curtxt, text) == 0 &&
++ variable_context &&
++ sh_contains_quotes (text)) /* guess */
++ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
+ else
+ dfn = savestring (text);
+***************
+*** 1523,1527 ****
+ {
+ COMPSPEC *cs, *oldcs;
+! const char *oldcmd;
+ STRINGLIST *ret;
+
+--- 1550,1554 ----
+ {
+ COMPSPEC *cs, *oldcs;
+! const char *oldcmd, *oldtxt;
+ STRINGLIST *ret;
+
+***************
+*** 1546,1552 ****
+--- 1573,1581 ----
+ oldcs = pcomp_curcs;
+ oldcmd = pcomp_curcmd;
++ oldtxt = pcomp_curtxt;
+
+ pcomp_curcs = cs;
+ pcomp_curcmd = cmd;
++ pcomp_curtxt = word;
+
+ ret = gen_compspec_completions (cs, cmd, word, start, end, foundp);
+***************
+*** 1554,1557 ****
+--- 1583,1587 ----
+ pcomp_curcs = oldcs;
+ pcomp_curcmd = oldcmd;
++ pcomp_curtxt = oldtxt;
+
+ /* We need to conditionally handle setting *retryp here */
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 9
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-011
+
+Bug-Reported-by: Egmont Koblinger <egmont@gmail.com>
+Bug-Reference-ID: <CAGWcZk+bU5Jo1M+tutGvL-250UBE9DXjpeJVofYJSFcqFEVfMg@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html
+
+Bug-Description:
+
+The signal handling changes to bash and readline (to avoid running any code
+in a signal handler context) cause the cursor to be placed on the wrong
+line of a multi-line command after a ^C interrupts editing.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/lib/readline/display.c 2013-12-27 13:10:56.000000000 -0500
+--- lib/readline/display.c 2014-03-27 11:52:45.000000000 -0400
+***************
+*** 2678,2682 ****
+ if (_rl_echoing_p)
+ {
+! _rl_move_vert (_rl_vis_botlin);
+ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+--- 2678,2683 ----
+ if (_rl_echoing_p)
+ {
+! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */
+! _rl_move_vert (_rl_vis_botlin);
+ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 11
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-012
+
+Bug-Reported-by: Eduardo A. Bustamante López<dualbus@gmail.com>
+Bug-Reference-ID: <5346B54C.4070205@case.edu>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html
+
+Bug-Description:
+
+When a SIGCHLD trap runs a command containing a shell builtin while
+a script is running `wait' to wait for all running children to complete,
+the SIGCHLD trap will not be run once for each child that terminates.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/jobs.c 2014-03-28 10:54:19.000000000 -0400
+--- jobs.c 2014-04-15 08:47:03.000000000 -0400
+***************
+*** 3598,3601 ****
+--- 3598,3602 ----
+ unwind_protect_pointer (the_pipeline);
+ unwind_protect_pointer (subst_assign_varlist);
++ unwind_protect_pointer (this_shell_builtin);
+
+ /* We have to add the commands this way because they will be run
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 11
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 12
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-013
+
+Bug-Reported-by: <Trond.Endrestol@ximalas.info>
+Bug-Reference-ID: <alpine.BSF.2.03.1404192114310.1973@enterprise.ximalas.info>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html
+
+Bug-Description:
+
+Using reverse-i-search when horizontal scrolling is enabled does not redisplay
+the entire line containing the successful search results.
+
+Patch (apply with `patch -p0'):
+*** bash-4.3/lib/readline/display.c 2014-04-08 18:19:36.000000000 -0400
+--- lib/readline/display.c 2014-04-20 18:32:52.000000000 -0400
+***************
+*** 1638,1642 ****
+ the spot of first difference is before the end of the invisible chars,
+ lendiff needs to be adjusted. */
+! if (current_line == 0 && !_rl_horizontal_scroll_mode &&
+ current_invis_chars != visible_wrap_offset)
+ {
+--- 1638,1642 ----
+ the spot of first difference is before the end of the invisible chars,
+ lendiff needs to be adjusted. */
+! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
+ current_invis_chars != visible_wrap_offset)
+ {
+***************
+*** 1826,1831 ****
+ _rl_last_c_pos += bytes_to_insert;
+
+ if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
+! goto clear_rest_of_line;
+ }
+ }
+--- 1826,1836 ----
+ _rl_last_c_pos += bytes_to_insert;
+
++ /* XXX - we only want to do this if we are at the end of the line
++ so we move there with _rl_move_cursor_relative */
+ if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
+! {
+! _rl_move_cursor_relative (ne-new, new);
+! goto clear_rest_of_line;
+! }
+ }
+ }
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 12
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 13
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-014
+
+Bug-Reported-by: Greg Wooledge <wooledg@eeg.ccf.org>
+Bug-Reference-ID: <20140418202123.GB7660@eeg.ccf.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html
+
+Bug-Description:
+
+Under certain circumstances, $@ is expanded incorrectly in contexts where
+word splitting is not performed.
+
+Patch (apply with `patch -p0'):
+*** bash-4.3/subst.c 2014-01-23 16:26:37.000000000 -0500
+--- subst.c 2014-04-19 15:41:26.000000000 -0400
+***************
+*** 3249,3254 ****
+--- 3249,3256 ----
+ return ((char *)NULL);
+
++ expand_no_split_dollar_star = 1;
+ w->flags |= W_NOSPLIT2;
+ l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
++ expand_no_split_dollar_star = 0;
+ if (l)
+ {
+***************
+*** 7848,7851 ****
+--- 7850,7857 ----
+ according to POSIX.2, this expands to a list of the positional
+ parameters no matter what IFS is set to. */
++ /* XXX - what to do when in a context where word splitting is not
++ performed? Even when IFS is not the default, posix seems to imply
++ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2
++ here. */
+ temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted);
+
+***************
+*** 8817,8820 ****
+--- 8823,8827 ----
+ {
+ char *ifs_chars;
++ char *tstring;
+
+ ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL;
+***************
+*** 8831,8834 ****
+--- 8838,8865 ----
+ if (split_on_spaces)
+ list = list_string (istring, " ", 1); /* XXX quoted == 1? */
++ /* If we have $@ (has_dollar_at != 0) and we are in a context where we
++ don't want to split the result (W_NOSPLIT2), and we are not quoted,
++ we have already separated the arguments with the first character of
++ $IFS. In this case, we want to return a list with a single word
++ with the separator possibly replaced with a space (it's what other
++ shells seem to do).
++ quoted_dollar_at is internal to this function and is set if we are
++ passed an argument that is unquoted (quoted == 0) but we encounter a
++ double-quoted $@ while expanding it. */
++ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2))
++ {
++ /* Only split and rejoin if we have to */
++ if (*ifs_chars && *ifs_chars != ' ')
++ {
++ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
++ tstring = string_list (list);
++ }
++ else
++ tstring = istring;
++ tword = make_bare_word (tstring);
++ if (tstring != istring)
++ free (tstring);
++ goto set_word_flags;
++ }
+ else if (has_dollar_at && ifs_chars)
+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
+***************
+*** 8836,8839 ****
+--- 8867,8871 ----
+ {
+ tword = make_bare_word (istring);
++ set_word_flags:
+ if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
+ tword->flags |= W_QUOTED;
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 13
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 14
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-015
+
+Bug-Reported-by: Clark Wang <dearvoid@gmail.com>
+Bug-Reference-ID: <CADv8-og2TOSoabXeNVXVGaXN3tEMHnYVq1rwOLe5meaRPSGRig@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html
+
+Bug-Description:
+
+When completing directory names, the directory name is dequoted twice.
+This causes problems for directories with single and double quotes in
+their names.
+
+Patch (apply with `patch -p0'):
+*** bash-4.3/bashline.c 2014-02-09 19:56:58.000000000 -0500
+--- bashline.c 2014-04-25 14:57:52.000000000 -0400
+***************
+*** 4168,4174 ****
+
+ qc = rl_dispatching ? rl_completion_quote_character : 0;
+! dfn = bash_dequote_filename ((char *)text, qc);
+ m1 = rl_completion_matches (dfn, rl_filename_completion_function);
+! free (dfn);
+
+ if (m1 == 0 || m1[0] == 0)
+--- 4209,4222 ----
+
+ qc = rl_dispatching ? rl_completion_quote_character : 0;
+! /* If rl_completion_found_quote != 0, rl_completion_matches will call the
+! filename dequoting function, causing the directory name to be dequoted
+! twice. */
+! if (rl_dispatching && rl_completion_found_quote == 0)
+! dfn = bash_dequote_filename ((char *)text, qc);
+! else
+! dfn = (char *)text;
+ m1 = rl_completion_matches (dfn, rl_filename_completion_function);
+! if (dfn != text)
+! free (dfn);
+
+ if (m1 == 0 || m1[0] == 0)
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 14
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 15
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-016
+
+Bug-Reported-by: Pierre Gaston <pierre.gaston@gmail.com>
+Bug-Reference-ID: <CAPSX3sTCD61k1VQLJ5r-LWzEt+e7Xc-fxXmwn2u8EA5gJJej8Q@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html
+
+Bug-Description:
+
+An extended glob pattern containing a slash (`/') causes the globbing code
+to misinterpret it as a directory separator.
+
+Patch (apply with `patch -p0'):
+*** bash-4.3/lib/glob/glob.c 2014-03-28 10:54:23.000000000 -0400
+--- lib/glob/glob.c 2014-05-02 10:24:28.000000000 -0400
+***************
+*** 124,127 ****
+--- 124,129 ----
+ extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int));
+
++ extern char *glob_dirscan __P((char *, int));
++
+ /* Compile `glob_loop.c' for single-byte characters. */
+ #define CHAR unsigned char
+***************
+*** 188,191 ****
+--- 190,196 ----
+ pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
+ /* we should check for invalid extglob pattern here */
++ if (pe == 0)
++ return 0;
++
+ /* if pe != se we have more of the pattern at the end of the extglob
+ pattern. Check the easy case first ( */
+***************
+*** 1016,1020 ****
+ char **result;
+ unsigned int result_size;
+! char *directory_name, *filename, *dname;
+ unsigned int directory_len;
+ int free_dirname; /* flag */
+--- 1021,1025 ----
+ char **result;
+ unsigned int result_size;
+! char *directory_name, *filename, *dname, *fn;
+ unsigned int directory_len;
+ int free_dirname; /* flag */
+***************
+*** 1032,1035 ****
+--- 1037,1052 ----
+ /* Find the filename. */
+ filename = strrchr (pathname, '/');
++ #if defined (EXTENDED_GLOB)
++ if (filename && extended_glob)
++ {
++ fn = glob_dirscan (pathname, '/');
++ #if DEBUG_MATCHING
++ if (fn != filename)
++ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename);
++ #endif
++ filename = fn;
++ }
++ #endif
++
+ if (filename == NULL)
+ {
+*** bash-4.3/lib/glob/gmisc.c 2014-03-28 10:54:23.000000000 -0400
+--- lib/glob/gmisc.c 2014-05-02 09:35:57.000000000 -0400
+***************
+*** 43,46 ****
+--- 43,48 ----
+ #define WRPAREN L')'
+
++ extern char *glob_patscan __P((char *, char *, int));
++
+ /* Return 1 of the first character of WSTRING could match the first
+ character of pattern WPAT. Wide character version. */
+***************
+*** 376,377 ****
+--- 378,410 ----
+ return matlen;
+ }
++
++ /* Skip characters in PAT and return the final occurrence of DIRSEP. This
++ is only called when extended_glob is set, so we have to skip over extglob
++ patterns x(...) */
++ char *
++ glob_dirscan (pat, dirsep)
++ char *pat;
++ int dirsep;
++ {
++ char *p, *d, *pe, *se;
++
++ d = pe = se = 0;
++ for (p = pat; p && *p; p++)
++ {
++ if (extglob_pattern_p (p))
++ {
++ if (se == 0)
++ se = p + strlen (p) - 1;
++ pe = glob_patscan (p + 2, se, 0);
++ if (pe == 0)
++ continue;
++ else if (*pe == 0)
++ break;
++ p = pe - 1; /* will do increment above */
++ continue;
++ }
++ if (*p == dirsep)
++ d = p;
++ }
++ return d;
++ }
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 15
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 16
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-017
+
+Bug-Reported-by: Dan Douglas <ormaaj@gmail.com>
+Bug-Reference-ID: <7781746.RhfoTROLxF@smorgbox>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html
+
+Bug-Description:
+
+The code that creates local variables should not clear the `invisible'
+attribute when returning an existing local variable. Let the code that
+actually assigns a value clear it.
+
+Patch (apply with `patch -p0'):
+*** bash-4.3/variables.c 2014-02-14 11:55:12.000000000 -0500
+--- variables.c 2014-05-07 10:53:57.000000000 -0400
+***************
+*** 2198,2205 ****
+ old_var = find_variable (name);
+ if (old_var && local_p (old_var) && old_var->context == variable_context)
+! {
+! VUNSETATTR (old_var, att_invisible); /* XXX */
+! return (old_var);
+! }
+
+ was_tmpvar = old_var && tempvar_p (old_var);
+--- 2260,2264 ----
+ old_var = find_variable (name);
+ if (old_var && local_p (old_var) && old_var->context == variable_context)
+! return (old_var);
+
+ was_tmpvar = old_var && tempvar_p (old_var);
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 16
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 17
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-018
+
+Bug-Reported-by: Geir Hauge <geir.hauge@gmail.com>
+Bug-Reference-ID: <CAO-BiTLOvfPXDypg61jcBausADrxUKJejakV2WTWP26cW0=rgA@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html
+
+Bug-Description:
+
+When assigning an array variable using the compound assignment syntax,
+but using `declare' with the rhs of the compound assignment quoted, the
+shell did not mark the variable as visible after successfully performing
+the assignment.
+
+Patch (apply with `patch -p0'):
+*** bash-4.3/arrayfunc.c 2014-03-28 10:54:21.000000000 -0400
+--- arrayfunc.c 2014-05-12 11:19:00.000000000 -0400
+***************
+*** 180,183 ****
+--- 180,184 ----
+ FREE (newval);
+
++ VUNSETATTR (entry, att_invisible); /* no longer invisible */
+ return (entry);
+ }
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 17
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 18
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-019
+
+Bug-Reported-by: John Lenton
+Bug-Reference-ID:
+Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476
+
+Bug-Description:
+
+The -t timeout option to `read' does not work when the -e option is used.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/lib/readline/input.c 2014-01-10 15:07:08.000000000 -0500
+--- lib/readline/input.c 2014-05-22 18:40:59.000000000 -0400
+***************
+*** 535,540 ****
+--- 538,551 ----
+ else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM)
+ return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
++ /* keyboard-generated signals of interest */
+ else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT)
+ RL_CHECK_SIGNALS ();
++ /* non-keyboard-generated signals of interest */
++ else if (_rl_caught_signal == SIGALRM
++ #if defined (SIGVTALRM)
++ || _rl_caught_signal == SIGVTALRM
++ #endif
++ )
++ RL_CHECK_SIGNALS ();
+
+ if (rl_signal_event_hook)
+*** bash-4.3/builtins/read.def 2013-09-02 11:54:00.000000000 -0400
+--- builtins/read.def 2014-05-08 11:43:35.000000000 -0400
+***************
+*** 443,447 ****
+ #if defined (READLINE)
+ if (edit)
+! add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
+ #endif
+ falarm (tmsec, tmusec);
+--- 443,450 ----
+ #if defined (READLINE)
+ if (edit)
+! {
+! add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
+! add_unwind_protect (bashline_reset_event_hook, (char *)NULL);
+! }
+ #endif
+ falarm (tmsec, tmusec);
+***************
+*** 1022,1025 ****
+--- 1025,1029 ----
+ old_attempted_completion_function = rl_attempted_completion_function;
+ rl_attempted_completion_function = (rl_completion_func_t *)NULL;
++ bashline_set_event_hook ();
+ if (itext)
+ {
+***************
+*** 1033,1036 ****
+--- 1037,1041 ----
+ rl_attempted_completion_function = old_attempted_completion_function;
+ old_attempted_completion_function = (rl_completion_func_t *)NULL;
++ bashline_reset_event_hook ();
+
+ if (ret == 0)
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 18
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 19
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-020
+
+Bug-Reported-by: Jared Yanovich <slovichon@gmail.com>
+Bug-Reference-ID: <20140417073654.GB26875@nightderanger.psc.edu>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html
+
+Bug-Description:
+
+When PS2 contains a command substitution, here-documents entered in an
+interactive shell can sometimes cause a segmentation fault.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/shell.h 2012-12-25 21:11:01.000000000 -0500
+--- shell.h 2014-06-03 09:24:28.000000000 -0400
+***************
+*** 169,173 ****
+ int expand_aliases;
+ int echo_input_at_read;
+!
+ } sh_parser_state_t;
+
+--- 169,174 ----
+ int expand_aliases;
+ int echo_input_at_read;
+! int need_here_doc;
+!
+ } sh_parser_state_t;
+
+*** bash-4.3/parse.y 2014-05-14 09:16:40.000000000 -0400
+--- parse.y 2014-04-30 09:27:59.000000000 -0400
+***************
+*** 2643,2647 ****
+
+ r = 0;
+! while (need_here_doc)
+ {
+ parser_state |= PST_HEREDOC;
+--- 2643,2647 ----
+
+ r = 0;
+! while (need_here_doc > 0)
+ {
+ parser_state |= PST_HEREDOC;
+***************
+*** 6076,6079 ****
+--- 6076,6080 ----
+ ps->expand_aliases = expand_aliases;
+ ps->echo_input_at_read = echo_input_at_read;
++ ps->need_here_doc = need_here_doc;
+
+ ps->token = token;
+***************
+*** 6124,6127 ****
+--- 6125,6129 ----
+ expand_aliases = ps->expand_aliases;
+ echo_input_at_read = ps->echo_input_at_read;
++ need_here_doc = ps->need_here_doc;
+
+ FREE (token);
+*** bash-4.3/y.tab.c 2014-04-07 11:56:12.000000000 -0400
+--- y.tab.c 2014-07-30 09:55:57.000000000 -0400
+***************
+*** 4955,4959 ****
+
+ r = 0;
+! while (need_here_doc)
+ {
+ parser_state |= PST_HEREDOC;
+--- 5151,5155 ----
+
+ r = 0;
+! while (need_here_doc > 0)
+ {
+ parser_state |= PST_HEREDOC;
+***************
+*** 8388,8391 ****
+--- 8584,8588 ----
+ ps->expand_aliases = expand_aliases;
+ ps->echo_input_at_read = echo_input_at_read;
++ ps->need_here_doc = need_here_doc;
+
+ ps->token = token;
+***************
+*** 8436,8439 ****
+--- 8633,8637 ----
+ expand_aliases = ps->expand_aliases;
+ echo_input_at_read = ps->echo_input_at_read;
++ need_here_doc = ps->need_here_doc;
+
+ FREE (token);
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 19
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 20
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-021
+
+Bug-Reported-by: Jared Yanovich <slovichon@gmail.com>
+Bug-Reference-ID: <20140625225019.GJ17044@nightderanger.psc.edu>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html
+
+Bug-Description:
+
+When the readline `revert-all-at-newline' option is set, pressing newline
+when the current line is one retrieved from history results in a double free
+and a segmentation fault.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/lib/readline/misc.c 2012-09-01 18:03:11.000000000 -0400
+--- lib/readline/misc.c 2014-06-30 13:41:19.000000000 -0400
+***************
+*** 462,465 ****
+--- 462,466 ----
+ /* Set up rl_line_buffer and other variables from history entry */
+ rl_replace_from_history (entry, 0); /* entry->line is now current */
++ entry->data = 0; /* entry->data is now current undo list */
+ /* Undo all changes to this history entry */
+ while (rl_undo_list)
+***************
+*** 469,473 ****
+ FREE (entry->line);
+ entry->line = savestring (rl_line_buffer);
+- entry->data = 0;
+ }
+ entry = previous_history ();
+--- 470,473 ----
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 20
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 21
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-022
+
+Bug-Reported-by: scorp.dev.null@gmail.com
+Bug-Reference-ID: <E1WxXw8-0007iE-Bi@pcm14>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html
+
+Bug-Description:
+
+Using nested pipelines within loops with the `lastpipe' option set can result
+in a segmentation fault.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/execute_cmd.c 2014-01-31 10:54:52.000000000 -0500
+--- execute_cmd.c 2014-06-19 08:05:49.000000000 -0400
+***************
+*** 2410,2414 ****
+ lstdin = wait_for (lastpid);
+ #if defined (JOB_CONTROL)
+! exec_result = job_exit_status (lastpipe_jid);
+ #endif
+ unfreeze_jobs_list ();
+--- 2425,2438 ----
+ lstdin = wait_for (lastpid);
+ #if defined (JOB_CONTROL)
+! /* If wait_for removes the job from the jobs table, use result of last
+! command as pipeline's exit status as usual. The jobs list can get
+! frozen and unfrozen at inconvenient times if there are multiple pipelines
+! running simultaneously. */
+! if (INVALID_JOB (lastpipe_jid) == 0)
+! exec_result = job_exit_status (lastpipe_jid);
+! else if (pipefail_opt)
+! exec_result = exec_result | lstdin; /* XXX */
+! /* otherwise we use exec_result */
+!
+ #endif
+ unfreeze_jobs_list ();
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 21
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 22
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-023
+
+Bug-Reported-by: Tim Friske <me@timfriske.com>
+Bug-Reference-ID: <CAM1RzOcOR9zzC2i+aeES6LtbHNHoOV+0pZEYPrqxv_QAii-RXA@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html
+
+Bug-Description:
+
+Bash does not correctly parse process substitution constructs that contain
+unbalanced parentheses as part of the contained command.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/subst.h 2014-01-11 21:02:27.000000000 -0500
+--- subst.h 2014-07-20 17:25:01.000000000 -0400
+***************
+*** 83,87 ****
+ Start extracting at (SINDEX) as if we had just seen "<(".
+ Make (SINDEX) get the position just after the matching ")". */
+! extern char *extract_process_subst __P((char *, char *, int *));
+ #endif /* PROCESS_SUBSTITUTION */
+
+--- 83,87 ----
+ Start extracting at (SINDEX) as if we had just seen "<(".
+ Make (SINDEX) get the position just after the matching ")". */
+! extern char *extract_process_subst __P((char *, char *, int *, int));
+ #endif /* PROCESS_SUBSTITUTION */
+
+*** bash-4.3/subst.c 2014-05-15 08:26:45.000000000 -0400
+--- subst.c 2014-07-20 17:26:44.000000000 -0400
+***************
+*** 1193,1202 ****
+ Make (SINDEX) get the position of the matching ")". */ /*))*/
+ char *
+! extract_process_subst (string, starter, sindex)
+ char *string;
+ char *starter;
+ int *sindex;
+ {
+ return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
+ }
+ #endif /* PROCESS_SUBSTITUTION */
+--- 1193,1208 ----
+ Make (SINDEX) get the position of the matching ")". */ /*))*/
+ char *
+! extract_process_subst (string, starter, sindex, xflags)
+ char *string;
+ char *starter;
+ int *sindex;
++ int xflags;
+ {
++ #if 0
+ return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
++ #else
++ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0);
++ return (xparse_dolparen (string, string+*sindex, sindex, xflags));
++ #endif
+ }
+ #endif /* PROCESS_SUBSTITUTION */
+***************
+*** 1786,1790 ****
+ if (string[si] == '\0')
+ CQ_RETURN(si);
+! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si);
+ free (temp); /* no SX_ALLOC here */
+ i = si;
+--- 1792,1796 ----
+ if (string[si] == '\0')
+ CQ_RETURN(si);
+! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0);
+ free (temp); /* no SX_ALLOC here */
+ i = si;
+***************
+*** 8250,8254 ****
+ t_index = sindex + 1; /* skip past both '<' and LPAREN */
+
+! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/
+ sindex = t_index;
+
+--- 8256,8260 ----
+ t_index = sindex + 1; /* skip past both '<' and LPAREN */
+
+! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/
+ sindex = t_index;
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 22
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 23
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-024
+
+Bug-Reported-by: Corentin Peuvrel <cpeuvrel@pom-monitoring.com>
+Bug-Reference-ID: <53CE9E5D.6050203@pom-monitoring.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html
+
+Bug-Description:
+
+Indirect variable references do not work correctly if the reference
+variable expands to an array reference using a subscript other than 0
+(e.g., foo='bar[1]' ; echo ${!foo}).
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/subst.c 2014-06-03 09:32:44.000000000 -0400
+--- subst.c 2014-07-23 09:58:19.000000000 -0400
+***************
+*** 7375,7379 ****
+
+ if (want_indir)
+! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+ else
+ tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
+--- 7445,7455 ----
+
+ if (want_indir)
+! {
+! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+! /* Turn off the W_ARRAYIND flag because there is no way for this function
+! to return the index we're supposed to be using. */
+! if (tdesc && tdesc->flags)
+! tdesc->flags &= ~W_ARRAYIND;
+! }
+ else
+ tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 23
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 24
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-025
+
+Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+Under certain circumstances, bash will execute user code while processing the
+environment for exported function definitions.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/builtins/common.h 2013-07-08 16:54:47.000000000 -0400
+--- builtins/common.h 2014-09-12 14:25:47.000000000 -0400
+***************
+*** 34,37 ****
+--- 49,54 ----
+ #define SEVAL_PARSEONLY 0x020
+ #define SEVAL_NOLONGJMP 0x040
++ #define SEVAL_FUNCDEF 0x080 /* only allow function definitions */
++ #define SEVAL_ONECMD 0x100 /* only allow a single command */
+
+ /* Flags for describe_command, shared between type.def and command.def */
+*** bash-4.3/builtins/evalstring.c 2014-02-11 09:42:10.000000000 -0500
+--- builtins/evalstring.c 2014-09-14 14:15:13.000000000 -0400
+***************
+*** 309,312 ****
+--- 313,324 ----
+ struct fd_bitmap *bitmap;
+
++ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
++ {
++ internal_warning ("%s: ignoring function definition attempt", from_file);
++ should_jump_to_top_level = 0;
++ last_result = last_command_exit_value = EX_BADUSAGE;
++ break;
++ }
++
+ bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
+ begin_unwind_frame ("pe_dispose");
+***************
+*** 369,372 ****
+--- 381,387 ----
+ dispose_fd_bitmap (bitmap);
+ discard_unwind_frame ("pe_dispose");
++
++ if (flags & SEVAL_ONECMD)
++ break;
+ }
+ }
+*** bash-4.3/variables.c 2014-05-15 08:26:50.000000000 -0400
+--- variables.c 2014-09-14 14:23:35.000000000 -0400
+***************
+*** 359,369 ****
+ strcpy (temp_string + char_index + 1, string);
+
+! if (posixly_correct == 0 || legal_identifier (name))
+! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
+!
+! /* Ancient backwards compatibility. Old versions of bash exported
+! functions like name()=() {...} */
+! if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
+! name[char_index - 2] = '\0';
+
+ if (temp_var = find_function (name))
+--- 364,372 ----
+ strcpy (temp_string + char_index + 1, string);
+
+! /* Don't import function names that are invalid identifiers from the
+! environment, though we still allow them to be defined as shell
+! variables. */
+! if (legal_identifier (name))
+! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
+
+ if (temp_var = find_function (name))
+***************
+*** 382,389 ****
+ report_error (_("error importing function definition for `%s'"), name);
+ }
+-
+- /* ( */
+- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
+- name[char_index - 2] = '('; /* ) */
+ }
+ #if defined (ARRAY_VARS)
+--- 385,388 ----
+*** bash-4.3/subst.c 2014-08-11 11:16:35.000000000 -0400
+--- subst.c 2014-09-12 15:31:04.000000000 -0400
+***************
+*** 8048,8052 ****
+ goto return0;
+ }
+! else if (var = find_variable_last_nameref (temp1))
+ {
+ temp = nameref_cell (var);
+--- 8118,8124 ----
+ goto return0;
+ }
+! else if (var && (invisible_p (var) || var_isset (var) == 0))
+! temp = (char *)NULL;
+! else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0)
+ {
+ temp = nameref_cell (var);
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 24
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 25
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-026
+
+Bug-Reported-by: Tavis Ormandy <taviso@cmpxchg8b.com>
+Bug-Reference-ID:
+Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929
+
+Bug-Description:
+
+Under certain circumstances, bash can incorrectly save a lookahead character and
+return it on a subsequent call, even when reading a new line.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/parse.y 2014-07-30 10:14:31.000000000 -0400
+--- parse.y 2014-09-25 20:20:21.000000000 -0400
+***************
+*** 2954,2957 ****
+--- 2954,2959 ----
+ word_desc_to_read = (WORD_DESC *)NULL;
+
++ eol_ungetc_lookahead = 0;
++
+ current_token = '\n'; /* XXX */
+ last_read_token = '\n';
+*** bash-4.3/y.tab.c 2014-07-30 10:14:32.000000000 -0400
+--- y.tab.c 2014-09-25 20:21:48.000000000 -0400
+***************
+*** 5266,5269 ****
+--- 5266,5271 ----
+ word_desc_to_read = (WORD_DESC *)NULL;
+
++ eol_ungetc_lookahead = 0;
++
+ current_token = '\n'; /* XXX */
+ last_read_token = '\n';
+***************
+*** 8540,8542 ****
+ }
+ #endif /* HANDLE_MULTIBYTE */
+-
+--- 8542,8543 ----
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 25
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 26
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-027
+
+Bug-Reported-by: Florian Weimer <fweimer@redhat.com>
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+This patch changes the encoding bash uses for exported functions to avoid
+clashes with shell variables and to avoid depending only on an environment
+variable's contents to determine whether or not to interpret it as a shell
+function.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/variables.c 2014-09-25 23:02:18.000000000 -0400
+--- variables.c 2014-09-27 20:52:04.000000000 -0400
+***************
+*** 84,87 ****
+--- 84,92 ----
+ #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
+
++ #define BASHFUNC_PREFIX "BASH_FUNC_"
++ #define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */
++ #define BASHFUNC_SUFFIX "%%"
++ #define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */
++
+ extern char **environ;
+
+***************
+*** 280,284 ****
+ static void dispose_temporary_env __P((sh_free_func_t *));
+
+! static inline char *mk_env_string __P((const char *, const char *));
+ static char **make_env_array_from_var_list __P((SHELL_VAR **));
+ static char **make_var_export_array __P((VAR_CONTEXT *));
+--- 285,289 ----
+ static void dispose_temporary_env __P((sh_free_func_t *));
+
+! static inline char *mk_env_string __P((const char *, const char *, int));
+ static char **make_env_array_from_var_list __P((SHELL_VAR **));
+ static char **make_var_export_array __P((VAR_CONTEXT *));
+***************
+*** 350,369 ****
+ /* If exported function, define it now. Don't import functions from
+ the environment in privileged mode. */
+! if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
+ {
+ string_length = strlen (string);
+! temp_string = (char *)xmalloc (3 + string_length + char_index);
+
+! strcpy (temp_string, name);
+! temp_string[char_index] = ' ';
+! strcpy (temp_string + char_index + 1, string);
+
+ /* Don't import function names that are invalid identifiers from the
+ environment, though we still allow them to be defined as shell
+ variables. */
+! if (legal_identifier (name))
+! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
+
+! if (temp_var = find_function (name))
+ {
+ VSETATTR (temp_var, (att_exported|att_imported));
+--- 355,385 ----
+ /* If exported function, define it now. Don't import functions from
+ the environment in privileged mode. */
+! if (privmode == 0 && read_but_dont_execute == 0 &&
+! STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) &&
+! STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) &&
+! STREQN ("() {", string, 4))
+ {
++ size_t namelen;
++ char *tname; /* desired imported function name */
++
++ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN;
++
++ tname = name + BASHFUNC_PREFLEN; /* start of func name */
++ tname[namelen] = '\0'; /* now tname == func name */
++
+ string_length = strlen (string);
+! temp_string = (char *)xmalloc (namelen + string_length + 2);
+
+! memcpy (temp_string, tname, namelen);
+! temp_string[namelen] = ' ';
+! memcpy (temp_string + namelen + 1, string, string_length + 1);
+
+ /* Don't import function names that are invalid identifiers from the
+ environment, though we still allow them to be defined as shell
+ variables. */
+! if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname)))
+! parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
+
+! if (temp_var = find_function (tname))
+ {
+ VSETATTR (temp_var, (att_exported|att_imported));
+***************
+*** 378,383 ****
+ }
+ last_command_exit_value = 1;
+! report_error (_("error importing function definition for `%s'"), name);
+ }
+ }
+ #if defined (ARRAY_VARS)
+--- 394,402 ----
+ }
+ last_command_exit_value = 1;
+! report_error (_("error importing function definition for `%s'"), tname);
+ }
++
++ /* Restore original suffix */
++ tname[namelen] = BASHFUNC_SUFFIX[0];
+ }
+ #if defined (ARRAY_VARS)
+***************
+*** 2955,2959 ****
+
+ INVALIDATE_EXPORTSTR (var);
+! var->exportstr = mk_env_string (name, value);
+
+ array_needs_making = 1;
+--- 2974,2978 ----
+
+ INVALIDATE_EXPORTSTR (var);
+! var->exportstr = mk_env_string (name, value, 0);
+
+ array_needs_making = 1;
+***************
+*** 3853,3871 ****
+
+ static inline char *
+! mk_env_string (name, value)
+ const char *name, *value;
+ {
+! int name_len, value_len;
+! char *p;
+
+ name_len = strlen (name);
+ value_len = STRLEN (value);
+! p = (char *)xmalloc (2 + name_len + value_len);
+! strcpy (p, name);
+! p[name_len] = '=';
+ if (value && *value)
+! strcpy (p + name_len + 1, value);
+ else
+! p[name_len + 1] = '\0';
+ return (p);
+ }
+--- 3872,3911 ----
+
+ static inline char *
+! mk_env_string (name, value, isfunc)
+ const char *name, *value;
++ int isfunc;
+ {
+! size_t name_len, value_len;
+! char *p, *q;
+
+ name_len = strlen (name);
+ value_len = STRLEN (value);
+!
+! /* If we are exporting a shell function, construct the encoded function
+! name. */
+! if (isfunc && value)
+! {
+! p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2);
+! q = p;
+! memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN);
+! q += BASHFUNC_PREFLEN;
+! memcpy (q, name, name_len);
+! q += name_len;
+! memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
+! q += BASHFUNC_SUFFLEN;
+! }
+! else
+! {
+! p = (char *)xmalloc (2 + name_len + value_len);
+! memcpy (p, name, name_len);
+! q = p + name_len;
+! }
+!
+! q[0] = '=';
+ if (value && *value)
+! memcpy (q + 1, value, value_len + 1);
+ else
+! q[1] = '\0';
+!
+ return (p);
+ }
+***************
+*** 3953,3957 ****
+ using the cached exportstr... */
+ list[list_index] = USE_EXPORTSTR ? savestring (value)
+! : mk_env_string (var->name, value);
+
+ if (USE_EXPORTSTR == 0)
+--- 3993,3997 ----
+ using the cached exportstr... */
+ list[list_index] = USE_EXPORTSTR ? savestring (value)
+! : mk_env_string (var->name, value, function_p (var));
+
+ if (USE_EXPORTSTR == 0)
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 26
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 27
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-028
+
+Bug-Reported-by: Florian Weimer <fweimer@redhat.com>
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+There are two local buffer overflows in parse.y that can cause the shell
+to dump core when given many here-documents attached to a single command
+or many nested loops.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/parse.y 2014-09-25 23:02:35.000000000 -0400
+--- parse.y 2014-09-29 16:47:03.000000000 -0400
+***************
+*** 169,172 ****
+--- 169,175 ----
+ static int reserved_word_acceptable __P((int));
+ static int yylex __P((void));
++
++ static void push_heredoc __P((REDIRECT *));
++ static char *mk_alexpansion __P((char *));
+ static int alias_expand_token __P((char *));
+ static int time_command_acceptable __P((void));
+***************
+*** 266,270 ****
+ /* Variables to manage the task of reading here documents, because we need to
+ defer the reading until after a complete command has been collected. */
+! static REDIRECT *redir_stack[10];
+ int need_here_doc;
+
+--- 269,275 ----
+ /* Variables to manage the task of reading here documents, because we need to
+ defer the reading until after a complete command has been collected. */
+! #define HEREDOC_MAX 16
+!
+! static REDIRECT *redir_stack[HEREDOC_MAX];
+ int need_here_doc;
+
+***************
+*** 308,312 ****
+ index is decremented after a case, select, or for command is parsed. */
+ #define MAX_CASE_NEST 128
+! static int word_lineno[MAX_CASE_NEST];
+ static int word_top = -1;
+
+--- 313,317 ----
+ index is decremented after a case, select, or for command is parsed. */
+ #define MAX_CASE_NEST 128
+! static int word_lineno[MAX_CASE_NEST+1];
+ static int word_top = -1;
+
+***************
+*** 521,525 ****
+ redir.filename = $2;
+ $$ = make_redirection (source, r_reading_until, redir, 0);
+! redir_stack[need_here_doc++] = $$;
+ }
+ | NUMBER LESS_LESS WORD
+--- 526,530 ----
+ redir.filename = $2;
+ $$ = make_redirection (source, r_reading_until, redir, 0);
+! push_heredoc ($$);
+ }
+ | NUMBER LESS_LESS WORD
+***************
+*** 528,532 ****
+ redir.filename = $3;
+ $$ = make_redirection (source, r_reading_until, redir, 0);
+! redir_stack[need_here_doc++] = $$;
+ }
+ | REDIR_WORD LESS_LESS WORD
+--- 533,537 ----
+ redir.filename = $3;
+ $$ = make_redirection (source, r_reading_until, redir, 0);
+! push_heredoc ($$);
+ }
+ | REDIR_WORD LESS_LESS WORD
+***************
+*** 535,539 ****
+ redir.filename = $3;
+ $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
+! redir_stack[need_here_doc++] = $$;
+ }
+ | LESS_LESS_MINUS WORD
+--- 540,544 ----
+ redir.filename = $3;
+ $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
+! push_heredoc ($$);
+ }
+ | LESS_LESS_MINUS WORD
+***************
+*** 542,546 ****
+ redir.filename = $2;
+ $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
+! redir_stack[need_here_doc++] = $$;
+ }
+ | NUMBER LESS_LESS_MINUS WORD
+--- 547,551 ----
+ redir.filename = $2;
+ $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
+! push_heredoc ($$);
+ }
+ | NUMBER LESS_LESS_MINUS WORD
+***************
+*** 549,553 ****
+ redir.filename = $3;
+ $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
+! redir_stack[need_here_doc++] = $$;
+ }
+ | REDIR_WORD LESS_LESS_MINUS WORD
+--- 554,558 ----
+ redir.filename = $3;
+ $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
+! push_heredoc ($$);
+ }
+ | REDIR_WORD LESS_LESS_MINUS WORD
+***************
+*** 556,560 ****
+ redir.filename = $3;
+ $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
+! redir_stack[need_here_doc++] = $$;
+ }
+ | LESS_LESS_LESS WORD
+--- 561,565 ----
+ redir.filename = $3;
+ $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
+! push_heredoc ($$);
+ }
+ | LESS_LESS_LESS WORD
+***************
+*** 2637,2640 ****
+--- 2642,2660 ----
+ static int esacs_needed_count;
+
++ static void
++ push_heredoc (r)
++ REDIRECT *r;
++ {
++ if (need_here_doc >= HEREDOC_MAX)
++ {
++ last_command_exit_value = EX_BADUSAGE;
++ need_here_doc = 0;
++ report_syntax_error (_("maximum here-document count exceeded"));
++ reset_parser ();
++ exit_shell (last_command_exit_value);
++ }
++ redir_stack[need_here_doc++] = r;
++ }
++
+ void
+ gather_here_documents ()
+*** bash-4.3/y.tab.c 2014-10-01 11:38:24.000000000 -0400
+--- y.tab.c 2014-10-01 12:46:11.000000000 -0400
+***************
+*** 169,173 ****
+
+ /* Copy the first part of user declarations. */
+! #line 21 "/usr/homes/chet/src/bash/src/parse.y"
+
+ #include "config.h"
+--- 169,173 ----
+
+ /* Copy the first part of user declarations. */
+! #line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+
+ #include "config.h"
+***************
+*** 320,323 ****
+--- 320,326 ----
+ static int reserved_word_acceptable __P((int));
+ static int yylex __P((void));
++
++ static void push_heredoc __P((REDIRECT *));
++ static char *mk_alexpansion __P((char *));
+ static int alias_expand_token __P((char *));
+ static int time_command_acceptable __P((void));
+***************
+*** 417,421 ****
+ /* Variables to manage the task of reading here documents, because we need to
+ defer the reading until after a complete command has been collected. */
+! static REDIRECT *redir_stack[10];
+ int need_here_doc;
+
+--- 420,426 ----
+ /* Variables to manage the task of reading here documents, because we need to
+ defer the reading until after a complete command has been collected. */
+! #define HEREDOC_MAX 16
+!
+! static REDIRECT *redir_stack[HEREDOC_MAX];
+ int need_here_doc;
+
+***************
+*** 459,463 ****
+ index is decremented after a case, select, or for command is parsed. */
+ #define MAX_CASE_NEST 128
+! static int word_lineno[MAX_CASE_NEST];
+ static int word_top = -1;
+
+--- 464,468 ----
+ index is decremented after a case, select, or for command is parsed. */
+ #define MAX_CASE_NEST 128
+! static int word_lineno[MAX_CASE_NEST+1];
+ static int word_top = -1;
+
+***************
+*** 493,497 ****
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef union YYSTYPE
+! #line 324 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ WORD_DESC *word; /* the word that we read. */
+--- 498,502 ----
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef union YYSTYPE
+! #line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ WORD_DESC *word; /* the word that we read. */
+***************
+*** 504,508 ****
+ }
+ /* Line 193 of yacc.c. */
+! #line 507 "y.tab.c"
+ YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+--- 509,513 ----
+ }
+ /* Line 193 of yacc.c. */
+! #line 512 "y.tab.c"
+ YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+***************
+*** 517,521 ****
+
+ /* Line 216 of yacc.c. */
+! #line 520 "y.tab.c"
+
+ #ifdef short
+--- 522,526 ----
+
+ /* Line 216 of yacc.c. */
+! #line 525 "y.tab.c"
+
+ #ifdef short
+***************
+*** 887,907 ****
+ static const yytype_uint16 yyrline[] =
+ {
+! 0, 377, 377, 388, 397, 412, 422, 424, 428, 434,
+! 440, 446, 452, 458, 464, 470, 476, 482, 488, 494,
+! 500, 506, 512, 518, 525, 532, 539, 546, 553, 560,
+! 566, 572, 578, 584, 590, 596, 602, 608, 614, 620,
+! 626, 632, 638, 644, 650, 656, 662, 668, 674, 680,
+! 686, 692, 700, 702, 704, 708, 712, 723, 725, 729,
+! 731, 733, 749, 751, 755, 757, 759, 761, 763, 765,
+! 767, 769, 771, 773, 775, 779, 784, 789, 794, 799,
+! 804, 809, 814, 821, 826, 831, 836, 843, 848, 853,
+! 858, 863, 868, 875, 880, 885, 892, 895, 898, 902,
+! 904, 935, 942, 947, 964, 969, 986, 993, 995, 997,
+! 1002, 1006, 1010, 1014, 1016, 1018, 1022, 1023, 1027, 1029,
+! 1031, 1033, 1037, 1039, 1041, 1043, 1045, 1047, 1051, 1053,
+! 1062, 1070, 1071, 1077, 1078, 1085, 1089, 1091, 1093, 1100,
+! 1102, 1104, 1108, 1109, 1112, 1114, 1116, 1120, 1121, 1130,
+! 1143, 1159, 1174, 1176, 1178, 1185, 1188, 1192, 1194, 1200,
+! 1206, 1223, 1243, 1245, 1268, 1272, 1274, 1276
+ };
+ #endif
+--- 892,912 ----
+ static const yytype_uint16 yyrline[] =
+ {
+! 0, 382, 382, 393, 402, 417, 427, 429, 433, 439,
+! 445, 451, 457, 463, 469, 475, 481, 487, 493, 499,
+! 505, 511, 517, 523, 530, 537, 544, 551, 558, 565,
+! 571, 577, 583, 589, 595, 601, 607, 613, 619, 625,
+! 631, 637, 643, 649, 655, 661, 667, 673, 679, 685,
+! 691, 697, 705, 707, 709, 713, 717, 728, 730, 734,
+! 736, 738, 754, 756, 760, 762, 764, 766, 768, 770,
+! 772, 774, 776, 778, 780, 784, 789, 794, 799, 804,
+! 809, 814, 819, 826, 831, 836, 841, 848, 853, 858,
+! 863, 868, 873, 880, 885, 890, 897, 900, 903, 907,
+! 909, 940, 947, 952, 969, 974, 991, 998, 1000, 1002,
+! 1007, 1011, 1015, 1019, 1021, 1023, 1027, 1028, 1032, 1034,
+! 1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 1056, 1058,
+! 1067, 1075, 1076, 1082, 1083, 1090, 1094, 1096, 1098, 1105,
+! 1107, 1109, 1113, 1114, 1117, 1119, 1121, 1125, 1126, 1135,
+! 1148, 1164, 1179, 1181, 1183, 1190, 1193, 1197, 1199, 1205,
+! 1211, 1228, 1248, 1250, 1273, 1277, 1279, 1281
+ };
+ #endif
+***************
+*** 2094,2098 ****
+ {
+ case 2:
+! #line 378 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ /* Case of regular command. Discard the error
+--- 2099,2103 ----
+ {
+ case 2:
+! #line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Case of regular command. Discard the error
+***************
+*** 2108,2112 ****
+
+ case 3:
+! #line 389 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ /* Case of regular command, but not a very
+--- 2113,2117 ----
+
+ case 3:
+! #line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Case of regular command, but not a very
+***************
+*** 2120,2124 ****
+
+ case 4:
+! #line 398 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ /* Error during parsing. Return NULL command. */
+--- 2125,2129 ----
+
+ case 4:
+! #line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Error during parsing. Return NULL command. */
+***************
+*** 2138,2142 ****
+
+ case 5:
+! #line 413 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ /* Case of EOF seen by itself. Do ignoreeof or
+--- 2143,2147 ----
+
+ case 5:
+! #line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Case of EOF seen by itself. Do ignoreeof or
+***************
+*** 2149,2163 ****
+
+ case 6:
+! #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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+--- 2154,2168 ----
+
+ case 6:
+! #line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
+ break;
+
+ case 7:
+! #line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
+ break;
+
+ case 8:
+! #line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2168,2172 ****
+
+ case 9:
+! #line 435 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+--- 2173,2177 ----
+
+ case 9:
+! #line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2177,2181 ****
+
+ case 10:
+! #line 441 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2182,2186 ----
+
+ case 10:
+! #line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2186,2190 ****
+
+ case 11:
+! #line 447 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2191,2195 ----
+
+ case 11:
+! #line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2195,2199 ****
+
+ case 12:
+! #line 453 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2200,2204 ----
+
+ case 12:
+! #line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2204,2208 ****
+
+ case 13:
+! #line 459 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2209,2213 ----
+
+ case 13:
+! #line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2213,2217 ****
+
+ case 14:
+! #line 465 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+--- 2218,2222 ----
+
+ case 14:
+! #line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2222,2226 ****
+
+ case 15:
+! #line 471 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2227,2231 ----
+
+ case 15:
+! #line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2231,2235 ****
+
+ case 16:
+! #line 477 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2236,2240 ----
+
+ case 16:
+! #line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2240,2244 ****
+
+ case 17:
+! #line 483 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+--- 2245,2249 ----
+
+ case 17:
+! #line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2249,2253 ****
+
+ case 18:
+! #line 489 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2254,2258 ----
+
+ case 18:
+! #line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2258,2262 ****
+
+ case 19:
+! #line 495 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2263,2267 ----
+
+ case 19:
+! #line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2267,2271 ****
+
+ case 20:
+! #line 501 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+--- 2272,2276 ----
+
+ case 20:
+! #line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2276,2280 ****
+
+ case 21:
+! #line 507 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2281,2285 ----
+
+ case 21:
+! #line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2285,2289 ****
+
+ case 22:
+! #line 513 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2290,2294 ----
+
+ case 22:
+! #line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2294,2358 ****
+
+ case 23:
+! #line 519 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
+! redir_stack[need_here_doc++] = (yyval.redirect);
+ }
+ break;
+
+ case 24:
+! #line 526 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
+! redir_stack[need_here_doc++] = (yyval.redirect);
+ }
+ break;
+
+ case 25:
+! #line 533 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
+! redir_stack[need_here_doc++] = (yyval.redirect);
+ }
+ break;
+
+ case 26:
+! #line 540 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
+! redir_stack[need_here_doc++] = (yyval.redirect);
+ }
+ break;
+
+ case 27:
+! #line 547 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
+! redir_stack[need_here_doc++] = (yyval.redirect);
+ }
+ break;
+
+ case 28:
+! #line 554 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
+! redir_stack[need_here_doc++] = (yyval.redirect);
+ }
+ break;
+
+ case 29:
+! #line 561 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+--- 2299,2363 ----
+
+ case 23:
+! #line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
+! push_heredoc ((yyval.redirect));
+ }
+ break;
+
+ case 24:
+! #line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
+! push_heredoc ((yyval.redirect));
+ }
+ break;
+
+ case 25:
+! #line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
+! push_heredoc ((yyval.redirect));
+ }
+ break;
+
+ case 26:
+! #line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
+! push_heredoc ((yyval.redirect));
+ }
+ break;
+
+ case 27:
+! #line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
+! push_heredoc ((yyval.redirect));
+ }
+ break;
+
+ case 28:
+! #line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
+! push_heredoc ((yyval.redirect));
+ }
+ break;
+
+ case 29:
+! #line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2363,2367 ****
+
+ case 30:
+! #line 567 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2368,2372 ----
+
+ case 30:
+! #line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2372,2376 ****
+
+ case 31:
+! #line 573 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2377,2381 ----
+
+ case 31:
+! #line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2381,2385 ****
+
+ case 32:
+! #line 579 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+--- 2386,2390 ----
+
+ case 32:
+! #line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2390,2394 ****
+
+ case 33:
+! #line 585 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2395,2399 ----
+
+ case 33:
+! #line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2399,2403 ****
+
+ case 34:
+! #line 591 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2404,2408 ----
+
+ case 34:
+! #line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2408,2412 ****
+
+ case 35:
+! #line 597 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+--- 2413,2417 ----
+
+ case 35:
+! #line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2417,2421 ****
+
+ case 36:
+! #line 603 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2422,2426 ----
+
+ case 36:
+! #line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2426,2430 ****
+
+ case 37:
+! #line 609 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2431,2435 ----
+
+ case 37:
+! #line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2435,2439 ****
+
+ case 38:
+! #line 615 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+--- 2440,2444 ----
+
+ case 38:
+! #line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2444,2448 ****
+
+ case 39:
+! #line 621 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2449,2453 ----
+
+ case 39:
+! #line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2453,2457 ****
+
+ case 40:
+! #line 627 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2458,2462 ----
+
+ case 40:
+! #line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2462,2466 ****
+
+ case 41:
+! #line 633 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+--- 2467,2471 ----
+
+ case 41:
+! #line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2471,2475 ****
+
+ case 42:
+! #line 639 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2476,2480 ----
+
+ case 42:
+! #line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2480,2484 ****
+
+ case 43:
+! #line 645 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2485,2489 ----
+
+ case 43:
+! #line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2489,2493 ****
+
+ case 44:
+! #line 651 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+--- 2494,2498 ----
+
+ case 44:
+! #line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2498,2502 ****
+
+ case 45:
+! #line 657 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2503,2507 ----
+
+ case 45:
+! #line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2507,2511 ****
+
+ case 46:
+! #line 663 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2512,2516 ----
+
+ case 46:
+! #line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2516,2520 ****
+
+ case 47:
+! #line 669 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+--- 2521,2525 ----
+
+ case 47:
+! #line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2525,2529 ****
+
+ case 48:
+! #line 675 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2530,2534 ----
+
+ case 48:
+! #line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2534,2538 ****
+
+ case 49:
+! #line 681 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2539,2543 ----
+
+ case 49:
+! #line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2543,2547 ****
+
+ case 50:
+! #line 687 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+--- 2548,2552 ----
+
+ case 50:
+! #line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2552,2556 ****
+
+ case 51:
+! #line 693 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+--- 2557,2561 ----
+
+ case 51:
+! #line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2561,2580 ****
+
+ case 52:
+! #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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 54:
+! #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 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
+--- 2566,2585 ----
+
+ case 52:
+! #line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 53:
+! #line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 54:
+! #line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
+ break;
+
+ case 55:
+! #line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
+***************
+*** 2583,2587 ****
+
+ case 56:
+! #line 713 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ register REDIRECT *t;
+--- 2588,2592 ----
+
+ case 56:
+! #line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ register REDIRECT *t;
+***************
+*** 2595,2619 ****
+
+ case 57:
+! #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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
+ break;
+
+ case 60:
+! #line 732 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 61:
+! #line 734 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ COMMAND *tc;
+--- 2600,2624 ----
+
+ case 57:
+! #line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
+ break;
+
+ case 58:
+! #line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
+ break;
+
+ case 59:
+! #line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
+ break;
+
+ case 60:
+! #line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 61:
+! #line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ COMMAND *tc;
+***************
+*** 2634,2703 ****
+
+ case 62:
+! #line 750 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 63:
+! #line 752 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 64:
+! #line 756 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 65:
+! #line 758 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 66:
+! #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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 69:
+! #line 766 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 70:
+! #line 768 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 71:
+! #line 770 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 72:
+! #line 772 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 73:
+! #line 774 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 74:
+! #line 776 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 75:
+! #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]);
+--- 2639,2708 ----
+
+ case 62:
+! #line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 63:
+! #line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 64:
+! #line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 65:
+! #line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 66:
+! #line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
+ break;
+
+ case 67:
+! #line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
+ break;
+
+ case 68:
+! #line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 69:
+! #line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 70:
+! #line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 71:
+! #line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 72:
+! #line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 73:
+! #line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 74:
+! #line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 75:
+! #line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2707,2711 ****
+
+ case 76:
+! #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]);
+--- 2712,2716 ----
+
+ case 76:
+! #line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2715,2719 ****
+
+ case 77:
+! #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]);
+--- 2720,2724 ----
+
+ case 77:
+! #line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2723,2727 ****
+
+ case 78:
+! #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]);
+--- 2728,2732 ----
+
+ case 78:
+! #line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2731,2735 ****
+
+ case 79:
+! #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]);
+--- 2736,2740 ----
+
+ case 79:
+! #line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2739,2743 ****
+
+ case 80:
+! #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]);
+--- 2744,2748 ----
+
+ case 80:
+! #line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2747,2751 ****
+
+ case 81:
+! #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]);
+--- 2752,2756 ----
+
+ case 81:
+! #line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
+***************
+*** 2755,2759 ****
+
+ case 82:
+! #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]);
+--- 2760,2764 ----
+
+ case 82:
+! #line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
+***************
+*** 2763,2767 ****
+
+ case 83:
+! #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);
+--- 2768,2772 ----
+
+ case 83:
+! #line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
+***************
+*** 2771,2775 ****
+
+ case 84:
+! #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);
+--- 2776,2780 ----
+
+ case 84:
+! #line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
+***************
+*** 2779,2783 ****
+
+ case 85:
+! #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);
+--- 2784,2788 ----
+
+ case 85:
+! #line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
+***************
+*** 2787,2791 ****
+
+ case 86:
+! #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);
+--- 2792,2796 ----
+
+ case 86:
+! #line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
+***************
+*** 2795,2799 ****
+
+ case 87:
+! #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]);
+--- 2800,2804 ----
+
+ case 87:
+! #line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2803,2807 ****
+
+ case 88:
+! #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]);
+--- 2808,2812 ----
+
+ case 88:
+! #line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2811,2815 ****
+
+ case 89:
+! #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]);
+--- 2816,2820 ----
+
+ case 89:
+! #line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2819,2823 ****
+
+ case 90:
+! #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]);
+--- 2824,2828 ----
+
+ case 90:
+! #line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2827,2831 ****
+
+ case 91:
+! #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]);
+--- 2832,2836 ----
+
+ case 91:
+! #line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2835,2839 ****
+
+ case 92:
+! #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]);
+--- 2840,2844 ----
+
+ case 92:
+! #line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+***************
+*** 2843,2847 ****
+
+ case 93:
+! #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]);
+--- 2848,2852 ----
+
+ case 93:
+! #line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
+***************
+*** 2851,2855 ****
+
+ case 94:
+! #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]);
+--- 2856,2860 ----
+
+ case 94:
+! #line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
+***************
+*** 2859,2863 ****
+
+ case 95:
+! #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]);
+--- 2864,2868 ----
+
+ case 95:
+! #line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
+***************
+*** 2867,2891 ****
+
+ case 96:
+! #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 "/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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 100:
+! #line 905 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ COMMAND *tc;
+--- 2872,2896 ----
+
+ case 96:
+! #line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
+ break;
+
+ case 97:
+! #line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
+ break;
+
+ case 98:
+! #line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
+ break;
+
+ case 99:
+! #line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 100:
+! #line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ COMMAND *tc;
+***************
+*** 2919,2923 ****
+
+ case 101:
+! #line 936 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
+--- 2924,2928 ----
+
+ case 101:
+! #line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
+***************
+*** 2927,2931 ****
+
+ case 102:
+! #line 943 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
+--- 2932,2936 ----
+
+ case 102:
+! #line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
+***************
+*** 2935,2939 ****
+
+ case 103:
+! #line 948 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ COMMAND *tc;
+--- 2940,2944 ----
+
+ case 103:
+! #line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ COMMAND *tc;
+***************
+*** 2955,2959 ****
+
+ case 104:
+! #line 965 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
+--- 2960,2964 ----
+
+ case 104:
+! #line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
+***************
+*** 2963,2967 ****
+
+ case 105:
+! #line 970 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ COMMAND *tc;
+--- 2968,2972 ----
+
+ case 105:
+! #line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ COMMAND *tc;
+***************
+*** 2983,2987 ****
+
+ case 106:
+! #line 987 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
+--- 2988,2992 ----
+
+ case 106:
+! #line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
+***************
+*** 2991,3105 ****
+
+ case 107:
+! #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 "/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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
+ break;
+
+ case 111:
+! #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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(2) - (3)].command); }
+ break;
+
+ case 113:
+! #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 "/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 "/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 "/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 "/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 "/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 "/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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 123:
+! #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 "/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 "/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 "/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 "/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 "/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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.command) = (yyvsp[(2) - (2)].command);
+--- 2996,3110 ----
+
+ case 107:
+! #line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
+ break;
+
+ case 108:
+! #line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
+ break;
+
+ case 109:
+! #line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
+ break;
+
+ case 110:
+! #line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
+ break;
+
+ case 111:
+! #line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
+ break;
+
+ case 112:
+! #line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(2) - (3)].command); }
+ break;
+
+ case 113:
+! #line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
+ break;
+
+ case 114:
+! #line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
+ break;
+
+ case 115:
+! #line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
+ break;
+
+ case 117:
+! #line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
+ break;
+
+ case 118:
+! #line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
+ break;
+
+ case 119:
+! #line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
+ break;
+
+ case 120:
+! #line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
+ break;
+
+ case 121:
+! #line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
+ break;
+
+ case 122:
+! #line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 123:
+! #line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
+ break;
+
+ case 124:
+! #line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 125:
+! #line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/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 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 127:
+! #line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/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 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
+ break;
+
+ case 129:
+! #line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
+ break;
+
+ case 130:
+! #line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = (yyvsp[(2) - (2)].command);
+***************
+*** 3110,3114 ****
+
+ case 132:
+! #line 1072 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.command) = (yyvsp[(2) - (2)].command);
+--- 3115,3119 ----
+
+ case 132:
+! #line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = (yyvsp[(2) - (2)].command);
+***************
+*** 3117,3121 ****
+
+ case 134:
+! #line 1079 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ if ((yyvsp[(1) - (3)].command)->type == cm_connection)
+--- 3122,3126 ----
+
+ case 134:
+! #line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(1) - (3)].command)->type == cm_connection)
+***************
+*** 3127,3141 ****
+
+ case 136:
+! #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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ if ((yyvsp[(1) - (4)].command)->type == cm_connection)
+--- 3132,3146 ----
+
+ case 136:
+! #line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
+ break;
+
+ case 137:
+! #line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
+ break;
+
+ case 138:
+! #line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(1) - (4)].command)->type == cm_connection)
+***************
+*** 3147,3181 ****
+
+ case 139:
+! #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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 144:
+! #line 1113 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.number) = '\n'; }
+ break;
+
+ case 145:
+! #line 1115 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.number) = ';'; }
+ break;
+
+ case 146:
+! #line 1117 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.number) = yacc_EOF; }
+ break;
+
+ case 149:
+! #line 1131 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.command) = (yyvsp[(1) - (1)].command);
+--- 3152,3186 ----
+
+ case 139:
+! #line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
+ break;
+
+ case 140:
+! #line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
+ break;
+
+ case 141:
+! #line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 144:
+! #line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = '\n'; }
+ break;
+
+ case 145:
+! #line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = ';'; }
+ break;
+
+ case 146:
+! #line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = yacc_EOF; }
+ break;
+
+ case 149:
+! #line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = (yyvsp[(1) - (1)].command);
+***************
+*** 3193,3197 ****
+
+ case 150:
+! #line 1144 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ if ((yyvsp[(1) - (2)].command)->type == cm_connection)
+--- 3198,3202 ----
+
+ case 150:
+! #line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(1) - (2)].command)->type == cm_connection)
+***************
+*** 3212,3216 ****
+
+ case 151:
+! #line 1160 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ (yyval.command) = (yyvsp[(1) - (2)].command);
+--- 3217,3221 ----
+
+ case 151:
+! #line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = (yyvsp[(1) - (2)].command);
+***************
+*** 3228,3242 ****
+
+ case 152:
+! #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 "/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 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ if ((yyvsp[(1) - (3)].command)->type == cm_connection)
+--- 3233,3247 ----
+
+ case 152:
+! #line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
+ break;
+
+ case 153:
+! #line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
+ break;
+
+ case 154:
+! #line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(1) - (3)].command)->type == cm_connection)
+***************
+*** 3248,3267 ****
+
+ case 155:
+! #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 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 157:
+! #line 1193 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 158:
+! #line 1195 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ if ((yyvsp[(2) - (2)].command))
+--- 3253,3272 ----
+
+ case 155:
+! #line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
+ break;
+
+ case 156:
+! #line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 157:
+! #line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 158:
+! #line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(2) - (2)].command))
+***************
+*** 3272,3276 ****
+
+ case 159:
+! #line 1201 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ if ((yyvsp[(2) - (2)].command))
+--- 3277,3281 ----
+
+ case 159:
+! #line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(2) - (2)].command))
+***************
+*** 3281,3285 ****
+
+ case 160:
+! #line 1207 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ ELEMENT x;
+--- 3286,3290 ----
+
+ case 160:
+! #line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ ELEMENT x;
+***************
+*** 3301,3305 ****
+
+ case 161:
+! #line 1224 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ ELEMENT x;
+--- 3306,3310 ----
+
+ case 161:
+! #line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ ELEMENT x;
+***************
+*** 3322,3331 ****
+
+ case 162:
+! #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 "/usr/homes/chet/src/bash/src/parse.y"
+ {
+ /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
+--- 3327,3336 ----
+
+ case 162:
+! #line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
+ break;
+
+ case 163:
+! #line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
+***************
+*** 3353,3372 ****
+
+ case 164:
+! #line 1269 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 165:
+! #line 1273 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE; }
+ break;
+
+ case 166:
+! #line 1275 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+
+ case 167:
+! #line 1277 "/usr/homes/chet/src/bash/src/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+--- 3358,3377 ----
+
+ case 164:
+! #line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 165:
+! #line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE; }
+ break;
+
+ case 166:
+! #line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+
+ case 167:
+! #line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+***************
+*** 3374,3378 ****
+
+ /* Line 1267 of yacc.c. */
+! #line 3377 "y.tab.c"
+ default: break;
+ }
+--- 3379,3383 ----
+
+ /* Line 1267 of yacc.c. */
+! #line 3382 "y.tab.c"
+ default: break;
+ }
+***************
+*** 3588,3592 ****
+
+
+! #line 1279 "/usr/homes/chet/src/bash/src/parse.y"
+
+
+--- 3593,3597 ----
+
+
+! #line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+
+
+***************
+*** 4949,4952 ****
+--- 4954,4972 ----
+ static int esacs_needed_count;
+
++ static void
++ push_heredoc (r)
++ REDIRECT *r;
++ {
++ if (need_here_doc >= HEREDOC_MAX)
++ {
++ last_command_exit_value = EX_BADUSAGE;
++ need_here_doc = 0;
++ report_syntax_error (_("maximum here-document count exceeded"));
++ reset_parser ();
++ exit_shell (last_command_exit_value);
++ }
++ redir_stack[need_here_doc++] = r;
++ }
++
+ void
+ gather_here_documents ()
+***************
+*** 8542,8543 ****
+--- 8562,8564 ----
+ }
+ #endif /* HANDLE_MULTIBYTE */
++
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 27
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 28
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-029
+
+Bug-Reported-by: Michal Zalewski <lcamtuf@coredump.cx>
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+When bash is parsing a function definition that contains a here-document
+delimited by end-of-file (or end-of-string), it leaves the closing delimiter
+uninitialized. This can result in an invalid memory access when the parsed
+function is later copied.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/make_cmd.c 2011-12-16 08:08:01.000000000 -0500
+--- make_cmd.c 2014-10-02 11:24:23.000000000 -0400
+***************
+*** 693,696 ****
+--- 693,697 ----
+ temp->redirector = source;
+ temp->redirectee = dest_and_filename;
++ temp->here_doc_eof = 0;
+ temp->instruction = instruction;
+ temp->flags = 0;
+*** bash-4.3/copy_cmd.c 2009-09-11 16:28:02.000000000 -0400
+--- copy_cmd.c 2014-10-02 11:24:23.000000000 -0400
+***************
+*** 127,131 ****
+ case r_reading_until:
+ case r_deblank_reading_until:
+! new_redirect->here_doc_eof = savestring (redirect->here_doc_eof);
+ /*FALLTHROUGH*/
+ case r_reading_string:
+--- 127,131 ----
+ case r_reading_until:
+ case r_deblank_reading_until:
+! new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0;
+ /*FALLTHROUGH*/
+ case r_reading_string:
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 28
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 29
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-030
+
+Bug-Reported-by: Michal Zalewski <lcamtuf@coredump.cx>
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+A combination of nested command substitutions and function importing from
+the environment can cause bash to execute code appearing in the environment
+variable value following the function definition.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/builtins/evalstring.c 2014-10-01 12:57:47.000000000 -0400
+--- builtins/evalstring.c 2014-10-03 11:57:04.000000000 -0400
+***************
+*** 309,318 ****
+ struct fd_bitmap *bitmap;
+
+! if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
+ {
+! internal_warning ("%s: ignoring function definition attempt", from_file);
+! should_jump_to_top_level = 0;
+! last_result = last_command_exit_value = EX_BADUSAGE;
+! break;
+ }
+
+--- 313,335 ----
+ struct fd_bitmap *bitmap;
+
+! if (flags & SEVAL_FUNCDEF)
+ {
+! char *x;
+!
+! /* If the command parses to something other than a straight
+! function definition, or if we have not consumed the entire
+! string, or if the parser has transformed the function
+! name (as parsing will if it begins or ends with shell
+! whitespace, for example), reject the attempt */
+! if (command->type != cm_function_def ||
+! ((x = parser_remaining_input ()) && *x) ||
+! (STREQ (from_file, command->value.Function_def->name->word) == 0))
+! {
+! internal_warning (_("%s: ignoring function definition attempt"), from_file);
+! should_jump_to_top_level = 0;
+! last_result = last_command_exit_value = EX_BADUSAGE;
+! reset_parser ();
+! break;
+! }
+ }
+
+***************
+*** 379,383 ****
+
+ if (flags & SEVAL_ONECMD)
+! break;
+ }
+ }
+--- 396,403 ----
+
+ if (flags & SEVAL_ONECMD)
+! {
+! reset_parser ();
+! break;
+! }
+ }
+ }
+*** bash-4.3/parse.y 2014-10-01 12:58:43.000000000 -0400
+--- parse.y 2014-10-03 14:48:59.000000000 -0400
+***************
+*** 2539,2542 ****
+--- 2539,2552 ----
+ }
+
++ char *
++ parser_remaining_input ()
++ {
++ if (shell_input_line == 0)
++ return 0;
++ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
++ return '\0'; /* XXX */
++ return (shell_input_line + shell_input_line_index);
++ }
++
+ #ifdef INCLUDE_UNUSED
+ /* Back the input pointer up by one, effectively `ungetting' a character. */
+***************
+*** 4028,4033 ****
+ /* reset_parser clears shell_input_line and associated variables */
+ restore_input_line_state (&ls);
+! if (interactive)
+! token_to_read = 0;
+
+ /* Need to find how many characters parse_and_execute consumed, update
+--- 4053,4058 ----
+ /* reset_parser clears shell_input_line and associated variables */
+ restore_input_line_state (&ls);
+!
+! token_to_read = 0;
+
+ /* Need to find how many characters parse_and_execute consumed, update
+*** bash-4.3/shell.h 2014-10-01 12:57:39.000000000 -0400
+--- shell.h 2014-10-03 14:49:12.000000000 -0400
+***************
+*** 181,184 ****
+--- 181,186 ----
+
+ /* Let's try declaring these here. */
++ extern char *parser_remaining_input __P((void));
++
+ extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
+ extern void restore_parser_state __P((sh_parser_state_t *));
+*** bash-4.3/y.tab.c 2014-10-01 13:09:46.000000000 -0400
+--- y.tab.c 2014-10-04 19:26:22.000000000 -0400
+***************
+*** 169,173 ****
+
+ /* Copy the first part of user declarations. */
+! #line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+
+ #include "config.h"
+--- 169,173 ----
+
+ /* Copy the first part of user declarations. */
+! #line 21 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+
+ #include "config.h"
+***************
+*** 498,502 ****
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef union YYSTYPE
+! #line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ WORD_DESC *word; /* the word that we read. */
+--- 498,502 ----
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef union YYSTYPE
+! #line 329 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ WORD_DESC *word; /* the word that we read. */
+***************
+*** 2099,2103 ****
+ {
+ case 2:
+! #line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Case of regular command. Discard the error
+--- 2099,2103 ----
+ {
+ case 2:
+! #line 383 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ /* Case of regular command. Discard the error
+***************
+*** 2113,2117 ****
+
+ case 3:
+! #line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Case of regular command, but not a very
+--- 2113,2117 ----
+
+ case 3:
+! #line 394 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ /* Case of regular command, but not a very
+***************
+*** 2125,2129 ****
+
+ case 4:
+! #line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Error during parsing. Return NULL command. */
+--- 2125,2129 ----
+
+ case 4:
+! #line 403 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ /* Error during parsing. Return NULL command. */
+***************
+*** 2143,2147 ****
+
+ case 5:
+! #line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Case of EOF seen by itself. Do ignoreeof or
+--- 2143,2147 ----
+
+ case 5:
+! #line 418 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ /* Case of EOF seen by itself. Do ignoreeof or
+***************
+*** 2154,2168 ****
+
+ case 6:
+! #line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
+ break;
+
+ case 7:
+! #line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
+ break;
+
+ case 8:
+! #line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+--- 2154,2168 ----
+
+ case 6:
+! #line 428 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
+ break;
+
+ case 7:
+! #line 430 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
+ break;
+
+ case 8:
+! #line 434 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2173,2177 ****
+
+ case 9:
+! #line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+--- 2173,2177 ----
+
+ case 9:
+! #line 440 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2182,2186 ****
+
+ case 10:
+! #line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2182,2186 ----
+
+ case 10:
+! #line 446 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2191,2195 ****
+
+ case 11:
+! #line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2191,2195 ----
+
+ case 11:
+! #line 452 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2200,2204 ****
+
+ case 12:
+! #line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2200,2204 ----
+
+ case 12:
+! #line 458 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2209,2213 ****
+
+ case 13:
+! #line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2209,2213 ----
+
+ case 13:
+! #line 464 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2218,2222 ****
+
+ case 14:
+! #line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+--- 2218,2222 ----
+
+ case 14:
+! #line 470 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2227,2231 ****
+
+ case 15:
+! #line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2227,2231 ----
+
+ case 15:
+! #line 476 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2236,2240 ****
+
+ case 16:
+! #line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2236,2240 ----
+
+ case 16:
+! #line 482 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2245,2249 ****
+
+ case 17:
+! #line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+--- 2245,2249 ----
+
+ case 17:
+! #line 488 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2254,2258 ****
+
+ case 18:
+! #line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2254,2258 ----
+
+ case 18:
+! #line 494 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2263,2267 ****
+
+ case 19:
+! #line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2263,2267 ----
+
+ case 19:
+! #line 500 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2272,2276 ****
+
+ case 20:
+! #line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+--- 2272,2276 ----
+
+ case 20:
+! #line 506 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2281,2285 ****
+
+ case 21:
+! #line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2281,2285 ----
+
+ case 21:
+! #line 512 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2290,2294 ****
+
+ case 22:
+! #line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2290,2294 ----
+
+ case 22:
+! #line 518 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2299,2303 ****
+
+ case 23:
+! #line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+--- 2299,2303 ----
+
+ case 23:
+! #line 524 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2309,2313 ****
+
+ case 24:
+! #line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2309,2313 ----
+
+ case 24:
+! #line 531 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2319,2323 ****
+
+ case 25:
+! #line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2319,2323 ----
+
+ case 25:
+! #line 538 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2329,2333 ****
+
+ case 26:
+! #line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+--- 2329,2333 ----
+
+ case 26:
+! #line 545 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2339,2343 ****
+
+ case 27:
+! #line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2339,2343 ----
+
+ case 27:
+! #line 552 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2349,2353 ****
+
+ case 28:
+! #line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2349,2353 ----
+
+ case 28:
+! #line 559 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2359,2363 ****
+
+ case 29:
+! #line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+--- 2359,2363 ----
+
+ case 29:
+! #line 566 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2368,2372 ****
+
+ case 30:
+! #line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2368,2372 ----
+
+ case 30:
+! #line 572 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2377,2381 ****
+
+ case 31:
+! #line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2377,2381 ----
+
+ case 31:
+! #line 578 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2386,2390 ****
+
+ case 32:
+! #line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+--- 2386,2390 ----
+
+ case 32:
+! #line 584 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2395,2399 ****
+
+ case 33:
+! #line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2395,2399 ----
+
+ case 33:
+! #line 590 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2404,2408 ****
+
+ case 34:
+! #line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2404,2408 ----
+
+ case 34:
+! #line 596 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2413,2417 ****
+
+ case 35:
+! #line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+--- 2413,2417 ----
+
+ case 35:
+! #line 602 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2422,2426 ****
+
+ case 36:
+! #line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2422,2426 ----
+
+ case 36:
+! #line 608 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2431,2435 ****
+
+ case 37:
+! #line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2431,2435 ----
+
+ case 37:
+! #line 614 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2440,2444 ****
+
+ case 38:
+! #line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+--- 2440,2444 ----
+
+ case 38:
+! #line 620 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2449,2453 ****
+
+ case 39:
+! #line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2449,2453 ----
+
+ case 39:
+! #line 626 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2458,2462 ****
+
+ case 40:
+! #line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2458,2462 ----
+
+ case 40:
+! #line 632 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2467,2471 ****
+
+ case 41:
+! #line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+--- 2467,2471 ----
+
+ case 41:
+! #line 638 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2476,2480 ****
+
+ case 42:
+! #line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2476,2480 ----
+
+ case 42:
+! #line 644 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2485,2489 ****
+
+ case 43:
+! #line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2485,2489 ----
+
+ case 43:
+! #line 650 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2494,2498 ****
+
+ case 44:
+! #line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+--- 2494,2498 ----
+
+ case 44:
+! #line 656 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2503,2507 ****
+
+ case 45:
+! #line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2503,2507 ----
+
+ case 45:
+! #line 662 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2512,2516 ****
+
+ case 46:
+! #line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2512,2516 ----
+
+ case 46:
+! #line 668 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2521,2525 ****
+
+ case 47:
+! #line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 0;
+--- 2521,2525 ----
+
+ case 47:
+! #line 674 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 0;
+***************
+*** 2530,2534 ****
+
+ case 48:
+! #line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+--- 2530,2534 ----
+
+ case 48:
+! #line 680 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+***************
+*** 2539,2543 ****
+
+ case 49:
+! #line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+--- 2539,2543 ----
+
+ case 49:
+! #line 686 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+***************
+*** 2548,2552 ****
+
+ case 50:
+! #line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+--- 2548,2552 ----
+
+ case 50:
+! #line 692 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2557,2561 ****
+
+ case 51:
+! #line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ source.dest = 1;
+--- 2557,2561 ----
+
+ case 51:
+! #line 698 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ source.dest = 1;
+***************
+*** 2566,2585 ****
+
+ case 52:
+! #line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 53:
+! #line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 54:
+! #line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
+ break;
+
+ case 55:
+! #line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
+--- 2566,2585 ----
+
+ case 52:
+! #line 706 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 53:
+! #line 708 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 54:
+! #line 710 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
+ break;
+
+ case 55:
+! #line 714 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
+***************
+*** 2588,2592 ****
+
+ case 56:
+! #line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ register REDIRECT *t;
+--- 2588,2592 ----
+
+ case 56:
+! #line 718 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ register REDIRECT *t;
+***************
+*** 2600,2624 ****
+
+ case 57:
+! #line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
+ break;
+
+ case 58:
+! #line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
+ break;
+
+ case 59:
+! #line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
+ break;
+
+ case 60:
+! #line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 61:
+! #line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ COMMAND *tc;
+--- 2600,2624 ----
+
+ case 57:
+! #line 729 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
+ break;
+
+ case 58:
+! #line 731 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
+ break;
+
+ case 59:
+! #line 735 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
+ break;
+
+ case 60:
+! #line 737 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 61:
+! #line 739 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ COMMAND *tc;
+***************
+*** 2639,2708 ****
+
+ case 62:
+! #line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 63:
+! #line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 64:
+! #line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 65:
+! #line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 66:
+! #line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
+ break;
+
+ case 67:
+! #line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
+ break;
+
+ case 68:
+! #line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 69:
+! #line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 70:
+! #line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 71:
+! #line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 72:
+! #line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 73:
+! #line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 74:
+! #line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 75:
+! #line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2639,2708 ----
+
+ case 62:
+! #line 755 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 63:
+! #line 757 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 64:
+! #line 761 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 65:
+! #line 763 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 66:
+! #line 765 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
+ break;
+
+ case 67:
+! #line 767 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
+ break;
+
+ case 68:
+! #line 769 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 69:
+! #line 771 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 70:
+! #line 773 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 71:
+! #line 775 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 72:
+! #line 777 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 73:
+! #line 779 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 74:
+! #line 781 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 75:
+! #line 785 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2712,2716 ****
+
+ case 76:
+! #line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2712,2716 ----
+
+ case 76:
+! #line 790 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2720,2724 ****
+
+ case 77:
+! #line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2720,2724 ----
+
+ case 77:
+! #line 795 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2728,2732 ****
+
+ case 78:
+! #line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2728,2732 ----
+
+ case 78:
+! #line 800 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2736,2740 ****
+
+ case 79:
+! #line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2736,2740 ----
+
+ case 79:
+! #line 805 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2744,2748 ****
+
+ case 80:
+! #line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2744,2748 ----
+
+ case 80:
+! #line 810 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2752,2756 ****
+
+ case 81:
+! #line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
+--- 2752,2756 ----
+
+ case 81:
+! #line 815 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
+***************
+*** 2760,2764 ****
+
+ case 82:
+! #line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
+--- 2760,2764 ----
+
+ case 82:
+! #line 820 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
+***************
+*** 2768,2772 ****
+
+ case 83:
+! #line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
+--- 2768,2772 ----
+
+ case 83:
+! #line 827 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
+***************
+*** 2776,2780 ****
+
+ case 84:
+! #line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
+--- 2776,2780 ----
+
+ case 84:
+! #line 832 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
+***************
+*** 2784,2788 ****
+
+ case 85:
+! #line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
+--- 2784,2788 ----
+
+ case 85:
+! #line 837 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
+***************
+*** 2792,2796 ****
+
+ case 86:
+! #line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
+--- 2792,2796 ----
+
+ case 86:
+! #line 842 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
+***************
+*** 2800,2804 ****
+
+ case 87:
+! #line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2800,2804 ----
+
+ case 87:
+! #line 849 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2808,2812 ****
+
+ case 88:
+! #line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2808,2812 ----
+
+ case 88:
+! #line 854 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2816,2820 ****
+
+ case 89:
+! #line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2816,2820 ----
+
+ case 89:
+! #line 859 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2824,2828 ****
+
+ case 90:
+! #line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2824,2828 ----
+
+ case 90:
+! #line 864 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2832,2836 ****
+
+ case 91:
+! #line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2832,2836 ----
+
+ case 91:
+! #line 869 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2840,2844 ****
+
+ case 92:
+! #line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/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]);
+--- 2840,2844 ----
+
+ case 92:
+! #line 874 "/usr/src/local/bash/bash-4.3-patched/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]);
+***************
+*** 2848,2852 ****
+
+ case 93:
+! #line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
+--- 2848,2852 ----
+
+ case 93:
+! #line 881 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
+***************
+*** 2856,2860 ****
+
+ case 94:
+! #line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
+--- 2856,2860 ----
+
+ case 94:
+! #line 886 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
+***************
+*** 2864,2868 ****
+
+ case 95:
+! #line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
+--- 2864,2868 ----
+
+ case 95:
+! #line 891 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
+***************
+*** 2872,2896 ****
+
+ case 96:
+! #line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
+ break;
+
+ case 97:
+! #line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
+ break;
+
+ case 98:
+! #line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
+ break;
+
+ case 99:
+! #line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 100:
+! #line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ COMMAND *tc;
+--- 2872,2896 ----
+
+ case 96:
+! #line 898 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
+ break;
+
+ case 97:
+! #line 901 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
+ break;
+
+ case 98:
+! #line 904 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
+ break;
+
+ case 99:
+! #line 908 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 100:
+! #line 910 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ COMMAND *tc;
+***************
+*** 2924,2928 ****
+
+ case 101:
+! #line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
+--- 2924,2928 ----
+
+ case 101:
+! #line 941 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
+***************
+*** 2932,2936 ****
+
+ case 102:
+! #line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
+--- 2932,2936 ----
+
+ case 102:
+! #line 948 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
+***************
+*** 2940,2944 ****
+
+ case 103:
+! #line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ COMMAND *tc;
+--- 2940,2944 ----
+
+ case 103:
+! #line 953 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ COMMAND *tc;
+***************
+*** 2960,2964 ****
+
+ case 104:
+! #line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
+--- 2960,2964 ----
+
+ case 104:
+! #line 970 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
+***************
+*** 2968,2972 ****
+
+ case 105:
+! #line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ COMMAND *tc;
+--- 2968,2972 ----
+
+ case 105:
+! #line 975 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ COMMAND *tc;
+***************
+*** 2988,2992 ****
+
+ case 106:
+! #line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
+--- 2988,2992 ----
+
+ case 106:
+! #line 992 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
+***************
+*** 2996,3110 ****
+
+ case 107:
+! #line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
+ break;
+
+ case 108:
+! #line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
+ break;
+
+ case 109:
+! #line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
+ break;
+
+ case 110:
+! #line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
+ break;
+
+ case 111:
+! #line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
+ break;
+
+ case 112:
+! #line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(2) - (3)].command); }
+ break;
+
+ case 113:
+! #line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
+ break;
+
+ case 114:
+! #line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
+ break;
+
+ case 115:
+! #line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
+ break;
+
+ case 117:
+! #line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
+ break;
+
+ case 118:
+! #line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
+ break;
+
+ case 119:
+! #line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
+ break;
+
+ case 120:
+! #line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
+ break;
+
+ case 121:
+! #line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
+ break;
+
+ case 122:
+! #line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 123:
+! #line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
+ break;
+
+ case 124:
+! #line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 125:
+! #line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/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 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 127:
+! #line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/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 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
+ break;
+
+ case 129:
+! #line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
+ break;
+
+ case 130:
+! #line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = (yyvsp[(2) - (2)].command);
+--- 2996,3110 ----
+
+ case 107:
+! #line 999 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
+ break;
+
+ case 108:
+! #line 1001 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
+ break;
+
+ case 109:
+! #line 1003 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
+ break;
+
+ case 110:
+! #line 1008 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
+ break;
+
+ case 111:
+! #line 1012 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
+ break;
+
+ case 112:
+! #line 1016 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(2) - (3)].command); }
+ break;
+
+ case 113:
+! #line 1020 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
+ break;
+
+ case 114:
+! #line 1022 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
+ break;
+
+ case 115:
+! #line 1024 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
+ break;
+
+ case 117:
+! #line 1029 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
+ break;
+
+ case 118:
+! #line 1033 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
+ break;
+
+ case 119:
+! #line 1035 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
+ break;
+
+ case 120:
+! #line 1037 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
+ break;
+
+ case 121:
+! #line 1039 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
+ break;
+
+ case 122:
+! #line 1043 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 123:
+! #line 1045 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
+ break;
+
+ case 124:
+! #line 1047 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 125:
+! #line 1049 "/usr/src/local/bash/bash-4.3-patched/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 1051 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
+ break;
+
+ case 127:
+! #line 1053 "/usr/src/local/bash/bash-4.3-patched/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 1057 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
+ break;
+
+ case 129:
+! #line 1059 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
+ break;
+
+ case 130:
+! #line 1068 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = (yyvsp[(2) - (2)].command);
+***************
+*** 3115,3119 ****
+
+ case 132:
+! #line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = (yyvsp[(2) - (2)].command);
+--- 3115,3119 ----
+
+ case 132:
+! #line 1077 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = (yyvsp[(2) - (2)].command);
+***************
+*** 3122,3126 ****
+
+ case 134:
+! #line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(1) - (3)].command)->type == cm_connection)
+--- 3122,3126 ----
+
+ case 134:
+! #line 1084 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ if ((yyvsp[(1) - (3)].command)->type == cm_connection)
+***************
+*** 3132,3146 ****
+
+ case 136:
+! #line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
+ break;
+
+ case 137:
+! #line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
+ break;
+
+ case 138:
+! #line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(1) - (4)].command)->type == cm_connection)
+--- 3132,3146 ----
+
+ case 136:
+! #line 1095 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
+ break;
+
+ case 137:
+! #line 1097 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
+ break;
+
+ case 138:
+! #line 1099 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ if ((yyvsp[(1) - (4)].command)->type == cm_connection)
+***************
+*** 3152,3186 ****
+
+ case 139:
+! #line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
+ break;
+
+ case 140:
+! #line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
+ break;
+
+ case 141:
+! #line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 144:
+! #line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = '\n'; }
+ break;
+
+ case 145:
+! #line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = ';'; }
+ break;
+
+ case 146:
+! #line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = yacc_EOF; }
+ break;
+
+ case 149:
+! #line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = (yyvsp[(1) - (1)].command);
+--- 3152,3186 ----
+
+ case 139:
+! #line 1106 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
+ break;
+
+ case 140:
+! #line 1108 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
+ break;
+
+ case 141:
+! #line 1110 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 144:
+! #line 1118 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.number) = '\n'; }
+ break;
+
+ case 145:
+! #line 1120 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.number) = ';'; }
+ break;
+
+ case 146:
+! #line 1122 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.number) = yacc_EOF; }
+ break;
+
+ case 149:
+! #line 1136 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = (yyvsp[(1) - (1)].command);
+***************
+*** 3198,3202 ****
+
+ case 150:
+! #line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(1) - (2)].command)->type == cm_connection)
+--- 3198,3202 ----
+
+ case 150:
+! #line 1149 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ if ((yyvsp[(1) - (2)].command)->type == cm_connection)
+***************
+*** 3217,3221 ****
+
+ case 151:
+! #line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ (yyval.command) = (yyvsp[(1) - (2)].command);
+--- 3217,3221 ----
+
+ case 151:
+! #line 1165 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ (yyval.command) = (yyvsp[(1) - (2)].command);
+***************
+*** 3233,3247 ****
+
+ case 152:
+! #line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
+ break;
+
+ case 153:
+! #line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
+ break;
+
+ case 154:
+! #line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(1) - (3)].command)->type == cm_connection)
+--- 3233,3247 ----
+
+ case 152:
+! #line 1180 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
+ break;
+
+ case 153:
+! #line 1182 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
+ break;
+
+ case 154:
+! #line 1184 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ if ((yyvsp[(1) - (3)].command)->type == cm_connection)
+***************
+*** 3253,3272 ****
+
+ case 155:
+! #line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
+ break;
+
+ case 156:
+! #line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 157:
+! #line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 158:
+! #line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(2) - (2)].command))
+--- 3253,3272 ----
+
+ case 155:
+! #line 1191 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
+ break;
+
+ case 156:
+! #line 1194 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 157:
+! #line 1198 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 158:
+! #line 1200 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ if ((yyvsp[(2) - (2)].command))
+***************
+*** 3277,3281 ****
+
+ case 159:
+! #line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ if ((yyvsp[(2) - (2)].command))
+--- 3277,3281 ----
+
+ case 159:
+! #line 1206 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ if ((yyvsp[(2) - (2)].command))
+***************
+*** 3286,3290 ****
+
+ case 160:
+! #line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ ELEMENT x;
+--- 3286,3290 ----
+
+ case 160:
+! #line 1212 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ ELEMENT x;
+***************
+*** 3306,3310 ****
+
+ case 161:
+! #line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ ELEMENT x;
+--- 3306,3310 ----
+
+ case 161:
+! #line 1229 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ ELEMENT x;
+***************
+*** 3327,3336 ****
+
+ case 162:
+! #line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
+ break;
+
+ case 163:
+! #line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ {
+ /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
+--- 3327,3336 ----
+
+ case 162:
+! #line 1249 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
+ break;
+
+ case 163:
+! #line 1251 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ {
+ /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
+***************
+*** 3358,3377 ****
+
+ case 164:
+! #line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 165:
+! #line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE; }
+ break;
+
+ case 166:
+! #line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+
+ case 167:
+! #line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+--- 3358,3377 ----
+
+ case 164:
+! #line 1274 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.command) = (yyvsp[(1) - (1)].command); }
+ break;
+
+ case 165:
+! #line 1278 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE; }
+ break;
+
+ case 166:
+! #line 1280 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+
+ case 167:
+! #line 1282 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+***************
+*** 3593,3597 ****
+
+
+! #line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
+
+
+--- 3593,3597 ----
+
+
+! #line 1284 "/usr/src/local/bash/bash-4.3-patched/parse.y"
+
+
+***************
+*** 4851,4854 ****
+--- 4851,4864 ----
+ }
+
++ char *
++ parser_remaining_input ()
++ {
++ if (shell_input_line == 0)
++ return 0;
++ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
++ return '\0'; /* XXX */
++ return (shell_input_line + shell_input_line_index);
++ }
++
+ #ifdef INCLUDE_UNUSED
+ /* Back the input pointer up by one, effectively `ungetting' a character. */
+***************
+*** 6340,6345 ****
+ /* reset_parser clears shell_input_line and associated variables */
+ restore_input_line_state (&ls);
+! if (interactive)
+! token_to_read = 0;
+
+ /* Need to find how many characters parse_and_execute consumed, update
+--- 6350,6355 ----
+ /* reset_parser clears shell_input_line and associated variables */
+ restore_input_line_state (&ls);
+!
+! token_to_read = 0;
+
+ /* Need to find how many characters parse_and_execute consumed, update
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 29
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 30
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-031
+
+Bug-Reported-by: lolilolicon <lolilolicon@gmail.com>
+Bug-Reference-ID: <CAMtVo_Nz=32Oq=zWTb6=+8gUNXOo2rRvud1W4oPnA-cgVk_ZqQ@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00139.html
+
+Bug-Description:
+
+The new nameref assignment functionality introduced in bash-4.3 did not perform
+enough validation on the variable value and would create variables with
+invalid names.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/subst.h 2014-01-11 21:02:27.000000000 -0500
+--- subst.h 2014-09-01 12:16:56.000000000 -0400
+***************
+*** 48,51 ****
+--- 48,52 ----
+ #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 */
+
+ /* Flags for the string extraction functions. */
+*** bash-4.3/variables.c 2014-05-15 08:26:50.000000000 -0400
+--- variables.c 2014-09-01 14:37:44.000000000 -0400
+***************
+*** 2504,2511 ****
+ int hflags, aflags;
+ {
+! char *newval;
+ SHELL_VAR *entry;
+
+ entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
+ /* Follow the nameref chain here if this is the global variables table */
+ if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
+--- 2566,2590 ----
+ int hflags, aflags;
+ {
+! char *newname, *newval;
+ SHELL_VAR *entry;
++ #if defined (ARRAY_VARS)
++ arrayind_t ind;
++ char *subp;
++ int sublen;
++ #endif
+
++ newname = 0;
++ #if defined (ARRAY_VARS)
++ if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) == 0 && valid_array_reference (name))
++ {
++ newname = array_variable_name (name, &subp, &sublen);
++ if (newname == 0)
++ return (SHELL_VAR *)NULL; /* XXX */
++ entry = hash_lookup (newname, table);
++ }
++ else
++ #endif
+ entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
++
+ /* Follow the nameref chain here if this is the global variables table */
+ if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
+***************
+*** 2538,2541 ****
+--- 2617,2630 ----
+ }
+ }
++ #if defined (ARRAY_VARS)
++ else if (entry == 0 && newname)
++ {
++ entry = make_new_array_variable (newname); /* indexed array by default */
++ if (entry == 0)
++ return entry;
++ ind = array_expand_index (name, subp, sublen);
++ bind_array_element (entry, ind, value, aflags);
++ }
++ #endif
+ else if (entry == 0)
+ {
+***************
+*** 2658,2662 ****
+ if (nameref_cell (nv) == 0)
+ return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
+! return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags));
+ }
+ else
+--- 2747,2752 ----
+ if (nameref_cell (nv) == 0)
+ return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
+! /* XXX - bug here with ref=array[index] */
+! return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags|ASS_FROMREF));
+ }
+ else
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 30
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 31
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-032
+
+Bug-Reported-by: crispusfairbairn@gmail.com
+Bug-Reference-ID: <b5e499f7-3b98-408d-9f94-c0387580e73a@googlegroups.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00013.html
+
+Bug-Description:
+
+When bash is running in Posix mode, it allows signals -- including SIGCHLD --
+to interrupt the `wait' builtin, as Posix requires. However, the interrupt
+causes bash to not run a SIGCHLD trap for all exited children. This patch
+fixes the issue and restores the documented behavior in Posix mode.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/jobs.c 2014-05-14 09:20:15.000000000 -0400
+--- jobs.c 2014-09-09 11:50:38.000000000 -0400
+***************
+*** 3340,3344 ****
+ {
+ interrupt_immediately = 0;
+! trap_handler (SIGCHLD); /* set pending_traps[SIGCHLD] */
+ wait_signal_received = SIGCHLD;
+ /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
+--- 3346,3352 ----
+ {
+ interrupt_immediately = 0;
+! /* This was trap_handler (SIGCHLD) but that can lose traps if
+! children_exited > 1 */
+! queue_sigchld_trap (children_exited);
+ wait_signal_received = SIGCHLD;
+ /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 31
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 32
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-033
+
+Bug-Reported-by: mickael9@gmail.com, Jan Rome <jan.rome@gmail.com>
+Bug-Reference-ID: <20140907224046.382ED3610CC@mickael-laptop.localdomain>,
+ <540D661D.50908@gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00029.html
+ http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00030.html
+
+Bug-Description:
+
+Bash does not clean up the terminal state in all cases where bash or
+readline modifies it and bash is subsequently terminated by a fatal signal.
+This happens when the `read' builtin modifies the terminal settings, both
+when readline is active and when it is not. It occurs most often when a script
+installs a trap that exits on a signal without re-sending the signal to itself.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/shell.c 2014-01-14 08:04:32.000000000 -0500
+--- shell.c 2014-12-22 10:27:50.000000000 -0500
+***************
+*** 74,77 ****
+--- 74,78 ----
+
+ #if defined (READLINE)
++ # include <readline/readline.h>
+ # include "bashline.h"
+ #endif
+***************
+*** 910,913 ****
+--- 912,923 ----
+ fflush (stderr);
+
++ /* Clean up the terminal if we are in a state where it's been modified. */
++ #if defined (READLINE)
++ if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function)
++ (*rl_deprep_term_function) ();
++ #endif
++ if (read_tty_modified ())
++ read_tty_cleanup ();
++
+ /* Do trap[0] if defined. Allow it to override the exit status
+ passed to us. */
+*** bash-4.3/builtins/read.def 2014-10-01 12:57:38.000000000 -0400
+--- builtins/read.def 2014-12-22 10:48:54.000000000 -0500
+***************
+*** 141,148 ****
+ int sigalrm_seen;
+
+! static int reading;
+ static SigHandler *old_alrm;
+ static unsigned char delim;
+
+ /* In all cases, SIGALRM just sets a flag that we check periodically. This
+ avoids problems with the semi-tricky stuff we do with the xfree of
+--- 141,150 ----
+ int sigalrm_seen;
+
+! static int reading, tty_modified;
+ static SigHandler *old_alrm;
+ static unsigned char delim;
+
++ static struct ttsave termsave;
++
+ /* In all cases, SIGALRM just sets a flag that we check periodically. This
+ avoids problems with the semi-tricky stuff we do with the xfree of
+***************
+*** 189,193 ****
+ SHELL_VAR *var;
+ TTYSTRUCT ttattrs, ttset;
+- struct ttsave termsave;
+ #if defined (ARRAY_VARS)
+ WORD_LIST *alist;
+--- 191,194 ----
+***************
+*** 222,226 ****
+ USE_VAR(lastsig);
+
+! sigalrm_seen = reading = 0;
+
+ i = 0; /* Index into the string that we are reading. */
+--- 223,227 ----
+ USE_VAR(lastsig);
+
+! sigalrm_seen = reading = tty_modified = 0;
+
+ i = 0; /* Index into the string that we are reading. */
+***************
+*** 439,442 ****
+--- 440,445 ----
+ goto assign_vars;
+ }
++ if (interactive_shell == 0)
++ initialize_terminating_signals ();
+ old_alrm = set_signal_handler (SIGALRM, sigalrm);
+ add_unwind_protect (reset_alarm, (char *)NULL);
+***************
+*** 483,487 ****
+--- 486,493 ----
+ if (i < 0)
+ sh_ttyerror (1);
++ tty_modified = 1;
+ add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
++ if (interactive_shell == 0)
++ initialize_terminating_signals ();
+ }
+ }
+***************
+*** 498,502 ****
+--- 504,511 ----
+ sh_ttyerror (1);
+
++ tty_modified = 1;
+ add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
++ if (interactive_shell == 0)
++ initialize_terminating_signals ();
+ }
+
+***************
+*** 589,592 ****
+--- 598,603 ----
+ else
+ lastsig = 0;
++ if (terminating_signal && tty_modified)
++ ttyrestore (&termsave); /* fix terminal before exiting */
+ CHECK_TERMSIG;
+ eof = 1;
+***************
+*** 979,982 ****
+--- 990,1007 ----
+ {
+ ttsetattr (ttp->fd, ttp->attrs);
++ tty_modified = 0;
++ }
++
++ void
++ read_tty_cleanup ()
++ {
++ if (tty_modified)
++ ttyrestore (&termsave);
++ }
++
++ int
++ read_tty_modified ()
++ {
++ return (tty_modified);
+ }
+
+*** bash-4.3/builtins/common.h 2014-10-01 12:57:47.000000000 -0400
+--- builtins/common.h 2014-12-22 10:10:14.000000000 -0500
+***************
+*** 123,126 ****
+--- 141,148 ----
+ extern void getopts_reset __P((int));
+
++ /* 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 *));
+*** bash-4.3/bashline.c 2014-05-14 09:22:39.000000000 -0400
+--- bashline.c 2014-09-08 11:28:56.000000000 -0400
+***************
+*** 203,206 ****
+--- 203,207 ----
+ 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[];
+***************
+*** 4209,4214 ****
+ /* If we're going to longjmp to top_level, make sure we clean up readline.
+ check_signals will call QUIT, which will eventually longjmp to top_level,
+! calling run_interrupt_trap along the way. */
+! if (interrupt_state)
+ rl_cleanup_after_signal ();
+ bashline_reset_event_hook ();
+--- 4262,4268 ----
+ /* If we're going to longjmp to top_level, make sure we clean up readline.
+ check_signals will call QUIT, which will eventually longjmp to top_level,
+! calling run_interrupt_trap along the way. The check for sigalrm_seen is
+! to clean up the read builtin's state. */
+! if (terminating_signal || interrupt_state || sigalrm_seen)
+ rl_cleanup_after_signal ();
+ bashline_reset_event_hook ();
+*** bash-4.3/sig.c 2014-01-10 15:06:06.000000000 -0500
+--- sig.c 2014-09-08 11:26:33.000000000 -0400
+***************
+*** 533,538 ****
+ /* Set the event hook so readline will call it after the signal handlers
+ finish executing, so if this interrupted character input we can get
+! quick response. */
+! if (interactive_shell && interactive && no_line_editing == 0)
+ bashline_set_event_hook ();
+ #endif
+--- 533,540 ----
+ /* Set the event hook so readline will call it after the signal handlers
+ finish executing, so if this interrupted character input we can get
+! quick response. If readline is active or has modified the terminal we
+! need to set this no matter what the signal is, though the check for
+! RL_STATE_TERMPREPPED is possibly redundant. */
+! if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED))
+ bashline_set_event_hook ();
+ #endif
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 32
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 33
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-034
+
+Bug-Reported-by: Dreamcat4 <dreamcat4@gmail.com>
+Bug-Reference-ID: <CAN39uTpAEs2GFu4ebC_SfSVMRTh-DJ9YanrY4BZZ3OO+CCHjng@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-05/msg00001.html
+
+Bug-Description:
+
+If neither the -f nor -v options is supplied to unset, and a name argument is
+found to be a function and unset, subsequent name arguments are not treated as
+variables before attempting to unset a function by that name.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/builtins/set.def 2013-04-19 07:20:34.000000000 -0400
+--- builtins/set.def 2015-05-05 13:25:36.000000000 -0400
+***************
+*** 752,758 ****
+--- 797,805 ----
+ {
+ int unset_function, unset_variable, unset_array, opt, nameref, any_failed;
++ int global_unset_func, global_unset_var;
+ char *name;
+
+ unset_function = unset_variable = unset_array = nameref = any_failed = 0;
++ global_unset_func = global_unset_var = 0;
+
+ reset_internal_getopt ();
+***************
+*** 762,769 ****
+ {
+ case 'f':
+! unset_function = 1;
+ break;
+ case 'v':
+! unset_variable = 1;
+ break;
+ case 'n':
+--- 809,816 ----
+ {
+ case 'f':
+! global_unset_func = 1;
+ break;
+ case 'v':
+! global_unset_var = 1;
+ break;
+ case 'n':
+***************
+*** 778,782 ****
+ list = loptend;
+
+! if (unset_function && unset_variable)
+ {
+ builtin_error (_("cannot simultaneously unset a function and a variable"));
+--- 825,829 ----
+ list = loptend;
+
+! if (global_unset_func && global_unset_var)
+ {
+ builtin_error (_("cannot simultaneously unset a function and a variable"));
+***************
+*** 796,799 ****
+--- 843,849 ----
+ name = list->word->word;
+
++ unset_function = global_unset_func;
++ unset_variable = global_unset_var;
++
+ #if defined (ARRAY_VARS)
+ unset_array = 0;
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 33
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 34
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-035
+
+Bug-Reported-by: <romerox.adrian@gmail.com>
+Bug-Reference-ID: <CABV5r3zhPXmSKUe9uedeGc5YFBM2njJ1iVmY2h5neWdQpDBQug@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00045.html
+
+Bug-Description:
+
+A locale with a long name can trigger a buffer overflow and core dump. This
+applies on systems that do not have locale_charset in libc, are not using
+GNU libiconv, and are not using the libintl that ships with bash in lib/intl.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/lib/sh/unicode.c 2014-01-30 16:47:19.000000000 -0500
+--- lib/sh/unicode.c 2015-05-01 08:58:30.000000000 -0400
+***************
+*** 79,83 ****
+ if (s)
+ {
+! strcpy (charsetbuf, s+1);
+ t = strchr (charsetbuf, '@');
+ if (t)
+--- 79,84 ----
+ if (s)
+ {
+! strncpy (charsetbuf, s+1, sizeof (charsetbuf) - 1);
+! charsetbuf[sizeof (charsetbuf) - 1] = '\0';
+ t = strchr (charsetbuf, '@');
+ if (t)
+***************
+*** 85,89 ****
+ return charsetbuf;
+ }
+! strcpy (charsetbuf, locale);
+ return charsetbuf;
+ }
+--- 86,91 ----
+ return charsetbuf;
+ }
+! strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1);
+! charsetbuf[sizeof (charsetbuf) - 1] = '\0';
+ return charsetbuf;
+ }
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 34
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 35
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-036
+
+Bug-Reported-by: emanuelczirai@cryptolab.net
+Bug-Reference-ID: <f962e4f556da5ebfadaf7afe9c78a8cb@cryptolab.net>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00071.html
+
+Bug-Description:
+
+When evaluating and setting integer variables, and the assignment fails to
+create a variable (for example, when performing an operation on an array
+variable with an invalid subscript), bash attempts to dereference a null
+pointer, causing a segmentation violation.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/variables.c 2015-01-23 20:39:27.000000000 -0500
+--- variables.c 2015-02-19 13:56:12.000000000 -0500
+***************
+*** 2834,2841 ****
+ v = bind_variable (lhs, rhs, 0);
+
+! if (v && isint)
+! VSETATTR (v, att_integer);
+!
+! VUNSETATTR (v, att_invisible);
+
+ return (v);
+--- 2834,2843 ----
+ v = bind_variable (lhs, rhs, 0);
+
+! if (v)
+! {
+! if (isint)
+! VSETATTR (v, att_integer);
+! VUNSETATTR (v, att_invisible);
+! }
+
+ return (v);
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 35
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 36
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-037
+
+Bug-Reported-by: Greg Wooledge <wooledg@eeg.ccf.org>
+Bug-Reference-ID: <20150204144240.GN13956@eeg.ccf.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00007.html
+
+Bug-Description:
+
+If an associative array uses `@' or `*' as a subscript, `declare -p' produces
+output that cannot be reused as input.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/assoc.c 2011-11-05 16:39:05.000000000 -0400
+--- assoc.c 2015-02-04 15:28:25.000000000 -0500
+***************
+*** 437,440 ****
+--- 440,445 ----
+ if (sh_contains_shell_metas (tlist->key))
+ istr = sh_double_quote (tlist->key);
++ else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] == '\0')
++ istr = sh_double_quote (tlist->key);
+ else
+ istr = tlist->key;
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 36
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 37
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-038
+
+Bug-Reported-by: worley@alum.mit.edu (Dale R. Worley)
+Bug-Reference-ID: <201406100051.s5A0pCeB014978@hobgoblin.ariadne.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00028.html
+
+Bug-Description:
+
+There are a number of instances where `time' is not recognized as a reserved
+word when the shell grammar says it should be.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/parse.y 2014-04-07 11:56:12.000000000 -0400
+--- parse.y 2014-06-11 10:25:53.000000000 -0400
+***************
+*** 2819,2827 ****
+ case OR_OR:
+ case '&':
+ case DO:
+ case THEN:
+ case ELSE:
+ case '{': /* } */
+! case '(': /* ) */
+ case BANG: /* ! time pipeline */
+ case TIME: /* time time pipeline */
+--- 2819,2832 ----
+ case OR_OR:
+ case '&':
++ case WHILE:
+ case DO:
++ case UNTIL:
++ case IF:
+ case THEN:
++ case ELIF:
+ case ELSE:
+ case '{': /* } */
+! case '(': /* )( */
+! case ')': /* only valid in case statement */
+ case BANG: /* ! time pipeline */
+ case TIME: /* time time pipeline */
+*** bash-4.3/y.tab.c 2014-10-05 13:52:50.000000000 -0400
+--- y.tab.c 2015-05-19 15:08:43.000000000 -0400
+***************
+*** 5131,5139 ****
+ case OR_OR:
+ case '&':
+ case DO:
+ case THEN:
+ case ELSE:
+ case '{': /* } */
+! case '(': /* ) */
+ case BANG: /* ! time pipeline */
+ case TIME: /* time time pipeline */
+--- 5131,5144 ----
+ case OR_OR:
+ case '&':
++ case WHILE:
+ case DO:
++ case UNTIL:
++ case IF:
+ case THEN:
++ case ELIF:
+ case ELSE:
+ case '{': /* } */
+! case '(': /* )( */
+! case ')': /* only valid in case statement */
+ case BANG: /* ! time pipeline */
+ case TIME: /* time time pipeline */
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 37
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 38
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-039
+
+Bug-Reported-by: SN <poczta-sn@gazeta.pl>
+Bug-Reference-ID: <54E2554C.205@gazeta.pl>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00060.html
+
+Bug-Description:
+
+Using the output of `declare -p' when run in a function can result in variables
+that are invisible to `declare -p'. This problem occurs when an assignment
+builtin such as `declare' receives a quoted compound array assignment as one of
+its arguments.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/arrayfunc.c 2014-10-01 13:08:48.000000000 -0400
+--- arrayfunc.c 2015-02-19 14:33:05.000000000 -0500
+***************
+*** 405,408 ****
+--- 405,411 ----
+ else
+ array_insert (a, i, l->word->word);
++
++ VUNSETATTR (var, att_invisible); /* no longer invisible */
++
+ return var;
+ }
+***************
+*** 635,638 ****
+--- 638,645 ----
+ if (nlist)
+ dispose_words (nlist);
++
++ if (var)
++ VUNSETATTR (var, att_invisible); /* no longer invisible */
++
+ return (var);
+ }
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 38
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 39
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-040
+
+Bug-Reported-by: Jean Delvare <jdelvare@suse.de>
+Bug-Reference-ID: <20150609180231.5f463695@endymion.delvare>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00033.html
+
+Bug-Description:
+
+There is a memory leak that occurs when bash expands an array reference on
+the rhs of an assignment statement.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/subst.c 2014-10-01 12:57:47.000000000 -0400
+--- subst.c 2015-06-22 09:16:53.000000000 -0400
+***************
+*** 5783,5787 ****
+ if (pflags & PF_ASSIGNRHS)
+ {
+! temp = array_variable_name (name, &tt, (int *)0);
+ if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']')
+ temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind);
+--- 5783,5787 ----
+ if (pflags & PF_ASSIGNRHS)
+ {
+! var = array_variable_part (name, &tt, (int *)0);
+ if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']')
+ temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind);
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 39
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 40
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-041
+
+Bug-Reported-by: Hanno Böck <hanno@hboeck.de>
+Bug-Reference-ID: <20150623131106.6f111da9@pc1>, <20150707004640.0e61d2f9@pc1>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00089.html,
+ http://lists.gnu.org/archive/html/bug-bash/2015-07/msg00018.html
+
+Bug-Description:
+
+There are several out-of-bounds read errors that occur when completing command
+lines where assignment statements appear before the command name. The first
+two appear only when programmable completion is enabled; the last one only
+happens when listing possible completions.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/bashline.c 2014-12-29 14:39:43.000000000 -0500
+--- bashline.c 2015-08-12 10:21:58.000000000 -0400
+***************
+*** 1469,1476 ****
+--- 1469,1489 ----
+ os = start;
+ n = 0;
++ was_assignment = 0;
+ s = find_cmd_start (os);
+ e = find_cmd_end (end);
+ do
+ {
++ /* Don't read past the end of rl_line_buffer */
++ if (s > rl_end)
++ {
++ s1 = s = e1;
++ break;
++ }
++ /* Or past point if point is within an assignment statement */
++ else if (was_assignment && s > rl_point)
++ {
++ s1 = s = e1;
++ break;
++ }
+ /* Skip over assignment statements preceding a command name. If we
+ don't find a command name at all, we can perform command name
+*** bash-4.3/lib/readline/complete.c 2013-10-14 09:27:10.000000000 -0400
+--- lib/readline/complete.c 2015-07-31 09:34:39.000000000 -0400
+***************
+*** 690,693 ****
+--- 690,695 ----
+ if (temp == 0 || *temp == '\0')
+ return (pathname);
++ else if (temp[1] == 0 && temp == pathname)
++ return (pathname);
+ /* If the basename is NULL, we might have a pathname like '/usr/src/'.
+ Look for a previous slash and, if one is found, return the portion
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 40
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 41
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-042
+
+Bug-Reported-by: Nathan Neulinger <nneul@neulinger.org>
+Bug-Reference-ID: <558EFDF2.7060402@neulinger.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00096.html
+
+Bug-Description:
+
+There is a problem when parsing command substitutions containing `case'
+commands within pipelines that causes the parser to not correctly identify
+the end of the command substitution.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/parse.y 2015-05-18 19:27:05.000000000 -0400
+--- parse.y 2015-06-29 10:59:27.000000000 -0400
+***************
+*** 3709,3712 ****
+--- 3709,3714 ----
+ tflags |= LEX_INWORD;
+ lex_wlen = 0;
++ if (tflags & LEX_RESWDOK)
++ lex_rwlen = 0;
+ }
+ }
+*** bash-4.3/y.tab.c 2015-05-18 19:27:05.000000000 -0400
+--- y.tab.c 2015-06-29 10:59:27.000000000 -0400
+***************
+*** 6021,6024 ****
+--- 6021,6026 ----
+ tflags |= LEX_INWORD;
+ lex_wlen = 0;
++ if (tflags & LEX_RESWDOK)
++ lex_rwlen = 0;
+ }
+ }
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 41
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 42
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-043
+
+Bug-Reported-by: lolilolicon <lolilolicon@gmail.com>
+Bug-Reference-ID: <CAMtVo_MF16KWanCB4C8WxA88Qt26zWsvV6V7+_U2fM0E6tCDxw@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00040.html
+
+Bug-Description:
+
+When the lastpipe option is enabled, the last component can contain nested
+pipelines and cause a segmentation fault under certain circumestances.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/execute_cmd.c 2014-07-30 10:26:52.000000000 -0400
+--- execute_cmd.c 2014-08-15 08:55:24.000000000 -0400
+***************
+*** 2406,2412 ****
+ {
+ #if defined (JOB_CONTROL)
+! append_process (savestring (the_printed_command), dollar_dollar_pid, exec_result, lastpipe_jid);
+! #endif
+ lstdin = wait_for (lastpid);
+ #if defined (JOB_CONTROL)
+ /* If wait_for removes the job from the jobs table, use result of last
+--- 2433,2447 ----
+ {
+ #if defined (JOB_CONTROL)
+! if (INVALID_JOB (lastpipe_jid) == 0)
+! {
+! append_process (savestring (the_printed_command_except_trap), dollar_dollar_pid, exec_result, lastpipe_jid);
+! lstdin = wait_for (lastpid);
+! }
+! else
+! lstdin = wait_for_single_pid (lastpid); /* checks bgpids list */
+! #else
+ lstdin = wait_for (lastpid);
++ #endif
++
+ #if defined (JOB_CONTROL)
+ /* If wait_for removes the job from the jobs table, use result of last
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 42
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 43
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-044
+
+Bug-Reported-by: Ondrej Oprala <ooprala@redhat.com>
+Bug-Reference-ID: <539ED55B.2080103@redhat.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00046.html
+
+Bug-Description:
+
+A typo prevents the `compat42' shopt option from working as intended.
+
+Patch (apply with `patch -p0'):
+
+diff -rC 2 bash-4.3.42/builtins/shopt.def bash-4.3.43/builtins/shopt.def
+*** bash-4.3.42/builtins/shopt.def 2013-02-27 09:43:20.000000000 -0500
+--- builtins/shopt.def 2015-10-16 11:25:28.000000000 -0400
+***************
+*** 161,165 ****
+ { "compat40", &shopt_compat40, set_compatibility_level },
+ { "compat41", &shopt_compat41, set_compatibility_level },
+! { "compat42", &shopt_compat41, set_compatibility_level },
+ #if defined (READLINE)
+ { "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL},
+--- 161,165 ----
+ { "compat40", &shopt_compat40, set_compatibility_level },
+ { "compat41", &shopt_compat41, set_compatibility_level },
+! { "compat42", &shopt_compat42, set_compatibility_level },
+ #if defined (READLINE)
+ { "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL},
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 43
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 44
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-045
+
+Bug-Reported-by: Basin Ilya <basinilya@gmail.com>
+Bug-Reference-ID: <5624C0AC.8070802@gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-10/msg00141.html
+
+Bug-Description:
+
+If a file open attempted as part of a redirection fails because it is interrupted
+by a signal, the shell needs to process any pending traps to allow the redirection
+to be canceled.
+
+Patch (apply with `patch -p0'):
+
+*** bash-20150109/redir.c 2014-12-03 10:47:38.000000000 -0500
+--- redir.c 2015-01-16 10:15:47.000000000 -0500
+***************
+*** 672,676 ****
+ e = errno;
+ if (fd < 0 && e == EINTR)
+! QUIT;
+ errno = e;
+ }
+--- 672,679 ----
+ e = errno;
+ if (fd < 0 && e == EINTR)
+! {
+! QUIT;
+! run_pending_traps ();
+! }
+ errno = e;
+ }
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 44
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 45
+
+ #endif /* _PATCHLEVEL_H_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-046
+
+Bug-Reported-by: Sergey Tselikh <stselikh@gmail.com>
+Bug-Reference-ID: <20150816110235.91f3e12e3f20d20cdaad963e@gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-08/msg00080.html
+
+Bug-Description:
+
+An incorrect conversion from an indexed to associative array can result in a
+core dump.
+
+Patch (apply with `patch -p0'):
+
+*** bash-4.3/subst.c 2015-08-13 11:32:54.000000000 -0400
+--- subst.c 2015-08-18 10:13:59.000000000 -0400
+***************
+*** 9562,9566 ****
+ opts[opti] = '\0';
+ if (opti > 0)
+! make_internal_declare (tlist->word->word, opts);
+
+ t = do_word_assignment (tlist->word, 0);
+--- 9562,9573 ----
+ opts[opti] = '\0';
+ if (opti > 0)
+! {
+! t = make_internal_declare (tlist->word->word, opts);
+! if (t != EXECUTION_SUCCESS)
+! {
+! last_command_exit_value = t;
+! exp_jump_to_top_level (DISCARD);
+! }
+! }
+
+ t = do_word_assignment (tlist->word, 0);
+
+*** bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 45
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 46
+
+ #endif /* _PATCHLEVEL_H_ */
+--- bash-4.3/configure.orig 2014-02-11 15:38:00.000000000 +0000
++++ bash-4.3/configure 2016-03-02 10:32:54.098832248 +0000
+@@ -2870,6 +2870,7 @@
+ *-opennt*|*-interix*) opt_bash_malloc=no ;; # Interix, now owned by Microsoft
+ *-nsk*) opt_bash_malloc=no ;; # HP NonStop
+ *-haiku*) opt_bash_malloc=no ;; # Haiku OS
++*-midipix*) opt_bash_malloc=no ;; # Midipix
+ esac
+
+ # memory scrambling on free()
+@@ -5167,13 +5168,13 @@
+ if test "x$ac_cv_lib_curses_tgetent" = xyes; then :
+ bash_cv_termcap_lib=libcurses
+ else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5
+-$as_echo_n "checking for tgetent in -lncurses... " >&6; }
+-if ${ac_cv_lib_ncurses_tgetent+:} false; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5
++$as_echo_n "checking for tgetent in -lncursesw... " >&6; }
++if ${ac_cv_lib_ncursesw_tgetent+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+-LIBS="-lncurses $LIBS"
++LIBS="-lncursesw $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+@@ -5193,18 +5194,18 @@
+ }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- ac_cv_lib_ncurses_tgetent=yes
++ ac_cv_lib_ncursesw_tgetent=yes
+ else
+- ac_cv_lib_ncurses_tgetent=no
++ ac_cv_lib_ncursesw_tgetent=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5
+-$as_echo "$ac_cv_lib_ncurses_tgetent" >&6; }
+-if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then :
+- bash_cv_termcap_lib=libncurses
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5
++$as_echo "$ac_cv_lib_ncursesw_tgetent" >&6; }
++if test "x$ac_cv_lib_ncursesw_tgetent" = xyes; then :
++ bash_cv_termcap_lib=libncursesw
+ else
+ bash_cv_termcap_lib=gnutermcap
+ fi
+@@ -5235,8 +5236,8 @@
+ elif test $bash_cv_termcap_lib = libtinfo; then
+ TERMCAP_LIB=-ltinfo
+ TERMCAP_DEP=
+-elif test $bash_cv_termcap_lib = libncurses; then
+-TERMCAP_LIB=-lncurses
++elif test $bash_cv_termcap_lib = libncursesw; then
++TERMCAP_LIB=-lncursesw
+ TERMCAP_DEP=
+ elif test $bash_cv_termcap_lib = libc; then
+ TERMCAP_LIB=
+@@ -15708,13 +15709,13 @@
+ if test "x$ac_cv_lib_curses_tgetent" = xyes; then :
+ bash_cv_termcap_lib=libcurses
+ else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5
+-$as_echo_n "checking for tgetent in -lncurses... " >&6; }
+-if ${ac_cv_lib_ncurses_tgetent+:} false; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5
++$as_echo_n "checking for tgetent in -lncursesw... " >&6; }
++if ${ac_cv_lib_ncursesw_tgetent+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+-LIBS="-lncurses $LIBS"
++LIBS="-lncursesw $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+@@ -15734,18 +15735,18 @@
+ }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- ac_cv_lib_ncurses_tgetent=yes
++ ac_cv_lib_ncursesw_tgetent=yes
+ else
+- ac_cv_lib_ncurses_tgetent=no
++ ac_cv_lib_ncursesw_tgetent=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5
+-$as_echo "$ac_cv_lib_ncurses_tgetent" >&6; }
+-if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then :
+- bash_cv_termcap_lib=libncurses
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5
++$as_echo "$ac_cv_lib_ncursesw_tgetent" >&6; }
++if test "x$ac_cv_lib_ncursesw_tgetent" = xyes; then :
++ bash_cv_termcap_lib=libncursesw
+ else
+ bash_cv_termcap_lib=gnutermcap
+ fi
+@@ -15776,8 +15777,8 @@
+ elif test $bash_cv_termcap_lib = libtinfo; then
+ TERMCAP_LIB=-ltinfo
+ TERMCAP_DEP=
+-elif test $bash_cv_termcap_lib = libncurses; then
+-TERMCAP_LIB=-lncurses
++elif test $bash_cv_termcap_lib = libncursesw; then
++TERMCAP_LIB=-lncursesw
+ TERMCAP_DEP=
+ elif test $bash_cv_termcap_lib = libc; then
+ TERMCAP_LIB=
+--- bash-4.3/lib/intl/libgnuintl.h.in.orig 2009-01-04 19:32:30.000000000 +0000
++++ bash-4.3/lib/intl/libgnuintl.h.in 2016-05-30 22:03:02.589798655 +0000
+@@ -107,7 +107,7 @@
+ #endif
+ /* Auxiliary macros. */
+ #ifdef _INTL_REDIRECT_ASM
+-# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
++# define _INTL_ASM(cname) __asm__ (#cname)
+ # define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+ # define _INTL_STRINGIFY(prefix) #prefix
+ #else
diff --git a/patches/binutils-2.24.51.local.patch b/patches/binutils-2.24.51.local.patch
new file mode 100644
index 00000000..1f983f04
--- /dev/null
+++ b/patches/binutils-2.24.51.local.patch
@@ -0,0 +1,739 @@
+diff -ru --new-file a/bfd/midipix.h b/bfd/midipix.h
+--- a/bfd/midipix.h 1969-12-31 19:00:00.000000000 -0500
++++ b/bfd/midipix.h 2015-03-11 17:23:18.492453732 -0400
+@@ -0,0 +1,10 @@
++#ifndef MIDIPIX_H
++#define MIDIPIX_H
++
++#define PE_TARGET_MIDIPIX
++
++#define PE_DSO_SUFFIX ".so"
++#define PE_DSOLIB_SUFFIX ".dso.a"
++#define PE_IMPLIB_SUFFIX ".lib.a"
++
++#endif
+--- a/ld/configure 2014-07-03 01:37:48.000000000 -0400
++++ b/ld/configure 2015-03-11 20:01:08.888756786 -0400
+@@ -19773,3 +19773,23 @@
+ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ fi
+
++sed -i -e 's/@pe_executable_name@/'$PE_EXECUTABLE_NAME'/g' Makefile
++sed -i -e 's/@pe_crt_section@/'$PE_CRT_SECTION'/g' Makefile
++sed -i -e 's/@pe_cygwin_fork_support@/'$PE_CYGWIN_FORK_SUPPORT'/g' Makefile
++
++#PE custom import library support
++if [ -f peimplib.h ]; then
++ echo 'build directory is not clean (peimplib.h already exists)'
++ exit 2
++fi
++
++touch peimplib.h || exit 2
++
++case $target_os in
++ *midipix*)
++ cat >> peimplib.h << EOF
++
++/* midipix supersystem support */
++#include "midipix.h"
++EOF
++esac
+diff -ru --new-file a/ld/emultempl/pe.em b/ld/emultempl/pe.em
+--- a/ld/emultempl/pe.em 2014-07-03 01:37:48.000000000 -0400
++++ b/ld/emultempl/pe.em 2015-11-25 09:02:09.729144140 -0500
+@@ -35,6 +35,18 @@
+ only determine if the subsystem is console or windows in order to select
+ the correct entry point by default. */
+
++
++#include "peimplib.h"
++
++#ifndef PE_IMPLIB_SUFFIX
++#define PE_IMPLIB_SUFFIX ".dll.a"
++#endif
++
++#ifndef PE_DSO_SUFFIX
++#define PE_DSO_SUFFIX ".dll"
++#endif
++
++
+ #define TARGET_IS_${EMULATION_NAME}
+
+ /* Do this before including bfd.h, so we prototype the right functions. */
+@@ -132,7 +144,7 @@
+ static char * thumb_entry_symbol = NULL;
+ static lang_assignment_statement_type *image_base_statement = 0;
+ static unsigned short pe_dll_characteristics = 0;
+-static bfd_boolean insert_timestamp = TRUE;
++static bfd_boolean insert_timestamp = 0;
+ static const char *emit_build_id;
+
+ #ifdef DLL_SUPPORT
+@@ -471,8 +483,8 @@
+ specifically set with --image-base\n"));
+ fprintf (file, _(" --disable-auto-image-base Do not auto-choose image base. (default)\n"));
+ fprintf (file, _(" --dll-search-prefix=<string> When linking dynamically to a dll without\n\
+- an importlib, use <string><basename>.dll\n\
+- in preference to lib<basename>.dll \n"));
++ an importlib, use <string><basename>"PE_DSO_SUFFIX"\n\
++ in preference to lib<basename>"PE_DSO_SUFFIX" \n"));
+ fprintf (file, _(" --enable-auto-import Do sophisticated linking of _sym to\n\
+ __imp_sym for DATA references\n"));
+ fprintf (file, _(" --disable-auto-import Do not auto-import DATA items from DLLs\n"));
+@@ -1698,7 +1710,7 @@
+ extension, and use that for the remainder of the
+ comparisons. */
+ pnt = strrchr (is3->the_bfd->filename, '.');
+- if (pnt != NULL && filename_cmp (pnt, ".dll") == 0)
++ if (pnt != NULL && filename_cmp (pnt, PE_DSO_SUFFIX) == 0)
+ break;
+ }
+
+@@ -1733,7 +1745,7 @@
+ then leave the filename alone. */
+ pnt = strrchr (is->the_bfd->filename, '.');
+
+- if (is_ms_arch && (filename_cmp (pnt, ".dll") == 0))
++ if (is_ms_arch && (filename_cmp (pnt, PE_DSO_SUFFIX) == 0))
+ {
+ int idata2 = 0, reloc_count=0;
+ asection *sec;
+@@ -2298,10 +2310,14 @@
+ }
+ libname_fmt [] =
+ {
++ /* optionally support ldso-specific import libraries */
++ #ifdef PE_DSOLIB_SUFFIX
++ { "lib%s"PE_DSOLIB_SUFFIX, FALSE },
++ #endif
+ /* Preferred explicit import library for dll's. */
+- { "lib%s.dll.a", FALSE },
++ { "lib%s"PE_IMPLIB_SUFFIX, FALSE },
+ /* Alternate explicit import library for dll's. */
+- { "%s.dll.a", FALSE },
++ { "%s"PE_IMPLIB_SUFFIX, FALSE },
+ /* "libfoo.a" could be either an import lib or a static lib.
+ For backwards compatibility, libfoo.a needs to precede
+ libfoo.dll and foo.dll in the search. */
+@@ -2310,10 +2326,10 @@
+ { "%s.lib", FALSE },
+ #ifdef DLL_SUPPORT
+ /* Try "<prefix>foo.dll" (preferred dll name, if specified). */
+- { "%s%s.dll", TRUE },
++ { "%s%s"PE_DSO_SUFFIX, TRUE },
+ #endif
+ /* Try "libfoo.dll" (default preferred dll name). */
+- { "lib%s.dll", FALSE },
++ { "lib%s"PE_DSO_SUFFIX, FALSE },
+ /* Finally try 'native' dll name "foo.dll". */
+ { "%s.dll", FALSE },
+ /* Note: If adding more formats to this table, make sure to check to
+diff -ru --new-file a/ld/emultempl/pep.em b/ld/emultempl/pep.em
+--- a/ld/emultempl/pep.em 2014-07-03 01:37:48.000000000 -0400
++++ b/ld/emultempl/pep.em 2015-11-25 09:02:21.153143987 -0500
+@@ -42,6 +42,18 @@
+ /* For WINDOWS_XP64 and higher */
+ /* Based on pe.em, but modified for 64 bit support. */
+
++
++#include "peimplib.h"
++
++#ifndef PE_IMPLIB_SUFFIX
++#define PE_IMPLIB_SUFFIX ".dll.a"
++#endif
++
++#ifndef PE_DSO_SUFFIX
++#define PE_DSO_SUFFIX ".dll"
++#endif
++
++
+ #define TARGET_IS_${EMULATION_NAME}
+
+ #define COFF_IMAGE_WITH_PE
+@@ -147,7 +159,7 @@
+ static int support_old_code = 0;
+ static lang_assignment_statement_type *image_base_statement = 0;
+ static unsigned short pe_dll_characteristics = 0;
+-static bfd_boolean insert_timestamp = TRUE;
++static bfd_boolean insert_timestamp = 0;
+ static const char *emit_build_id;
+
+ #ifdef DLL_SUPPORT
+@@ -434,8 +446,8 @@
+ unless user specifies one\n"));
+ fprintf (file, _(" --disable-auto-image-base Do not auto-choose image base. (default)\n"));
+ fprintf (file, _(" --dll-search-prefix=<string> When linking dynamically to a dll without\n\
+- an importlib, use <string><basename>.dll\n\
+- in preference to lib<basename>.dll \n"));
++ an importlib, use <string><basename>"PE_DSO_SUFFIX"\n\
++ in preference to lib<basename>"PE_DSO_SUFFIX" \n"));
+ fprintf (file, _(" --enable-auto-import Do sophisticated linking of _sym to\n\
+ __imp_sym for DATA references\n"));
+ fprintf (file, _(" --disable-auto-import Do not auto-import DATA items from DLLs\n"));
+@@ -1635,7 +1647,7 @@
+ extension, and use that for the remainder of the
+ comparisons. */
+ pnt = strrchr (is3->the_bfd->filename, '.');
+- if (pnt != NULL && filename_cmp (pnt, ".dll") == 0)
++ if (pnt != NULL && filename_cmp (pnt, PE_DSO_SUFFIX) == 0)
+ break;
+ }
+
+@@ -1670,7 +1682,7 @@
+ then leave the filename alone. */
+ pnt = strrchr (is->the_bfd->filename, '.');
+
+- if (is_ms_arch && (filename_cmp (pnt, ".dll") == 0))
++ if (is_ms_arch && (filename_cmp (pnt, PE_DSO_SUFFIX) == 0))
+ {
+ int idata2 = 0, reloc_count=0;
+ asection *sec;
+@@ -2062,10 +2074,14 @@
+ }
+ libname_fmt [] =
+ {
++ /* optionally support ldso-specific import libraries */
++ #ifdef PE_DSOLIB_SUFFIX
++ { "lib%s"PE_DSOLIB_SUFFIX, FALSE },
++ #endif
+ /* Preferred explicit import library for dll's. */
+- { "lib%s.dll.a", FALSE },
++ { "lib%s"PE_IMPLIB_SUFFIX, FALSE },
+ /* Alternate explicit import library for dll's. */
+- { "%s.dll.a", FALSE },
++ { "%s"PE_IMPLIB_SUFFIX, FALSE },
+ /* "libfoo.a" could be either an import lib or a static lib.
+ For backwards compatibility, libfoo.a needs to precede
+ libfoo.dll and foo.dll in the search. */
+@@ -2074,10 +2090,10 @@
+ { "%s.lib", FALSE },
+ #ifdef DLL_SUPPORT
+ /* Try "<prefix>foo.dll" (preferred dll name, if specified). */
+- { "%s%s.dll", TRUE },
++ { "%s%s"PE_DSO_SUFFIX, TRUE },
+ #endif
+ /* Try "libfoo.dll" (default preferred dll name). */
+- { "lib%s.dll", FALSE },
++ { "lib%s"PE_DSO_SUFFIX, FALSE },
+ /* Finally try 'native' dll name "foo.dll". */
+ { "%s.dll", FALSE },
+ /* Note: If adding more formats to this table, make sure to check to
+diff -ru --new-file a/ld/configure.tgt b/ld/configure.tgt
+--- a/ld/configure.tgt 2014-07-03 01:37:48.000000000 -0400
++++ b/ld/configure.tgt 2015-03-11 20:09:20.564772519 -0400
+@@ -319,6 +319,11 @@
+ test "$targ" != "$host" && LIB_PATH='${tooldir}/lib/w32api' ;;
+ i[3-7]86-*-mingw32*) targ_emul=i386pe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
++i[3-7]86-*-midipix*) targ_emul=i386pe ;
++ targ_extra_ofiles="deffilep.o pe-dll.o" ;
++ PE_EXECUTABLE_NAME=a.out ;
++ PE_CRT_SECTION=no ;
++ PE_CYGWIN_FORK_SUPPORT=no ;;
+ x86_64-*-pe | x86_64-*-pep) targ_emul=i386pep ;
+ targ_extra_emuls=i386pe ;
+ targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;;
+@@ -329,7 +333,13 @@
+ x86_64-*-mingw*) targ_emul=i386pep ;
+ targ_extra_emuls=i386pe
+ targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;;
+-i[3-7]86-*-interix*) targ_emul=i386pe_posix;
++x86_64-*-midipix*) targ_emul=i386pep ;
++ targ_extra_emuls=i386pe ;
++ targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;
++ PE_EXECUTABLE_NAME=a.out ;
++ PE_CRT_SECTION=no ;
++ PE_CYGWIN_FORK_SUPPORT=no ;;
++i[3-7]86-*-interix*) targ_emul=i386pe_posix ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ i[3-7]86-*-beospe*) targ_emul=i386beos ;;
+ i[3-7]86-*-beos*) targ_emul=elf_i386_be ;;
+diff -ru --new-file a/ld/Makefile.in b/ld/Makefile.in
+--- a/ld/Makefile.in 2014-07-03 01:37:48.000000000 -0400
++++ b/ld/Makefile.in 2015-03-11 20:09:38.972773108 -0400
+@@ -54,6 +54,9 @@
+ host_triplet = @host@
+ target_triplet = @target@
+ bin_PROGRAMS = ld-new$(EXEEXT)
++PE_EXECUTABLE_NAME = @pe_executable_name@
++PE_CRT_SECTION = @pe_crt_section@
++PE_CYGWIN_FORK_SUPPORT = @pe_cygwin_fork_support@
+
+ # Automake 1.9 will only build info files in the objdir if they are
+ # mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+@@ -831,7 +833,7 @@
+ POTFILES = $(CFILES) $(HFILES) $(EMULATION_FILES)
+
+ # These all start with e so 'make clean' can find them.
+-GENSCRIPTS = LIB_PATH='${LIB_PATH}' $(SHELL) $(srcdir)/genscripts.sh "${srcdir}" "${libdir}" "${prefix}" "${exec_prefix}" @host@ @target@ @target_alias@ "@EMULATION_LIBPATH@" "@NATIVE_LIB_DIRS@" @use_sysroot@ @enable_initfini_array@
++GENSCRIPTS = EXECUTABLE_NAME='${PE_EXECUTABLE_NAME}' PE_CRT_SECTION='${PE_CRT_SECTION}' PE_CYGWIN_FORK_SUPPORT='${PE_CYGWIN_FORK_SUPPORT}' LIB_PATH='${LIB_PATH}' $(SHELL) $(srcdir)/genscripts.sh "${srcdir}" "${libdir}" "${prefix}" "${exec_prefix}" @host@ @target@ @target_alias@ "@EMULATION_LIBPATH@" "@NATIVE_LIB_DIRS@" @use_sysroot@ @enable_initfini_array@
+ GEN_DEPENDS = $(srcdir)/genscripts.sh stringify.sed
+ ELF_DEPS = $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/elf-generic.em $(srcdir)/scripttempl/DWARF.sc
+ ELF_GEN_DEPS = $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em $(srcdir)/emultempl/genelf.em $(srcdir)/scripttempl/DWARF.sc
+diff -ru --new-file a/ld/scripttempl/pep.sc b/ld/scripttempl/pep.sc
+--- a/ld/scripttempl/pep.sc 2014-07-03 01:37:48.000000000 -0400
++++ b/ld/scripttempl/pep.sc 2015-03-11 20:10:05.324773952 -0400
+@@ -92,12 +92,17 @@
+ ${RELOCATING+ *(.gcc_except_table)}
+ }
+
++EOF
++if [ x"$PE_CYGWIN_FORK_SUPPORT" != xno ]; then cat << EOF
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data$nocopy". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
+
++EOF
++fi
++cat << EOF
+ .data ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__data_start__ = . ;}
+@@ -106,7 +111,12 @@
+ ${R_DATA}
+ *(.jcr)
+ ${RELOCATING+__data_end__ = . ;}
++EOF
++if [ x"$PE_CYGWIN_FORK_SUPPORT" != xno ]; then cat << EOF
+ ${RELOCATING+*(.data_cygwin_nocopy)}
++EOF
++fi
++cat << EOF
+ }
+
+ .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
+@@ -170,6 +180,8 @@
+ ${RELOCATING+__IAT_end__ = .;}
+ ${R_IDATA67}
+ }
++EOF
++if [ x"$PE_CRT_SECTION" != xno ]; then cat << EOF
+ .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+___crt_xc_start__ = . ;}
+@@ -188,6 +200,9 @@
+ ${R_CRT_XT}
+ ${RELOCATING+___crt_xt_end__ = . ;}
+ }
++EOF
++fi
++cat << EOF
+
+ /* Windows TLS expects .tls\$AAA to be at the start and .tls\$ZZZ to be
+ at the end of the .tls section. This is important because _tls_start MUST
+diff -ru --new-file a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc
+--- a/ld/scripttempl/pe.sc 2014-07-03 01:37:48.000000000 -0400
++++ b/ld/scripttempl/pe.sc 2015-03-11 20:10:10.036774102 -0400
+@@ -92,12 +92,17 @@
+ ${RELOCATING+ *(.gcc_except_table)}
+ }
+
++EOF
++if [ x"$PE_CYGWIN_FORK_SUPPORT" != xno ]; then cat << EOF
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data$nocopy". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
+
++EOF
++fi
++cat << EOF
+ .data ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__data_start__ = . ;}
+@@ -106,7 +111,12 @@
+ ${R_DATA}
+ *(.jcr)
+ ${RELOCATING+__data_end__ = . ;}
++EOF
++if [ x"$PE_CYGWIN_FORK_SUPPORT" != xno ]; then cat << EOF
+ ${RELOCATING+*(.data_cygwin_nocopy)}
++EOF
++fi
++cat << EOF
+ }
+
+ .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
+@@ -165,6 +175,8 @@
+ ${RELOCATING+__IAT_end__ = .;}
+ ${R_IDATA67}
+ }
++EOF
++if [ x"$PE_CRT_SECTION" != xno ]; then cat << EOF
+ .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+___crt_xc_start__ = . ;}
+@@ -183,6 +195,9 @@
+ ${R_CRT_XT}
+ ${RELOCATING+___crt_xt_end__ = . ;}
+ }
++EOF
++fi
++cat << EOF
+
+ /* Windows TLS expects .tls\$AAA to be at the start and .tls\$ZZZ to be
+ at the end of section. This is important because _tls_start MUST
+diff -ru --new-file a/binutils/winduni.c b/binutils/winduni.c
+--- a/binutils/winduni.c 2014-07-03 01:37:23.000000000 -0400
++++ b/binutils/winduni.c 2015-02-14 11:18:32.987163288 -0500
+@@ -57,7 +57,7 @@
+ /* Codepages mapped. */
+ static local_iconv_map codepages[] =
+ {
+- { 0, "MS-ANSI" },
++ { 0, "cp1252" },
+ { 1, "WINDOWS-1252" },
+ { 437, "MS-ANSI" },
+ { 737, "MS-GREEK" },
+diff -ru a/ld/pe-dll.c b/ld/pe-dll.c
+--- a/ld/pe-dll.c 2014-07-03 01:37:48.000000000 -0400
++++ b/ld/pe-dll.c 2015-06-13 20:08:00.160401506 -0400
+@@ -40,6 +40,7 @@
+ #include "coff/internal.h"
+ #include "../bfd/libcoff.h"
+ #include "deffile.h"
++#include "peimplib.h"
+
+ #ifdef pe_use_x86_64
+
+@@ -234,7 +235,11 @@
+ { STRING_COMMA_LEN ("impure_ptr") },
+ { STRING_COMMA_LEN ("_impure_ptr") },
+ { STRING_COMMA_LEN ("_fmode") },
++ #ifdef PE_TARGET_MIDIPIX
++ /* (default) excluded symbols are defined by the caller (specs, etc.) */
++ #else
+ { STRING_COMMA_LEN ("environ") },
++ #endif
+ { NULL, 0 }
+ };
+
+@@ -644,10 +649,13 @@
+ {
+ int i, j;
+ struct bfd_link_hash_entry *blhe;
++ struct bfd_link_hash_entry *blhew;
+ bfd *b;
+ struct bfd_section *s;
+ def_file_export *e = 0;
+ bfd_boolean resort_needed;
++ char *weaksym;
++ char *objsym;
+
+ if (!pe_def_file)
+ pe_def_file = def_file_empty ();
+@@ -737,6 +745,16 @@
+ if (is_import (sn))
+ continue;
+
++ if (!strncmp (sn, ".weak.", 6) && strchr (sn + 6, '.'))
++ {
++ objsym = strdup (sn);
++ weaksym = strdup (sn + 6);
++ *(strchr (weaksym, '.')) = '\0';
++ sn = weaksym;
++ }
++ else
++ weaksym = 0;
++
+ name = xmalloc (strlen ("__imp_") + strlen (sn) + 1);
+ sprintf (name, "%s%s", "__imp_", sn);
+
+@@ -745,7 +763,8 @@
+ free (name);
+
+ if (blhe && blhe->type == bfd_link_hash_defined)
+- continue;
++ if (strncmp (blhe->u.def.section->name, ".got$", 5))
++ continue;
+ }
+
+ if (pe_details->underscored && *sn == '_')
+@@ -761,7 +780,20 @@
+ /* Fill data flag properly, from dlltool.c. */
+ if (!is_dup)
+ p->flag_data = !(symbols[j]->flags & BSF_FUNCTION);
++
++ if (weaksym)
++ {
++ blhew = bfd_link_hash_lookup (info->hash, weaksym,
++ FALSE, FALSE, FALSE);
++ if (blhew->type != bfd_link_hash_defined)
++ {
++ free (p->internal_name);
++ p->internal_name = objsym;
++ }
++ }
+ }
++ if (weaksym)
++ free (weaksym);
+ }
+ }
+ }
+@@ -910,6 +942,7 @@
+
+ if (blhe
+ && (blhe->type == bfd_link_hash_defined
++ || (blhe->type == bfd_link_hash_defweak)
+ || (blhe->type == bfd_link_hash_common)))
+ {
+ count_exported++;
+@@ -919,7 +952,7 @@
+ /* Only fill in the sections. The actual offsets are computed
+ in fill_exported_offsets() after common symbols are laid
+ out. */
+- if (blhe->type == bfd_link_hash_defined)
++ if ((blhe->type == bfd_link_hash_defined) || (blhe->type == bfd_link_hash_defweak))
+ exported_symbol_sections[i] = blhe->u.def.section;
+ else
+ exported_symbol_sections[i] = blhe->u.c.p->section;
+diff -ru --new-file a/bfd/config.bfd b/bfd/config.bfd
+--- a/bfd/config.bfd 2014-07-03 01:37:20.000000000 -0400
++++ b/bfd/config.bfd 2015-02-14 11:27:08.199179775 -0500
+@@ -679,7 +679,7 @@
+ targ_archs="$targ_archs bfd_arm_arch"
+ want64=true
+ ;;
+- x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin)
++ x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin | x86_64-*-midipix*)
+ targ_defvec=x86_64_pe_vec
+ targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_be_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec"
+ want64=true
+@@ -731,7 +731,7 @@
+ targ_defvec=i386_elf32_vec
+ targ_selvecs=i386_coff_vec
+ ;;
+- i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe)
++ i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe | i[3-7]86-*-midipix*)
+ targ_defvec=i386_pe_vec
+ targ_selvecs="i386_pe_vec i386_pei_vec i386_elf32_vec"
+ targ_underscore=yes
+diff -ru --new-file a/binutils/configure b/binutils/configure
+--- a/binutils/configure 2014-07-03 01:37:22.000000000 -0400
++++ b/binutils/configure 2015-09-13 21:35:09.738957435 -0400
+@@ -14015,7 +14015,7 @@
+ BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+- x86_64-*-mingw* | x86_64-*-cygwin*)
++ x86_64-*-mingw* | x86_64-*-midipix* | x86_64-*-cygwin*)
+ BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64"
+@@ -14025,7 +14025,7 @@
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)'
+ ;;
+- i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32** | i[3-7]86-*-netbsdpe*)
++ i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-midipix* | i[3-7]86-*-mingw32** | i[3-7]86-*-netbsdpe*)
+ BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386"
+diff -ru --new-file a/configure b/configure
+--- a/configure 2014-07-03 01:37:23.000000000 -0400
++++ b/configure 2015-03-11 17:07:15.820422926 -0400
+@@ -3428,6 +3428,9 @@
+ x86_64-*-mingw*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
++ *-midipix*)
++ noconfigdirs="$noconfigdirs ${libgcj}"
++ ;;
+ mmix-*-*)
+ noconfigdirs="$noconfigdirs target-libffi target-boehm-gc"
+ ;;
+@@ -3549,6 +3552,9 @@
+ *-*-mingw*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+ ;;
++ *-*-midipix*)
++ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
++ ;;
+ *-*-netbsd*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+ ;;
+@@ -6257,7 +6263,7 @@
+
+ target_elf=no
+ case $target in
+- *-darwin* | *-aix* | *-cygwin* | *-mingw* | *-aout* | *-*coff* | \
++ *-darwin* | *-aix* | *-cygwin* | *-mingw* | *-midipix* | *-aout* | *-*coff* | \
+ *-msdosdjgpp* | *-vms* | *-wince* | *-*-pe* | \
+ alpha*-dec-osf* | *-interix* | hppa[12]*-*-hpux*)
+ target_elf=no
+diff -ru --new-file a/gas/configure.tgt b/gas/configure.tgt
+--- a/gas/configure.tgt 2014-07-03 01:37:25.000000000 -0400
++++ b/gas/configure.tgt 2015-02-14 11:27:08.223179776 -0500
+@@ -262,7 +262,7 @@
+ i*) fmt=coff em=pe ;;
+ esac ;;
+ i386-*-interix*) fmt=coff em=interix ;;
+- i386-*-mingw*)
++ i386-*-mingw* | i386-*-midipix*)
+ case ${cpu} in
+ x86_64*) fmt=coff em=pep ;;
+ i*) fmt=coff em=pe ;;
+diff -ru a/bfd/cofflink.c b/bfd/cofflink.c
+--- a/bfd/cofflink.c 2014-07-03 01:37:20.000000000 -0400
++++ b/bfd/cofflink.c 2015-06-13 20:22:46.000389638 -0400
+@@ -202,6 +202,7 @@
+ bfd_size_type symesz;
+ bfd_byte *esym;
+ bfd_byte *esym_end;
++ char *weaksym;
+
+ *pneeded = FALSE;
+
+@@ -236,6 +237,16 @@
+ && CONST_STRNEQ (name, "__imp_"))
+ h = bfd_link_hash_lookup (info->hash, name + 6, FALSE, FALSE, TRUE);
+
++ if (!h && !strncmp (name, ".weak.", 6) && strchr (name + 6, '.'))
++ {
++ weaksym = strdup (name + 6);
++ *(strchr (weaksym, '.')) = '\0';
++ h = bfd_link_hash_lookup (info->hash, weaksym, FALSE, FALSE, TRUE);
++ name = weaksym;
++ }
++ else
++ weaksym = 0;
++
+ /* We are only interested in symbols that are currently
+ undefined. If a symbol is currently known to be common,
+ COFF linkers do not bring in an object file which defines
+@@ -249,6 +260,9 @@
+ *pneeded = TRUE;
+ return TRUE;
+ }
++
++ if (weaksym)
++ free (weaksym);
+ }
+
+ esym += (sym.n_numaux + 1) * symesz;
+@@ -320,6 +334,7 @@
+ bfd_byte *esym;
+ bfd_byte *esym_end;
+ bfd_size_type amt;
++ char *weaksym;
+
+ symcount = obj_raw_syment_count (abfd);
+
+@@ -476,6 +491,20 @@
+ addit = FALSE;
+ }
+
++ if (!strncmp (name, ".weak.", 6) && strchr (name + 6, '.'))
++ {
++ if (! (bfd_coff_link_add_one_symbol
++ (info, abfd, name, flags, section, value,
++ (const char *) NULL, copy, FALSE,
++ (struct bfd_link_hash_entry **) sym_hash)))
++ goto error_return;
++
++ weaksym = strdup (name + 6);
++ *(strchr(weaksym, '.')) = 0;
++ name = weaksym;
++ flags |= BSF_WEAK;
++ }
++
+ if (addit)
+ {
+ if (! (bfd_coff_link_add_one_symbol
+diff -ru a/bfd/linker.c b/bfd/linker.c
+--- a/bfd/linker.c 2014-07-03 01:37:21.000000000 -0400
++++ b/bfd/linker.c 2015-06-06 17:51:24.148275212 -0400
+@@ -1050,6 +1050,7 @@
+ struct archive_hash_table arsym_hash;
+ unsigned int indx;
+ struct bfd_link_hash_entry **pundef;
++ char *weaksym;
+
+ if (! bfd_has_map (abfd))
+ {
+@@ -1073,6 +1074,13 @@
+ struct archive_hash_entry *arh;
+ struct archive_list *l, **pp;
+
++ if (!strncmp (arsym->name, ".weak.", 6) && strchr (arsym->name + 6, '.'))
++ {
++ weaksym = strdup (arsym->name + 6);
++ *(strchr (weaksym, '.')) = '\0';
++ arsym->name = weaksym;
++ }
++
+ arh = archive_hash_lookup (&arsym_hash, arsym->name, TRUE, FALSE);
+ if (arh == NULL)
+ goto error_return;
+diff -ru a/gas/config/tc-i386.c b/gas/config/tc-i386.c
+--- a/gas/config/tc-i386.c 2014-07-03 01:37:25.000000000 -0400
++++ b/gas/config/tc-i386.c 2015-06-12 22:40:37.100250091 -0400
+@@ -9148,25 +9148,6 @@
+ value += md_pcrel_from (fixP);
+ #endif
+ }
+-#if defined (OBJ_COFF) && defined (TE_PE)
+- if (fixP->fx_addsy != NULL
+- && S_IS_WEAK (fixP->fx_addsy)
+- /* PR 16858: Do not modify weak function references. */
+- && ! fixP->fx_pcrel)
+- {
+-#if !defined (TE_PEP)
+- /* For x86 PE weak function symbols are neither PC-relative
+- nor do they set S_IS_FUNCTION. So the only reliable way
+- to detect them is to check the flags of their containing
+- section. */
+- if (S_GET_SEGMENT (fixP->fx_addsy) != NULL
+- && S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_CODE)
+- ;
+- else
+-#endif
+- value -= S_GET_VALUE (fixP->fx_addsy);
+- }
+-#endif
+
+ /* Fix a few things - the dynamic linker expects certain values here,
+ and we must not disappoint it. */
+@@ -9237,8 +9218,11 @@
+ fixP->fx_done = 0;
+ /* Remember value for tc_gen_reloc. */
+ fixP->fx_addnumber = value;
+- /* Clear out the frag for now. */
+- value = 0;
++ /* for data symbols, cancel the effect of the relocation */
++ if (!((S_GET_SEGMENT (fixP->fx_addsy)->flags) & SEC_CODE))
++ value = -S_GET_VALUE (fixP->fx_addsy);
++ else
++ value = 0;
+ }
+ #endif
+ else if (use_rela_relocations)
+
+--- a/binutils/rename.c 2014-07-03 01:37:22.000000000 -0400
++++ b/binutils/rename.c 2015-11-25 23:13:38.086948592 -0500
+@@ -167,7 +167,10 @@
+ && s.st_nlink == 1)
+ )
+ {
+- ret = rename (from, to);
++ if ((ret = rename (from, to)))
++ if (!(ret = simple_copy (from, to)))
++ unlink (from);
++
+ if (ret == 0)
+ {
+ if (exists)
+--- binutils-2.24.51/intl/libgnuintl.h.orig 2014-07-03 05:37:48.000000000 +0000
++++ binutils-2.24.51/intl/libgnuintl.h 2016-05-30 19:56:21.701967351 +0000
+@@ -105,7 +105,7 @@
+ #endif
+ /* Auxiliary macros. */
+ #ifdef _INTL_REDIRECT_ASM
+-# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
++# define _INTL_ASM(cname) __asm__ (#cname)
+ # define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+ # define _INTL_STRINGIFY(prefix) #prefix
+ #else
diff --git a/patches/coreutils-8.23.local.patch b/patches/coreutils-8.23.local.patch
new file mode 100644
index 00000000..a98d3791
--- /dev/null
+++ b/patches/coreutils-8.23.local.patch
@@ -0,0 +1,59 @@
+diff -ru --new-file a/configure b/configure
+--- a/configure 2014-07-18 18:07:39.000000000 -0400
++++ b/configure 2015-06-01 12:42:55.874926255 -0400
+@@ -66789,3 +66791,11 @@
+ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ fi
+
++# bypass dependency on help2man
++if [ x"$cross_compiling" = xyes ]; then
++ mkdir -p man;
++ for f in $srcdir/src/*.c; do src=$(basename $f); doc="${src%.*}"; echo $doc; touch man/$doc.1; done
++ for f in dir sha1sum sha224sum sha256sum sha384sum sha512sum vdir; do touch man/$f.1; done
++
++ sed -i -e 's/@cross_compiling@/'$cross_compiling'/g' Makefile || exit 2
++fi
+diff -ru --new-file a/Makefile.in b/Makefile.in
+--- a/Makefile.in 2014-07-18 18:22:24.000000000 -0400
++++ b/Makefile.in 2015-06-01 12:03:29.274957961 -0400
+@@ -4911,6 +4911,8 @@
+ $(bin_SCRIPTS) \
+ $(EXTRA_PROGRAMS)
+
++CROSS_COMPILE = @cross_compiling@
++
+ pm = progs-makefile
+ pr = progs-readme
+ @CROSS_COMPILING_FALSE@cu_install_program = src/ginstall
+@@ -14061,6 +14063,10 @@
+ # Include the generated man dependencies.
+ @AMDEP_TRUE@@am__include@ man/dynamic-deps.mk
+
++ifeq ($(CROSS_COMPILE),yes)
++.x.1:
++
++else
+ .x.1:
+ $(AM_V_GEN)name=`echo $@ | sed 's|.*/||; s|\.1$$||'` || exit 1; \
+ case $$name in \
+@@ -14086,6 +14092,8 @@
+ && chmod a-w $@-t \
+ && mv $@-t $@
+ .PHONY: check-root
++endif
++
+ check-root:
+ $(MAKE) check TESTS='$(root_tests)' SUBDIRS=.
+
+diff -ru --new-file a/src/fs.h b/src/fs.h
+--- a/src/fs.h 2014-07-18 14:33:26.000000000 -0400
++++ b/src/fs.h 2015-06-01 10:19:57.475041184 -0400
+@@ -2,7 +2,7 @@
+ Please send additions to bug-coreutils@gnu.org and meskes@debian.org.
+ This file is generated automatically from ./src/stat.c. */
+
+-#if defined __linux__
++#if defined __linux__ || defined __midipix__
+ # define S_MAGIC_ADFS 0xADF5
+ # define S_MAGIC_AFFS 0xADFF
+ # define S_MAGIC_AFS 0x5346414F
diff --git a/patches/curl-7.47.1.local.patch b/patches/curl-7.47.1.local.patch
new file mode 100644
index 00000000..3a10aa92
--- /dev/null
+++ b/patches/curl-7.47.1.local.patch
@@ -0,0 +1,41 @@
+--- curl-7.47.1/configure.orig 2016-02-07 15:43:48.000000000 +0100
++++ curl-7.47.1/configure 2016-03-08 11:33:24.125711200 +0100
+@@ -14297,6 +14297,18 @@
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
++midipix*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}"
++ soname_spec="\${libname}\${release}\${shared_ext}\$major"
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=no
++ dynamic_linker='GNU/Linux ld.so'
++ ;;
++
+ netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+--- curl-7.47.1/lib/Makefile.in.orig 2016-02-07 14:43:49.000000000 +0000
++++ curl-7.47.1/lib/Makefile.in 2016-06-10 00:07:28.334457112 +0000
+@@ -243,7 +243,7 @@
+ am__v_lt_1 =
+ libcurl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcurl_la_CFLAGS) \
+- $(CFLAGS) $(libcurl_la_LDFLAGS) $(LDFLAGS) -o $@
++ $(CFLAGS) $(LDFLAGS) -o $@
+ libcurlu_la_LIBADD =
+ am__objects_6 = libcurlu_la-file.lo libcurlu_la-timeval.lo \
+ libcurlu_la-base64.lo libcurlu_la-hostip.lo \
+@@ -842,7 +842,7 @@
+ vtls/$(DEPDIR)/$(am__dirstamp)
+
+ libcurl.la: $(libcurl_la_OBJECTS) $(libcurl_la_DEPENDENCIES) $(EXTRA_libcurl_la_DEPENDENCIES)
+- $(AM_V_CCLD)$(libcurl_la_LINK) -rpath $(libdir) $(libcurl_la_OBJECTS) $(libcurl_la_LIBADD) $(LIBS)
++ $(AM_V_CCLD)$(libcurl_la_LINK) -rpath $(libdir) $(libcurl_la_OBJECTS) $(libcurl_la_LIBADD) $(LIBS) $(libcurl_la_LDFLAGS)
+ vtls/libcurlu_la-openssl.lo: vtls/$(am__dirstamp) \
+ vtls/$(DEPDIR)/$(am__dirstamp)
+ vtls/libcurlu_la-gtls.lo: vtls/$(am__dirstamp) \
diff --git a/patches/findutils-4.5.14.local.patch b/patches/findutils-4.5.14.local.patch
new file mode 100644
index 00000000..a28d9dc2
--- /dev/null
+++ b/patches/findutils-4.5.14.local.patch
@@ -0,0 +1,27 @@
+diff -ru --new-file a/configure b/configure
+--- a/configure 2014-07-19 06:24:44.000000000 -0400
++++ b/configure 2015-05-31 23:05:19.895583486 -0400
+@@ -54948,3 +54950,23 @@
+ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ fi
+
++
++cat >> config.h << EOF
++
++#define HAVE_ENDPWENT 1
++
++#undef fchownat
++#undef fchdir
++#undef fseeko
++#undef fstatat
++#undef getcwd
++#undef gmtime
++#undef localtime
++#undef lstat
++#undef malloc
++#undef memcmp
++#undef mktime
++#undef realloc
++#undef strnlen
++
++EOF
diff --git a/patches/glib-2.46.2.local.patch b/patches/glib-2.46.2.local.patch
new file mode 100644
index 00000000..8153cb8a
--- /dev/null
+++ b/patches/glib-2.46.2.local.patch
@@ -0,0 +1,170 @@
+--- glib-2.46.2/configure.orig 2015-11-06 22:28:54.000000000 +0000
++++ glib-2.46.2/configure 2016-03-06 18:55:06.490493143 +0000
+@@ -21737,33 +21737,7 @@
+ if ${glib_cv_stack_grows+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+-
+- if test "$cross_compiling" = yes; then :
+- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "cannot run test program while cross compiling
+-See \`config.log' for more details" "$LINENO" 5; }
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-
+- volatile int *a = 0, *b = 0;
+- void f (int i) { volatile int x = 5; if (i == 0) b = &x; else f (i - 1); }
+- int main () { volatile int y = 7; a = &y; f (100); return b > a ? 0 : 1; }
+-
+-_ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+ glib_cv_stack_grows=yes
+-
+-else
+- glib_cv_stack_grows=no
+-
+-fi
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+- conftest.$ac_objext conftest.beam conftest.$ac_ext
+-fi
+-
+-
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glib_cv_stack_grows" >&5
+ $as_echo "$glib_cv_stack_grows" >&6; }
+@@ -25142,37 +25116,7 @@
+ if ${glib_cv_uscore+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+-
+- if test "$cross_compiling" = yes; then :
+- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "cannot run test program while cross compiling
+-See \`config.log' for more details" "$LINENO" 5; }
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <dlfcn.h>
+- int glib_underscore_test (void) { return 42; }
+- int main() {
+- void *f1 = (void*)0, *f2 = (void*)0, *handle;
+- handle = dlopen ((void*)0, 0);
+- if (handle) {
+- f1 = dlsym (handle, "glib_underscore_test");
+- f2 = dlsym (handle, "_glib_underscore_test");
+- } return (!f2 || f1);
+- }
+-_ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+ glib_cv_uscore=yes
+-else
+- glib_cv_uscore=no
+-fi
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+- conftest.$ac_objext conftest.beam conftest.$ac_ext
+-fi
+-
+- rm -f plugin.c plugin.$ac_objext plugin.lo
+-
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glib_cv_uscore" >&5
+ $as_echo "$glib_cv_uscore" >&6; }
+@@ -26503,37 +26447,7 @@
+ if ${ac_cv_func_posix_getpwuid_r+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- if test "$cross_compiling" = yes; then :
+- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "cannot run test program while cross compiling
+-See \`config.log' for more details" "$LINENO" 5; }
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-
+-#include <errno.h>
+-#include <pwd.h>
+-int main () {
+- char buffer[10000];
+- struct passwd pwd, *pwptr = &pwd;
+- int error;
+- errno = 0;
+- error = getpwuid_r (0, &pwd, buffer,
+- sizeof (buffer), &pwptr);
+- return (error < 0 && errno == ENOSYS)
+- || error == ENOSYS;
+-}
+-_ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_func_posix_getpwuid_r=yes
+-else
+- ac_cv_func_posix_getpwuid_r=no
+-fi
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+- conftest.$ac_objext conftest.beam conftest.$ac_ext
+-fi
+-
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_posix_getpwuid_r" >&5
+ $as_echo "$ac_cv_func_posix_getpwuid_r" >&6; }
+@@ -26594,37 +26508,7 @@
+ if ${ac_cv_func_posix_getgrgid_r+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- if test "$cross_compiling" = yes; then :
+- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "cannot run test program while cross compiling
+-See \`config.log' for more details" "$LINENO" 5; }
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-
+-#include <errno.h>
+-#include <grp.h>
+-int main () {
+- char buffer[10000];
+- struct group grp, *grpptr = &grp;
+- int error;
+- errno = 0;
+- error = getgrgid_r (0, &grp, buffer,
+- sizeof (buffer), &grpptr);
+- return (error < 0 && errno == ENOSYS)
+- || error == ENOSYS;
+-}
+-_ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_func_posix_getgrgid_r=yes
+-else
+- ac_cv_func_posix_getgrgid_r=no
+-fi
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+- conftest.$ac_objext conftest.beam conftest.$ac_ext
+-fi
+-
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_posix_getgrgid_r" >&5
+ $as_echo "$ac_cv_func_posix_getgrgid_r" >&6; }
+@@ -27053,7 +26937,7 @@
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+- glib_cv_eventfd=yes
++ glib_cv_eventfd=no
+ else
+ glib_cv_eventfd=no
+ fi
+--- glib-2.46.2/gio/inotify/Makefile.in.orig 2015-11-06 23:28:59.000000000 +0100
++++ glib-2.46.2/gio/inotify/Makefile.in 2016-09-07 05:20:16.670049836 +0200
+@@ -180,7 +180,7 @@
+ "$(DESTDIR)$(installed_test_metadir)" \
+ "$(DESTDIR)$(installed_testdir)"
+ LTLIBRARIES = $(installed_test_LTLIBRARIES) $(noinst_LTLIBRARIES)
+-libinotify_la_LIBADD =
++libinotify_la_LIBADD = -L../../glib -lglib-2.0
+ am__objects_1 =
+ am_libinotify_la_OBJECTS = libinotify_la-inotify-kernel.lo \
+ libinotify_la-inotify-sub.lo libinotify_la-inotify-path.lo \
diff --git a/patches/gmp-5.1.3.local.patch b/patches/gmp-5.1.3.local.patch
new file mode 100644
index 00000000..ecee6b99
--- /dev/null
+++ b/patches/gmp-5.1.3.local.patch
@@ -0,0 +1,22 @@
+diff -ru a/configfsf.sub b/configfsf.sub
+--- a/configfsf.sub 2013-09-30 06:18:28.000000000 -0400
++++ b/configfsf.sub 2015-05-28 00:18:19.772345286 -0400
+@@ -794,6 +794,9 @@
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
++ midipix)
++ os=-midipix
++ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+@@ -1370,7 +1373,7 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
diff --git a/patches/gnupg-2.1.15.local.patch b/patches/gnupg-2.1.15.local.patch
new file mode 100644
index 00000000..b0bf6ca3
--- /dev/null
+++ b/patches/gnupg-2.1.15.local.patch
@@ -0,0 +1,105 @@
+diff -ru gnupg-2.1.15.orig/tests/inittests gnupg-2.1.15/tests/inittests
+--- gnupg-2.1.15.orig/tests/inittests 2016-02-02 07:05:16.000000000 +0100
++++ gnupg-2.1.15/tests/inittests 2016-10-19 18:09:36.112010000 +0200
+@@ -1,99 +1,3 @@
+ #!/bin/sh
+-# Copyright (C) 2002 Free Software Foundation, Inc.
+-#
+-# This file is free software; as a special exception the author gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-#
+-# This file is distributed in the hope that it will be useful, but
+-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-
+-set -e
+-
+-sample_certs='
+-cert_g10code_test1.pem
+-cert_g10code_pete1.pem
+-cert_g10code_theo1.pem
+-'
+-
+-private_keys='
+-32100C27173EF6E9C4E9A25D3D69F86D37A4F939
+-'
+-
+-clean_files='
+-gpgsm.conf gpg-agent.conf trustlist.txt pubring.kbx
+-msg msg.sig msg.unsig
+-'
+-
+-
+-[ -z "$srcdir" ] && srcdir=.
+-[ -z "$GPGSM" ] && GPGSM=../sm/gpgsm
+-
+-if [ -d $srcdir/samplekeys ] \
+- && grep TESTS_ENVIRONMENT Makefile >/dev/null 2>&1; then
+- :
+-else
+- # During make distclean the Makefile has already been removed,
+- # so we need this extra test.
+- if ! grep gnupg-test-directory testdir.stamp >/dev/null 2>&1; then
+- echo "inittests: please cd to the tests directory first" >&2
+- exit 1
+- fi
+-fi
+-
+-if [ "$1" = "--clean" ]; then
+- if [ -d private-keys-v1.d ]; then
+- rm private-keys-v1.d/* 2>/dev/null || true
+- rmdir private-keys-v1.d
+- fi
+- rm ${clean_files} testdir.stamp 2>/dev/null || true
+- exit 0
+-fi
+-
+-if [ "$GNUPGHOME" != "`/bin/pwd`" ]; then
+- echo "inittests: please set GNUPGHOME to the test directory" >&2
+- exit 1
+-fi
+-
+-if [ -n "$GPG_AGENT_INFO" ]; then
+- echo "inittests: please unset GPG_AGENT_INFO" >&2
+- exit 1
+-fi
+-
+-# A stamp file used with --clean
+-echo gnupg-test-directory > testdir.stamp
+-
+-
+-# Create the private key directy if it does not exists and copy
+-# the sample keys.
+-[ -d private-keys-v1.d ] || mkdir private-keys-v1.d
+-for i in ${private_keys}; do
+- cat ${srcdir}/samplekeys/$i.key >private-keys-v1.d/$i.key
+-done
+-
+-# Create the configuration scripts
+-# Note, die to an expired test certificate, we need to use
+-# the faked system time option.
+-cat > gpgsm.conf <<EOF
+-no-secmem-warning
+-disable-crl-checks
+-agent-program ../agent/gpg-agent
+-faked-system-time 1038835799
+-EOF
+-
+-cat > gpg-agent.conf <<EOF
+-no-grab
+-pinentry-program /home/wk/work/pinentry/gtk/pinentry-gtk
+-EOF
+-
+-cat > trustlist.txt <<EOF
+-# CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=Düsseldorf,C=DE
+-3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E S
+-EOF
+-
+-# Make sure that the sample certs are available but ignore errors here
+-# because we are not a test script.
+-for i in ${sample_certs}; do
+- $GPGSM --import ${srcdir}/samplekeys/$i || true
+-done
++#testing cross compiled binaries, nope.
++exit 0
diff --git a/patches/hexcurse.local.patch b/patches/hexcurse.local.patch
new file mode 100644
index 00000000..912a14be
--- /dev/null
+++ b/patches/hexcurse.local.patch
@@ -0,0 +1,20 @@
+diff --git a/configure b/configure
+index c2baab4..932f09a 100755
+--- a/configure
++++ b/configure
+@@ -2664,13 +2664,13 @@ _ACEOF
+
+ # Some tools Automake needs.
+
+-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
++ACLOCAL=true
+
+
+ AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
++AUTOMAKE=true
+
+
+ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
diff --git a/patches/htop-2.0.1.local.patch b/patches/htop-2.0.1.local.patch
new file mode 100644
index 00000000..1799722e
--- /dev/null
+++ b/patches/htop-2.0.1.local.patch
@@ -0,0 +1,11 @@
+--- htop-2.0.1/configure.orig 2016-03-07 21:12:35.000000000 +0000
++++ htop-2.0.1/configure 2016-07-10 14:39:42.654635796 +0000
+@@ -13313,7 +13313,7 @@
+ fi
+ if test "x$htop_script_success" = xno; then
+
+- htop_config_script=$("ncursesw5-config" --libs 2> /dev/null)
++ htop_config_script=$("${PKG_PREFIX}/bin/ncursesw6-config" --libs 2> /dev/null)
+ htop_script_success=no
+ htop_save_LDFLAGS="$LDFLAGS"
+ if test ! "x$htop_config_script" = x; then
diff --git a/patches/irssi-0.8.18.local.patch b/patches/irssi-0.8.18.local.patch
new file mode 100644
index 00000000..8c72336e
--- /dev/null
+++ b/patches/irssi-0.8.18.local.patch
@@ -0,0 +1,103 @@
+--- irssi-0.8.18/src/core/servers.c.orig 2016-01-20 22:08:07.000000000 +0000
++++ irssi-0.8.18/src/core/servers.c 2016-06-13 11:28:49.187797037 +0000
+@@ -407,6 +407,36 @@
+ /* connect with unix socket */
+ server_real_connect(server, NULL, server->connrec->address);
+ } else {
++ #ifdef __midipix__
++ IPADDR ip4, ip6, *ip;
++
++ connect_address = server->connrec->proxy != NULL ?
++ server->connrec->proxy : server->connrec->address;
++ if (net_gethostbyname(connect_address, &ip4, &ip6) == -1) {
++ g_warning("net_gethostbyname(): -1");
++ g_free(server->tag);
++ g_free(server->nick);
++ return FALSE;
++ } else if (server->connrec->family == 0) {
++ /* prefer IPv4 addresses */
++ ip = ip4.family != 0 ? &ip4 : &ip6;
++ } else if (server->connrec->family == AF_INET6) {
++ /* IPv6 address, use if possible */
++ if (ip6.family != 0) {
++ ip = &ip6;
++ } else {
++ ip = &ip4;
++ }
++ } else {
++ /* IPv4 address, use if possible */
++ if (ip4.family != 0) {
++ ip = &ip4;
++ } else {
++ ip = &ip6;
++ }
++ }
++ server_real_connect(server, ip, NULL);
++ #else
+ /* resolve host name */
+ if (pipe(fd) != 0) {
+ g_warning("server_connect(): pipe() failed.");
+@@ -433,6 +463,7 @@
+ lookup_servers = g_slist_append(lookup_servers, server);
+
+ signal_emit("server looking", 1, server);
++ #endif
+ }
+ return TRUE;
+ }
+--- irssi-0.8.18/src/core/network.c.orig 2016-02-08 21:20:37.000000000 +0100
++++ irssi-0.8.18/src/core/network.c 2016-06-17 16:34:16.870746400 +0200
+@@ -572,9 +572,13 @@
+ int data;
+ socklen_t len = sizeof(data);
+
++#ifndef __midipix__
+ if (getsockopt(g_io_channel_unix_get_fd(handle),
+ SOL_SOCKET, SO_ERROR, (void *) &data, &len) == -1)
+ return -1;
++#else
++ data = 0;
++#endif
+
+ return data;
+ }
+--- irssi-0.8.18/src/core/pidwait.c.orig 2014-09-02 11:13:51.000000000 +0200
++++ irssi-0.8.18/src/core/pidwait.c 2016-06-19 00:20:33.327763200 +0200
+@@ -39,8 +39,10 @@
+ void pidwait_add(int pid)
+ {
+ if (g_hash_table_lookup(child_pids, GINT_TO_POINTER(pid)) == NULL) {
++#ifndef __midipix__
+ int id = g_child_watch_add_full(10, pid, sig_child, NULL, NULL);
+ g_hash_table_insert(child_pids, GINT_TO_POINTER(pid), GINT_TO_POINTER(id));
++#endif
+ pids = g_slist_append(pids, GINT_TO_POINTER(pid));
+ }
+ }
+--- irssi-0.8.18/src/fe-common/core/fe-exec.c.orig 2016-01-20 23:08:07.000000000 +0100
++++ irssi-0.8.18/src/fe-common/core/fe-exec.c 2016-06-19 01:22:40.792090300 +0200
+@@ -288,6 +288,9 @@
+ }
+ }
+
++#ifdef __midipix__
++static void sig_pidwait(void *pid, void *statusp);
++#endif
+ static void process_exec(PROCESS_REC *rec, const char *cmd)
+ {
+ const char *shell_args[4] = { "/bin/sh", "-c", NULL, NULL };
+@@ -535,6 +538,14 @@
+ (GInputFunction) sig_exec_input_reader,
+ rec);
+ processes = g_slist_append(processes, rec);
++#ifdef __midipix__
++ int status;
++ waitpid(rec->pid, &status, 0);
++ while (rec->read_tag != -1) {
++ sig_exec_input_reader(rec);
++ }
++ sig_pidwait((void *)rec->pid, &status);
++#endif
+
+ if (rec->target == NULL && interactive)
+ rec->target_item = exec_wi_create(active_win, rec);
diff --git a/patches/john-1.8.0.local.patch b/patches/john-1.8.0.local.patch
new file mode 100644
index 00000000..21999942
--- /dev/null
+++ b/patches/john-1.8.0.local.patch
@@ -0,0 +1,155 @@
+diff -ru a/src/DES_bs.c b/src/DES_bs.c
+--- a/src/DES_bs.c 2012-07-14 09:36:44.000000000 -0400
++++ b/src/DES_bs.c 2016-08-07 15:08:48.011369100 -0400
+@@ -52,7 +52,7 @@
+ };
+
+ #if DES_BS_ASM
+-extern void DES_bs_init_asm(void);
++extern void DES_INTERNAL_CALL DES_bs_init_asm(void);
+ #endif
+
+ void DES_bs_init(int LM, int cpt)
+diff -ru a/src/DES_bs.h b/src/DES_bs.h
+--- a/src/DES_bs.h 2013-05-06 02:19:49.000000000 -0400
++++ b/src/DES_bs.h 2016-08-07 15:09:17.512056400 -0400
+@@ -35,6 +35,16 @@
+ #define DES_bs_vector ARCH_WORD
+ #endif
+
++#ifndef HAVE_INTERNAL_ATTR
++#define HAVE_INTERNAL_ATTR 0
++#endif
++
++#if HAVE_INTERNAL_ATTR
++#define DES_INTERNAL_CALL __attribute__((visibility("internal")))
++#else
++#define DES_INTERNAL_CALL
++#endif
++
+ /*
+ * All bitslice DES parameters combined into one struct for more efficient
+ * cache usage. Don't re-order unless you know what you're doing, as there
+@@ -112,7 +122,7 @@
+ #else
+ #define DES_bs_mt 0
+ #define DES_bs_cpt 1
+-extern DES_bs_combined DES_bs_all;
++extern DES_INTERNAL_CALL DES_bs_combined DES_bs_all;
+ #define for_each_t(n)
+ #define init_t()
+ #endif
+@@ -120,7 +130,7 @@
+ /*
+ * Initializes the internal structures.
+ */
+-extern void DES_bs_init(int LM, int cpt);
++extern void DES_INTERNAL_CALL DES_bs_init(int LM, int cpt);
+
+ /*
+ * Sets a salt for DES_bs_crypt().
+@@ -139,12 +149,12 @@
+ /*
+ * Almost generic implementation: 24-bit salts, variable iteration count.
+ */
+-extern void DES_bs_crypt(int count, int keys_count);
++extern void DES_INTERNAL_CALL DES_bs_crypt(int count, int keys_count);
+
+ /*
+ * A simplified special-case implementation: 12-bit salts, 25 iterations.
+ */
+-extern void DES_bs_crypt_25(int keys_count);
++extern void DES_INTERNAL_CALL DES_bs_crypt_25(int keys_count);
+
+ /*
+ * Another special-case version: a non-zero IV, no salts, no iterations.
+--- john-1.8.0/src/Makefile.orig 2013-05-29 23:21:25.000000000 +0000
++++ john-1.8.0/src/Makefile 2016-09-11 21:19:18.930129331 +0000
+@@ -32,7 +32,7 @@
+ # CFLAGS for use on the main john.c file only
+ CFLAGS_MAIN = $(CFLAGS)
+ ASFLAGS = -c $(OMPFLAGS)
+-LDFLAGS = -s $(OMPFLAGS)
++LDFLAGS = $(LDFLAGS_DEBUG) $(OMPFLAGS)
+ OPT_NORMAL = -funroll-loops
+ # Remove the "-Os" if you're using an ancient version of gcc
+ OPT_INLINE = -Os -funroll-loops -finline-functions
+@@ -104,6 +104,13 @@
+ # @echo "linux-ppc64-altivec Linux, PowerPC 64-bit w/AltiVec"
+ @echo "linux-ppc64 Linux, PowerPC 64-bit"
+ @echo "linux-ia64 Linux, IA-64"
++ @echo "midipix-x86-64-avx Midipix, x86-64 with AVX (2011+ Intel CPUs)"
++ @echo "midipix-x86-64 Midipix, x86-64 with SSE2 (most common)"
++ @echo "midipix-x86-avx Midipix, x86 32-bit with AVX (2011+ Intel CPUs)"
++ @echo "midipix-x86-xop Midipix, x86 32-bit with AVX and XOP (2011+ AMD CPUs)"
++ @echo "midipix-x86-sse2 Midipix, x86 32-bit with SSE2 (most common, if 32-bit)"
++ @echo "midipix-x86-mmx Midipix, x86 32-bit with MMX (for old computers)"
++ @echo "midipix-x86-any Midipix, x86 32-bit (for truly ancient computers)"
+ @echo "freebsd-x86-64 FreeBSD, x86-64 with SSE2 (best)"
+ @echo "freebsd-x86-sse2 FreeBSD, x86 with SSE2 (best if 32-bit)"
+ @echo "freebsd-x86-mmx FreeBSD, x86 with MMX"
+@@ -306,6 +313,64 @@
+ CFLAGS="$(CFLAGS) -DHAVE_CRYPT" \
+ LDFLAGS="$(LDFLAGS) -lcrypt"
+
++midipix-x86-64-avx:
++ $(LN) x86-64.h arch.h
++ $(MAKE) $(PROJ) \
++ JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86-64.o" \
++ CFLAGS_MAIN="$(CFLAGS) -DJOHN_AVX -DHAVE_CRYPT" \
++ CFLAGS="$(CFLAGS) -mavx -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR" \
++ ASFLAGS="$(ASFLAGS) -mavx" \
++ LDFLAGS="$(LDFLAGS) -lcrypt"
++
++midipix-x86-64:
++ $(LN) x86-64.h arch.h
++ $(MAKE) $(PROJ) \
++ JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86-64.o" \
++ CFLAGS="$(CFLAGS) -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR" \
++ LDFLAGS="$(LDFLAGS) -lcrypt"
++
++midipix-x86-avx:
++ $(LN) x86-sse.h arch.h
++ $(MAKE) $(PROJ) \
++ JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86.o" \
++ CFLAGS_MAIN="$(CFLAGS) -m32 -DJOHN_AVX -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR -DUNDERSCORES" \
++ CFLAGS="$(CFLAGS) -m32 -mavx -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR -DUNDERSCORES" \
++ ASFLAGS="$(ASFLAGS) -m32 -mavx -DUNDERSCORES" \
++ LDFLAGS="$(LDFLAGS) -m32 -lcrypt"
++
++midipix-x86-xop:
++ $(LN) x86-sse.h arch.h
++ $(MAKE) $(PROJ) \
++ JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86.o" \
++ CFLAGS_MAIN="$(CFLAGS) -m32 -DJOHN_XOP -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR -DUNDERSCORES" \
++ CFLAGS="$(CFLAGS) -m32 -mxop -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR -DUNDERSCORES" \
++ ASFLAGS="$(ASFLAGS) -m32 -mxop -DUNDERSCORES" \
++ LDFLAGS="$(LDFLAGS) -m32 -lcrypt"
++
++midipix-x86-sse2:
++ $(LN) x86-sse.h arch.h
++ $(MAKE) $(PROJ) \
++ JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86.o x86-sse.o" \
++ CFLAGS="$(CFLAGS) -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR -DUNDERSCORES" \
++ ASFLAGS="$(ASFLAGS) -m32 -DUNDERSCORES" \
++ LDFLAGS="$(LDFLAGS) -lcrypt"
++
++midipix-x86-mmx:
++ $(LN) x86-mmx.h arch.h
++ $(MAKE) $(PROJ) \
++ JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86.o x86-mmx.o" \
++ CFLAGS="$(CFLAGS) -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR -DUNDERSCORES" \
++ ASFLAGS="$(ASFLAGS) -m32 -DUNDERSCORES" \
++ LDFLAGS="$(LDFLAGS) -lcrypt"
++
++midipix-x86-any:
++ $(LN) x86-any.h arch.h
++ $(MAKE) $(PROJ) \
++ JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86.o" \
++ CFLAGS="$(CFLAGS) -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR -DUNDERSCORES" \
++ ASFLAGS="$(ASFLAGS) -m32 -DUNDERSCORES" \
++ LDFLAGS="$(LDFLAGS) -lcrypt"
++
+ freebsd-x86-64:
+ $(LN) x86-64.h arch.h
+ $(MAKE) $(PROJ) \
diff --git a/patches/libarchive-3.1.2.local.patch b/patches/libarchive-3.1.2.local.patch
new file mode 100644
index 00000000..746a4b70
--- /dev/null
+++ b/patches/libarchive-3.1.2.local.patch
@@ -0,0 +1,139 @@
+--- libarchive-3.1.2/cpio/bsdcpio.1.orig
++++ libarchive-3.1.2/cpio/bsdcpio.1
+@@ -156,7 +156,8 @@
+ .It Fl Fl insecure
+ (i and p mode only)
+ Disable security checks during extraction or copying.
+-This allows extraction via symbolic links and path names containing
++This allows extraction via symbolic links, absolute paths,
++and path names containing
+ .Sq ..
+ in the name.
+ .It Fl J , Fl Fl xz
+--- libarchive-3.1.2/cpio/cpio.c.orig
++++ libarchive-3.1.2/cpio/cpio.c
+@@ -179,6 +179,7 @@
+ cpio->extract_flags |= ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER;
+ cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_SYMLINKS;
+ cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_NODOTDOT;
++ cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS;
+ cpio->extract_flags |= ARCHIVE_EXTRACT_PERM;
+ cpio->extract_flags |= ARCHIVE_EXTRACT_FFLAGS;
+ cpio->extract_flags |= ARCHIVE_EXTRACT_ACL;
+@@ -264,6 +265,7 @@
+ case OPTION_INSECURE:
+ cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_SYMLINKS;
+ cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NODOTDOT;
++ cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS;
+ break;
+ case 'L': /* GNU cpio */
+ cpio->option_follow_links = 1;
+@@ -300,6 +302,7 @@
+ "Cannot use both -p and -%c", cpio->mode);
+ cpio->mode = opt;
+ cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NODOTDOT;
++ cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS;
+ break;
+ case OPTION_PRESERVE_OWNER:
+ cpio->extract_flags |= ARCHIVE_EXTRACT_OWNER;
+--- libarchive-3.1.2/libarchive/archive.h.orig
++++ libarchive-3.1.2/libarchive/archive.h
+@@ -562,6 +562,8 @@
+ /* Default: Do not use HFS+ compression if it was not compressed. */
+ /* This has no effect except on Mac OS v10.6 or later. */
+ #define ARCHIVE_EXTRACT_HFS_COMPRESSION_FORCED (0x8000)
++/* Default: Do not reject entries with absolute paths */
++#define ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS (0x10000)
+
+ __LA_DECL int archive_read_extract(struct archive *, struct archive_entry *,
+ int flags);
+--- libarchive-3.1.2/libarchive/archive_write_disk.3.orig
++++ libarchive-3.1.2/libarchive/archive_write_disk.3
+@@ -177,6 +177,9 @@
+ Note that paths ending in
+ .Pa ..
+ always cause an error, regardless of this flag.
++.It Cm ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS
++Refuse to extract an absolute path.
++The default is to not refuse such paths.
+ .It Cm ARCHIVE_EXTRACT_SPARSE
+ Scan data for blocks of NUL bytes and try to recreate them with holes.
+ This results in sparse files, independent of whether the archive format
+--- libarchive-3.1.2/libarchive/archive_write_disk_posix.c.orig
++++ libarchive-3.1.2/libarchive/archive_write_disk_posix.c
+@@ -2504,8 +2504,9 @@
+ /*
+ * Canonicalize the pathname. In particular, this strips duplicate
+ * '/' characters, '.' elements, and trailing '/'. It also raises an
+- * error for an empty path, a trailing '..' or (if _SECURE_NODOTDOT is
+- * set) any '..' in the path.
++ * error for an empty path, a trailing '..', (if _SECURE_NODOTDOT is
++ * set) any '..' in the path or (if ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS
++ * is set) if the path is absolute.
+ */
+ static int
+ cleanup_pathname(struct archive_write_disk *a)
+@@ -2524,8 +2525,15 @@
+ cleanup_pathname_win(a);
+ #endif
+ /* Skip leading '/'. */
+- if (*src == '/')
++ if (*src == '/') {
++ if (a->flags & ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS) {
++ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
++ "Path is absolute");
++ return (ARCHIVE_FAILED);
++ }
++
+ separator = *src++;
++ }
+
+ /* Scan the pathname one element at a time. */
+ for (;;) {
+--- libarchive-3.1.2/libarchive/test/test_write_disk_secure.c.orig
++++ libarchive-3.1.2/libarchive/test/test_write_disk_secure.c
+@@ -178,6 +178,29 @@
+ assert(S_ISDIR(st.st_mode));
+ archive_entry_free(ae);
+
++ /*
++ * Without security checks, we should be able to
++ * extract an absolute path.
++ */
++ assert((ae = archive_entry_new()) != NULL);
++ archive_entry_copy_pathname(ae, "/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp");
++ archive_entry_set_mode(ae, S_IFREG | 0777);
++ assert(0 == archive_write_header(a, ae));
++ assert(0 == archive_write_finish_entry(a));
++ assertFileExists("/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp");
++ assert(0 == unlink("/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp"));
++
++ /* But with security checks enabled, this should fail. */
++ assert(archive_entry_clear(ae) != NULL);
++ archive_entry_copy_pathname(ae, "/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp");
++ archive_entry_set_mode(ae, S_IFREG | 0777);
++ archive_write_disk_set_options(a, ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS);
++ failure("Extracting an absolute path should fail here.");
++ assertEqualInt(ARCHIVE_FAILED, archive_write_header(a, ae));
++ archive_entry_free(ae);
++ assert(0 == archive_write_finish_entry(a));
++ assertFileNotExists("/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp");
++
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Test the entries on disk. */
+--- libarchive-3.1.2/libarchive/archive_write.c.orig 2016-06-03 13:15:42.862830537 +0000
++++ libarchive-3.1.2/libarchive/archive_write.c 2016-06-03 13:19:01.590826126 +0000
+@@ -671,8 +671,12 @@
+ _archive_write_data(struct archive *_a, const void *buff, size_t s)
+ {
+ struct archive_write *a = (struct archive_write *)_a;
++ const size_t max_write = INT_MAX;
+ archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC,
+ ARCHIVE_STATE_DATA, "archive_write_data");
++ /* In particular, this catches attempts to pass negative values. */
++ if (s > max_write)
++ s = max_write;
+ archive_clear_error(&a->archive);
+ return ((a->format_write_data)(a, buff, s));
+ }
diff --git a/patches/libassuan-2.4.3.local.patch b/patches/libassuan-2.4.3.local.patch
new file mode 100644
index 00000000..8e0265b0
--- /dev/null
+++ b/patches/libassuan-2.4.3.local.patch
@@ -0,0 +1,192 @@
+--- libassuan-2.4.3.orig/configure 2016-07-14 10:11:48.000000000 +0200
++++ libassuan-2.4.3/configure 2016-10-18 22:20:05.511896688 +0200
+@@ -14171,187 +14171,8 @@
+
+ # Checking for libgpg-error.
+
+- gpg_error_config_prefix=""
+-
+-# Check whether --with-libgpg-error-prefix was given.
+-if test "${with_libgpg_error_prefix+set}" = set; then :
+- withval=$with_libgpg_error_prefix; gpg_error_config_prefix="$withval"
+-fi
+-
+-
+-
+-# Check whether --with-gpg-error-prefix was given.
+-if test "${with_gpg_error_prefix+set}" = set; then :
+- withval=$with_gpg_error_prefix; gpg_error_config_prefix="$withval"
+-fi
+-
+-
+- if test x$gpg_error_config_prefix != x ; then
+- if test x${GPG_ERROR_CONFIG+set} != xset ; then
+- GPG_ERROR_CONFIG=$gpg_error_config_prefix/bin/gpg-error-config
+- fi
+- fi
+-
+- if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}gpg-error-config", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}gpg-error-config; ac_word=$2
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if ${ac_cv_path_GPG_ERROR_CONFIG+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- case $GPG_ERROR_CONFIG in
+- [\\/]* | ?:[\\/]*)
+- ac_cv_path_GPG_ERROR_CONFIG="$GPG_ERROR_CONFIG" # Let the user override the test with a path.
+- ;;
+- *)
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_path_GPG_ERROR_CONFIG="$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
+- fi
+-done
+- done
+-IFS=$as_save_IFS
+-
+- ;;
+-esac
+-fi
+-GPG_ERROR_CONFIG=$ac_cv_path_GPG_ERROR_CONFIG
+-if test -n "$GPG_ERROR_CONFIG"; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPG_ERROR_CONFIG" >&5
+-$as_echo "$GPG_ERROR_CONFIG" >&6; }
+-else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+-fi
+-if test -z "$ac_cv_path_GPG_ERROR_CONFIG"; then
+- ac_pt_GPG_ERROR_CONFIG=$GPG_ERROR_CONFIG
+- # Extract the first word of "gpg-error-config", so it can be a program name with args.
+-set dummy gpg-error-config; ac_word=$2
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if ${ac_cv_path_ac_pt_GPG_ERROR_CONFIG+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- case $ac_pt_GPG_ERROR_CONFIG in
+- [\\/]* | ?:[\\/]*)
+- ac_cv_path_ac_pt_GPG_ERROR_CONFIG="$ac_pt_GPG_ERROR_CONFIG" # Let the user override the test with a path.
+- ;;
+- *)
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_path_ac_pt_GPG_ERROR_CONFIG="$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
+- fi
+-done
+- done
+-IFS=$as_save_IFS
+-
+- ;;
+-esac
+-fi
+-ac_pt_GPG_ERROR_CONFIG=$ac_cv_path_ac_pt_GPG_ERROR_CONFIG
+-if test -n "$ac_pt_GPG_ERROR_CONFIG"; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GPG_ERROR_CONFIG" >&5
+-$as_echo "$ac_pt_GPG_ERROR_CONFIG" >&6; }
+-else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+- if test "x$ac_pt_GPG_ERROR_CONFIG" = x; then
+- GPG_ERROR_CONFIG="no"
+- else
+- case $cross_compiling:$ac_tool_warned in
+-yes:)
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+-ac_tool_warned=yes ;;
+-esac
+- GPG_ERROR_CONFIG=$ac_pt_GPG_ERROR_CONFIG
+- fi
+-else
+- GPG_ERROR_CONFIG="$ac_cv_path_GPG_ERROR_CONFIG"
+-fi
+-
+- min_gpg_error_version=1.17
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GPG Error - version >= $min_gpg_error_version" >&5
+-$as_echo_n "checking for GPG Error - version >= $min_gpg_error_version... " >&6; }
+- ok=no
+- if test "$GPG_ERROR_CONFIG" != "no" \
+- && test -f "$GPG_ERROR_CONFIG" ; then
+- req_major=`echo $min_gpg_error_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\)/\1/'`
+- req_minor=`echo $min_gpg_error_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\)/\2/'`
+- gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version`
+- major=`echo $gpg_error_config_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'`
+- minor=`echo $gpg_error_config_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'`
+- if test "$major" -gt "$req_major"; then
+- ok=yes
+- else
+- if test "$major" -eq "$req_major"; then
+- if test "$minor" -ge "$req_minor"; then
+- ok=yes
+- fi
+- fi
+- fi
+- fi
+- if test $ok = yes; then
+- GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags`
+- GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs`
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($gpg_error_config_version)" >&5
+-$as_echo "yes ($gpg_error_config_version)" >&6; }
+- :
+- gpg_error_config_host=`$GPG_ERROR_CONFIG $gpg_error_config_args --host 2>/dev/null || echo none`
+- if test x"$gpg_error_config_host" != xnone ; then
+- if test x"$gpg_error_config_host" != x"$host" ; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+-***
+-*** The config script $GPG_ERROR_CONFIG was
+-*** built for $gpg_error_config_host and thus may not match the
+-*** used host $host.
+-*** You may want to use the configure option --with-gpg-error-prefix
+-*** to specify a matching config script.
+-***" >&5
+-$as_echo "$as_me: WARNING:
+-***
+-*** The config script $GPG_ERROR_CONFIG was
+-*** built for $gpg_error_config_host and thus may not match the
+-*** used host $host.
+-*** You may want to use the configure option --with-gpg-error-prefix
+-*** to specify a matching config script.
+-***" >&2;}
+- fi
+- fi
+- else
+- GPG_ERROR_CFLAGS=""
+- GPG_ERROR_LIBS=""
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+- as_fn_error $? "libgpg-error was not found" "$LINENO" 5
+- fi
+-
+-
+-
++#Overcomplicated useless checking for gpg-error, use CFLAGS and LDFLAGS! >:(
++ GPG_ERROR_LIBS="-lgpg-error"
+
+ #
+ # Checks for library functions.
diff --git a/patches/libelf-0.8.13.local.patch b/patches/libelf-0.8.13.local.patch
new file mode 100644
index 00000000..73d60e90
--- /dev/null
+++ b/patches/libelf-0.8.13.local.patch
@@ -0,0 +1,39 @@
+diff -ru a/configure b/configure
+--- a/configure 2008-05-23 04:18:03.000000000 -0400
++++ b/configure 2015-03-10 20:32:16.332333640 -0400
+@@ -3445,6 +3445,16 @@
+ LINK_SHLIB='$(LD) -G -z text -h $(SONAME)'
+ INSTALL_SHLIB='$(INSTALL_PROGRAM)'
+ ;;
++ *midipix*)
++ PICFLAGS='-fPIC -DPIC'
++ SHLIB_SFX='.so.$(VERSION)'
++ SHLINK_SFX='.so'
++ SONAME_SFX='.so.$(MAJOR)'
++ LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME) -mout-implib -moutput-def'
++ IMPLIB_NAME=libelf.`echo "so.$VERSION" | sed -E 's/[^\.]+$/lib.a/'`
++ INSTALL_SHLIB='cp $(IMPLIB_NAME) $(libdir)/libelf.lib.a; $(INSTALL_PROGRAM)'
++ DEPSHLIBS=''
++ ;;
+ *)
+ echo "configure: warning: shared libraries not supported for $host" 1>&2
+ mr_enable_shared=no
+@@ -3687,6 +3697,7 @@
+ s%@INSTALL_SHLIB@%$INSTALL_SHLIB%g
+ s%@DEPSHLIBS@%$DEPSHLIBS%g
+ s%@DO_SHLIB@%$DO_SHLIB%g
++s%@IMPLIB_NAME@%$IMPLIB_NAME%g
+
+ CEOF
+ EOF
+diff -ru a/lib/Makefile.in b/lib/Makefile.in
+--- a/lib/Makefile.in 2009-11-01 08:04:19.000000000 -0500
++++ b/lib/Makefile.in 2015-03-09 00:13:06.842232837 -0400
+@@ -49,6 +49,7 @@
+ SHLINK_SFX = @SHLINK_SFX@
+ SONAME_SFX = @SONAME_SFX@
+ LINK_SHLIB = @LINK_SHLIB@
++IMPLIB_NAME = @IMPLIB_NAME@
+ INSTALL_SHLIB = @INSTALL_SHLIB@
+
+ SHLIB = libelf$(SHLIB_SFX)
diff --git a/patches/libevent-2.0.22-stable.local.patch b/patches/libevent-2.0.22-stable.local.patch
new file mode 100644
index 00000000..f75fe90b
--- /dev/null
+++ b/patches/libevent-2.0.22-stable.local.patch
@@ -0,0 +1,11 @@
+--- libevent-2.0.22-stable/configure.orig 2016-09-10 18:47:19.360327924 -0400
++++ libevent-2.0.22-stable/configure 2016-09-10 18:48:54.160396670 -0400
+@@ -12937,7 +12937,7 @@
+ BUILD_CYGWIN_FALSE=
+ fi
+
+- if test x$bwin32 = xtrue || test x$cygwin = xtrue; then
++ if test x$bwin32 = xtrue || test x$cygwin = xtrue || test x$ac_pe_target = xtrue; then
+ BUILD_WITH_NO_UNDEFINED_TRUE=
+ BUILD_WITH_NO_UNDEFINED_FALSE='#'
+ else
diff --git a/patches/libfetch-2.33.local.patch b/patches/libfetch-2.33.local.patch
new file mode 100644
index 00000000..8d0bbcf8
--- /dev/null
+++ b/patches/libfetch-2.33.local.patch
@@ -0,0 +1,149 @@
+--- libfetch-2.33/common.h.orig 2010-08-23 22:40:48.000000000 +0200
++++ libfetch-2.33/common.h 2016-03-09 10:01:24.270907600 +0100
+@@ -47,7 +47,7 @@
+
+ #if !defined(__sun) && !defined(__hpux) && !defined(__INTERIX) && \
+ !defined(__digital__) && !defined(__linux) && !defined(__MINT__) && \
+- !defined(__sgi)
++ !defined(__sgi) && !defined(__midipix__)
+ #define HAVE_SA_LEN
+ #endif
+
+--- libfetch-2.33/Makefile.orig 2010-08-23 20:40:48.000000000 +0000
++++ libfetch-2.33/Makefile 2016-07-08 22:18:05.749860554 +0000
+@@ -1,42 +1,93 @@
+-# $NetBSD: Makefile,v 1.5 2010/02/24 22:00:51 joerg Exp $
+-
+-LIB= fetch
+-SRCS= fetch.c common.c ftp.c http.c file.c
+-DPSRCS= ftperr.h httperr.h
+-INCS= fetch.h
+-MAN= fetch.3
+-CLEANFILES= ftperr.h httperr.h
+-MKLINT= no
+-MKPIC= no
+-MKPROFILE= no
+-
+-.include <bsd.own.mk>
+-
+-CPPFLAGS+= -I.
+-CPPFLAGS+= -D_LARGEFILE_SOURCE -D_LARGE_FILES
+-
+-FETCH_WITH_INET6?= no
+-FETCH_WITH_OPENSSL?= no
+-
+-.if !empty(FETCH_WITH_INET6:M[yY][eE][sS])
+-CPPFLAGS+= -DINET6
+-.endif
+-
+-.if !empty(FETCH_WITH_OPENSSL:M[yY][eE][sS])
+-CPPFLAGS+= -DWITH_SSL
+-LDADD= -lssl -lcrypto
+-.endif
+-
+-CPPFLAGS+= -DFTP_COMBINE_CWDS
+-
+-WARNS?= 4
+-
+-ftperr.h: ${.CURDIR}/ftp.errors ${.CURDIR}/Makefile ${.CURDIR}/errlist.sh
+- ${.CURDIR}/errlist.sh ftp_errlist FTP \
+- ${.CURDIR}/ftp.errors > ${.TARGET}
+-
+-httperr.h: ${.CURDIR}/http.errors ${.CURDIR}/Makefile ${.CURDIR}/errlist.sh
+- ${.CURDIR}/errlist.sh http_errlist HTTP \
+- ${.CURDIR}/http.errors > ${.TARGET}
+-
+-.include <bsd.lib.mk>
++prefix = /usr
++DESTDIR =
++DEBUG = false
++FETCH_WITH_INET6 = true
++FETCH_WITH_OPENSSL = true
++FETCH_WITH_LFS = true
++
++WARNINGS = -Wall -Wstrict-prototypes -Wsign-compare -Wchar-subscripts \
++ -Wpointer-arith -Wcast-align -Wsign-compare
++CFLAGS += -O2 -pipe -I. -fPIC $(WARNINGS)
++
++
++CFLAGS += -DFTP_COMBINE_CWDS -DNETBSD
++
++ifeq ($(strip $(FETCH_WITH_LFS)), true)
++CFLAGS+= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES
++endif
++
++ifeq ($(strip $(FETCH_WITH_INET6)), true)
++CFLAGS+= -DINET6
++endif
++
++ifeq ($(strip $(FETCH_WITH_OPENSSL)), true)
++CFLAGS+= -DWITH_SSL
++LDFLAGS_LIBS+= -lssl -lcrypto
++endif
++
++ifeq ($(strip $(DEBUG)), true)
++CFLAGS += -g -DDEBUG
++else
++CFLAGS += -UDEBUG
++endif
++
++CC = $(CROSS_COMPILE)gcc
++LD = $(CROSS_COMPILE)gcc
++AR = $(CROSS_COMPILE)ar
++RANLIB = ranlib
++INSTALL = install -c -D
++
++OBJS= fetch.o common.o ftp.o http.o file.o
++INCS= fetch.h common.h
++GEN = ftperr.h httperr.h
++MAN = libdownload.3
++
++#pretty print!
++E = @echo
++Q = @
++
++all: libfetch.so libfetch.a
++ $(E) " built with: " $(CFLAGS)
++.PHONY: all
++
++%.o: %.c $(INCS) $(GEN)
++ $(E) " compile " $@
++ $(Q) $(CC) $(CFLAGS) -c $<
++
++ftperr.h: ftp.errors
++ $(E) " generate " $@
++ $(Q) ./errlist.sh ftp_errlist FTP ftp.errors > $@
++
++httperr.h: http.errors
++ $(E) " generate " $@
++ $(Q) ./errlist.sh http_errlist HTTP http.errors > $@
++
++libfetch.so: $(GEN) $(INCS) $(OBJS)
++ $(E) " build " $@
++ $(Q) rm -f $@
++ $(Q) $(LD) $(LDFLAGS) *.o -shared -o $@ $(LDFLAGS_LIBS)
++
++libfetch.a: $(GEN) $(INCS) $(OBJS)
++ $(E) " build " $@
++ $(Q) rm -f $@
++ $(Q) $(AR) rcs $@ *.o
++ $(Q) $(RANLIB) $@
++
++clean:
++ $(E) " clean "
++ $(Q) rm -f libfetch.so libfetch.a *.o $(GEN)
++.PHONY: clean
++
++install: all
++ $(Q) $(INSTALL) -m 755 libfetch.so $(DESTDIR)$(prefix)/lib/libfetch.so
++ $(Q) $(INSTALL) -m 644 libfetch.a $(DESTDIR)$(prefix)/lib/libfetch.a
++ $(Q) $(INSTALL) -m 644 fetch.h $(DESTDIR)$(prefix)/include/fetch.h
++ $(Q) $(INSTALL) -m 644 fetch.3 $(DESTDIR)$(prefix)/share/man/man3/fetch.3
++.PHONY: install
++
++uninstall:
++ $(Q) rm -f $(DESTDIR)$(prefix)/lib/libfetch.so
++ $(Q) rm -f $(DESTDIR)$(prefix)/lib/libfetch.a
++ $(Q) rm -f $(DESTDIR)$(prefix)/include/fetch.h
++ $(Q) rm -f $(DESTDIR)$(prefix)/share/man/man3/fetch.3
++.PHONY: uninstall
diff --git a/patches/libffi-3.2.1.local.patch b/patches/libffi-3.2.1.local.patch
new file mode 100644
index 00000000..d5c7fbdc
--- /dev/null
+++ b/patches/libffi-3.2.1.local.patch
@@ -0,0 +1,198 @@
+diff -ru --new-file a/configure b/configure
+--- a/configure 2014-11-12 06:59:57.000000000 -0500
++++ b/configure 2016-01-25 18:26:47.000000000 -0500
+@@ -17133,7 +17133,7 @@
+ i?86-*-freebsd* | i?86-*-openbsd*)
+ TARGET=X86_FREEBSD; TARGETDIR=x86
+ ;;
+- i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix*)
++ i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix* | i?86-*-midipix*)
+ TARGET=X86_WIN32; TARGETDIR=x86
+ # All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
+ # We must also check with_cross_host to decide if this is a native
+@@ -17161,7 +17161,7 @@
+ TARGET=X86_DARWIN; TARGETDIR=x86
+ ;;
+
+- x86_64-*-cygwin* | x86_64-*-mingw*)
++ x86_64-*-cygwin* | x86_64-*-mingw* | x86_64-*-midipix*)
+ TARGET=X86_WIN64; TARGETDIR=x86
+ # All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
+ # We must also check with_cross_host to decide if this is a native
+diff -ru --new-file a/src/closures.c b/src/closures.c
+--- a/src/closures.c 2014-11-08 07:47:24.000000000 -0500
++++ b/src/closures.c 2016-01-25 17:57:43.000000000 -0500
+@@ -26,6 +26,25 @@
+ DEALINGS IN THE SOFTWARE.
+ ----------------------------------------------------------------------- */
+
++#ifdef __midipix__
++
++#include <stdlib.h>
++
++void * ffi_closure_alloc (size_t size, void ** code)
++{
++ if (code)
++ return (*code = malloc(size));
++ else
++ return 0;
++}
++
++void ffi_closure_free (void * addr)
++{
++ free(addr);
++}
++
++#else
++
+ #if defined __linux__ && !defined _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
+@@ -686,3 +705,4 @@
+
+ # endif /* ! FFI_MMAP_EXEC_WRIT */
+ #endif /* FFI_CLOSURES */
++#endif
+diff -ru --new-file a/src/x86/ffi.c b/src/x86/ffi.c
+--- a/src/x86/ffi.c 2014-11-08 07:47:24.000000000 -0500
++++ b/src/x86/ffi.c 2016-01-25 17:52:14.000000000 -0500
+@@ -31,8 +31,12 @@
+ #if !defined(__x86_64__) || defined(_WIN64) || defined(__CYGWIN__)
+
+ #ifdef _WIN64
++#ifdef __midipix__
++/* not needed */
++#else
+ #include <windows.h>
+ #endif
++#endif
+
+ #include <ffi.h>
+ #include <ffi_common.h>
+diff -ru --new-file a/src/x86/win32.S b/src/x86/win32.S
+--- a/src/x86/win32.S 2014-11-11 09:41:37.000000000 -0500
++++ b/src/x86/win32.S 2016-01-25 18:36:49.000000000 -0500
+@@ -1344,6 +1344,14 @@
+ .align 4
+ .LEFDE5:
+
++#ifdef __midipix__
++ .section .got$ffi_call_win32,"r"
++ .global __imp_ffi_call_win32
++__imp_ffi_call_win32:
++ .long ffi_call_win32
++ .linkonce discard
++#endif
++
+ #endif /* !_MSC_VER */
+
+ #if defined __ELF__ && defined __linux__
+diff -ru --new-file a/src/x86/win64.S b/src/x86/win64.S
+--- a/src/x86/win64.S 2014-11-08 07:47:24.000000000 -0500
++++ b/src/x86/win64.S 2016-01-25 17:47:17.000000000 -0500
+@@ -516,5 +516,15 @@
+ pop %rbp
+ retq
+ .seh_endproc
++
++
++#ifdef __midipix__
++ .section .got$ffi_call_win64,"r"
++ .global __imp_ffi_call_win64
++__imp_ffi_call_win64:
++ .quad ffi_call_win64
++ .linkonce discard
++#endif
++
+ #endif /* !_MSC_VER */
+
+--- libffi-3.2.1/src/x86/win32.S.orig2 2016-05-31 09:21:19.120895425 +0000
++++ libffi-3.2.1/src/x86/win32.S 2016-05-31 09:22:19.252894091 +0000
+@@ -529,7 +529,9 @@
+
+ # This assumes we are using gas.
+ .balign 16
++#ifndef __midipix__
+ FFI_HIDDEN(ffi_call_win32)
++#endif
+ .globl USCORE_SYMBOL(ffi_call_win32)
+ #if defined(X86_WIN32) && !defined(__OS2__)
+ .def _ffi_call_win32; .scl 2; .type 32; .endef
+@@ -712,7 +714,9 @@
+ ret
+ .ffi_call_win32_end:
+ .balign 16
++#ifndef __midipix__
+ FFI_HIDDEN(ffi_closure_THISCALL)
++#endif
+ .globl USCORE_SYMBOL(ffi_closure_THISCALL)
+ #if defined(X86_WIN32) && !defined(__OS2__)
+ .def _ffi_closure_THISCALL; .scl 2; .type 32; .endef
+@@ -725,7 +729,9 @@
+ jmp .ffi_closure_STDCALL_internal
+
+ .balign 16
++#ifndef __midipix__
+ FFI_HIDDEN(ffi_closure_FASTCALL)
++#endif
+ .globl USCORE_SYMBOL(ffi_closure_FASTCALL)
+ #if defined(X86_WIN32) && !defined(__OS2__)
+ .def _ffi_closure_FASTCALL; .scl 2; .type 32; .endef
+@@ -737,7 +743,9 @@
+ push %edx
+ push %ecx
+ jmp .ffi_closure_STDCALL_internal
++#ifndef __midipix__
+ FFI_HIDDEN(ffi_closure_REGISTER)
++#endif
+ .globl USCORE_SYMBOL(ffi_closure_REGISTER)
+ #if defined(X86_WIN32) && !defined(__OS2__)
+ .def _ffi_closure_REGISTER; .scl 2; .type 32; .endef
+@@ -754,7 +762,9 @@
+ .LFE1:
+ # This assumes we are using gas.
+ .balign 16
++#ifndef __midipix__
+ FFI_HIDDEN(ffi_closure_SYSV)
++#endif
+ #if defined(X86_WIN32)
+ .globl USCORE_SYMBOL(ffi_closure_SYSV)
+ #if defined(X86_WIN32) && !defined(__OS2__)
+@@ -898,7 +908,9 @@
+
+ #ifdef X86_WIN32
+ .balign 16
++#ifndef __midipix__
+ FFI_HIDDEN(ffi_closure_raw_THISCALL)
++#endif
+ .globl USCORE_SYMBOL(ffi_closure_raw_THISCALL)
+ #if defined(X86_WIN32) && !defined(__OS2__)
+ .def _ffi_closure_raw_THISCALL; .scl 2; .type 32; .endef
+@@ -1040,7 +1052,9 @@
+
+ # This assumes we are using gas.
+ .balign 16
++#ifndef __midipix__
+ FFI_HIDDEN(ffi_closure_STDCALL)
++#endif
+ .globl USCORE_SYMBOL(ffi_closure_STDCALL)
+ #if defined(X86_WIN32) && !defined(__OS2__)
+ .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef
+@@ -1345,10 +1359,17 @@
+ .LEFDE5:
+
+ #ifdef __midipix__
++#if defined(SYMBOL_UNDERSCORE)
++ .section .got$ffi__call_win32,"r"
++ .global __imp__ffi_call_win32
++__imp__ffi_call_win32:
++ .long _ffi_call_win32
++#else
+ .section .got$ffi_call_win32,"r"
+ .global __imp_ffi_call_win32
+ __imp_ffi_call_win32:
+ .long ffi_call_win32
++#endif
+ .linkonce discard
+ #endif
+
diff --git a/patches/libgcrypt-1.7.3.local.patch b/patches/libgcrypt-1.7.3.local.patch
new file mode 100644
index 00000000..ff81df03
--- /dev/null
+++ b/patches/libgcrypt-1.7.3.local.patch
@@ -0,0 +1,172 @@
+Only in libgcrypt-1.7.3.orig: config.log
+diff -ru libgcrypt-1.7.3.orig/configure libgcrypt-1.7.3/configure
+--- libgcrypt-1.7.3.orig/configure 2016-08-17 13:34:20.000000000 +0200
++++ libgcrypt-1.7.3/configure 2016-10-18 22:58:40.255896688 +0200
+@@ -13067,7 +13067,9 @@
+ *-linux*)
+ PRINTABLE_OS_NAME="GNU/Linux"
+ ;;
+-
++ *-midipix*)
++ PRINTABLE_OS_NAME="Midipix"
++ ;;
+ *)
+ PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
+ ;;
+@@ -14141,155 +14143,8 @@
+ # gpg-error is required.
+ #
+
+- gpg_error_config_prefix=""
+-
+-# Check whether --with-libgpg-error-prefix was given.
+-if test "${with_libgpg_error_prefix+set}" = set; then :
+- withval=$with_libgpg_error_prefix; gpg_error_config_prefix="$withval"
+-fi
+-
+-
+-
+-# Check whether --with-gpg-error-prefix was given.
+-if test "${with_gpg_error_prefix+set}" = set; then :
+- withval=$with_gpg_error_prefix; gpg_error_config_prefix="$withval"
+-fi
+-
++ GPG_ERROR_LIBS="-lgpg-error"
+
+- if test x"${GPG_ERROR_CONFIG}" = x ; then
+- if test x"${gpg_error_config_prefix}" != x ; then
+- GPG_ERROR_CONFIG="${gpg_error_config_prefix}/bin/gpg-error-config"
+- else
+- case "${SYSROOT}" in
+- /*)
+- if test -x "${SYSROOT}/bin/gpg-error-config" ; then
+- GPG_ERROR_CONFIG="${SYSROOT}/bin/gpg-error-config"
+- fi
+- ;;
+- '')
+- ;;
+- *)
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5
+-$as_echo "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;}
+- ;;
+- esac
+- fi
+- fi
+-
+- # Extract the first word of "gpg-error-config", so it can be a program name with args.
+-set dummy gpg-error-config; ac_word=$2
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if ${ac_cv_path_GPG_ERROR_CONFIG+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- case $GPG_ERROR_CONFIG in
+- [\\/]* | ?:[\\/]*)
+- ac_cv_path_GPG_ERROR_CONFIG="$GPG_ERROR_CONFIG" # Let the user override the test with a path.
+- ;;
+- *)
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_path_GPG_ERROR_CONFIG="$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
+- fi
+-done
+- done
+-IFS=$as_save_IFS
+-
+- test -z "$ac_cv_path_GPG_ERROR_CONFIG" && ac_cv_path_GPG_ERROR_CONFIG="no"
+- ;;
+-esac
+-fi
+-GPG_ERROR_CONFIG=$ac_cv_path_GPG_ERROR_CONFIG
+-if test -n "$GPG_ERROR_CONFIG"; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPG_ERROR_CONFIG" >&5
+-$as_echo "$GPG_ERROR_CONFIG" >&6; }
+-else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+- min_gpg_error_version="$NEED_GPG_ERROR_VERSION"
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GPG Error - version >= $min_gpg_error_version" >&5
+-$as_echo_n "checking for GPG Error - version >= $min_gpg_error_version... " >&6; }
+- ok=no
+- if test "$GPG_ERROR_CONFIG" != "no" \
+- && test -f "$GPG_ERROR_CONFIG" ; then
+- req_major=`echo $min_gpg_error_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\)/\1/'`
+- req_minor=`echo $min_gpg_error_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\)/\2/'`
+- gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version`
+- major=`echo $gpg_error_config_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'`
+- minor=`echo $gpg_error_config_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'`
+- if test "$major" -gt "$req_major"; then
+- ok=yes
+- else
+- if test "$major" -eq "$req_major"; then
+- if test "$minor" -ge "$req_minor"; then
+- ok=yes
+- fi
+- fi
+- fi
+- fi
+- if test $ok = yes; then
+- GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags`
+- GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs`
+- GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --mt --cflags 2>/dev/null`
+- GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --mt --libs 2>/dev/null`
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($gpg_error_config_version)" >&5
+-$as_echo "yes ($gpg_error_config_version)" >&6; }
+- :
+- gpg_error_config_host=`$GPG_ERROR_CONFIG $gpg_error_config_args --host 2>/dev/null || echo none`
+- if test x"$gpg_error_config_host" != xnone ; then
+- if test x"$gpg_error_config_host" != x"$host" ; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+-***
+-*** The config script $GPG_ERROR_CONFIG was
+-*** built for $gpg_error_config_host and thus may not match the
+-*** used host $host.
+-*** You may want to use the configure option --with-gpg-error-prefix
+-*** to specify a matching config script or use \$SYSROOT.
+-***" >&5
+-$as_echo "$as_me: WARNING:
+-***
+-*** The config script $GPG_ERROR_CONFIG was
+-*** built for $gpg_error_config_host and thus may not match the
+-*** used host $host.
+-*** You may want to use the configure option --with-gpg-error-prefix
+-*** to specify a matching config script or use \$SYSROOT.
+-***" >&2;}
+- gpg_config_script_warn="$gpg_config_script_warn libgpg-error"
+- fi
+- fi
+- else
+- GPG_ERROR_CFLAGS=""
+- GPG_ERROR_LIBS=""
+- GPG_ERROR_MT_CFLAGS=""
+- GPG_ERROR_MT_LIBS=""
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+- :
+- fi
+-
+-
+-
+-
+-
+-if test "x$GPG_ERROR_LIBS" = "x"; then
+- as_fn_error $? "libgpg-error is needed.
+- See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ ." "$LINENO" 5
+-fi
+
+
+ $as_echo "#define GPG_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_GCRYPT" >>confdefs.h
diff --git a/patches/libgpg-error-1.24.local.patch b/patches/libgpg-error-1.24.local.patch
new file mode 100644
index 00000000..208e47a1
--- /dev/null
+++ b/patches/libgpg-error-1.24.local.patch
@@ -0,0 +1,56 @@
+diff -ru --new-file libgpg-error-1.24.orig/src/syscfg/lock-obj-pub.i686-nt64-midipix.h libgpg-error-1.24/src/syscfg/lock-obj-pub.i686-nt64-midipix.h
+--- libgpg-error-1.24.orig/src/syscfg/lock-obj-pub.i686-nt64-midipix.h 1970-01-01 01:00:00.000000000 +0100
++++ libgpg-error-1.24/src/syscfg/lock-obj-pub.i686-nt64-midipix.h 2015-03-06 10:36:24.000000000 +0100
+@@ -0,0 +1,23 @@
++## lock-obj-pub.i686-pc-linux-gnu.h
++## File created by gen-posix-lock-obj - DO NOT EDIT
++## To be included by mkheader into gpg-error.h
++
++typedef struct
++{
++ long _vers;
++ union {
++ volatile char _priv[24];
++ long _x_align;
++ long *_xp_align;
++ } u;
++} gpgrt_lock_t;
++
++#define GPGRT_LOCK_INITIALIZER {1,{{0,0,0,0,0,0,0,0, \
++ 0,0,0,0,0,0,0,0, \
++ 0,0,0,0,0,0,0,0}}}
++##
++## Local Variables:
++## mode: c
++## buffer-read-only: t
++## End:
++##
+diff -ru --new-file libgpg-error-1.24.orig/src/syscfg/lock-obj-pub.x86_64-nt64-midipix.h libgpg-error-1.24/src/syscfg/lock-obj-pub.x86_64-nt64-midipix.h
+--- libgpg-error-1.24.orig/src/syscfg/lock-obj-pub.x86_64-nt64-midipix.h 1970-01-01 01:00:00.000000000 +0100
++++ libgpg-error-1.24/src/syscfg/lock-obj-pub.x86_64-nt64-midipix.h 2016-03-14 14:04:33.000000000 +0100
+@@ -0,0 +1,25 @@
++## lock-obj-pub.x86_64-pc-linux-musl.h
++## File created by gen-posix-lock-obj - DO NOT EDIT
++## To be included by mkheader into gpg-error.h
++
++typedef struct
++{
++ long _vers;
++ union {
++ volatile char _priv[40];
++ long _x_align;
++ long *_xp_align;
++ } u;
++} gpgrt_lock_t;
++
++#define GPGRT_LOCK_INITIALIZER {1,{{0,0,0,0,0,0,0,0, \
++ 0,0,0,0,0,0,0,0, \
++ 0,0,0,0,0,0,0,0, \
++ 0,0,0,0,0,0,0,0, \
++ 0,0,0,0,0,0,0,0}}}
++##
++## Local Variables:
++## mode: c
++## buffer-read-only: t
++## End:
++##
diff --git a/patches/libksba-1.3.5.local.patch b/patches/libksba-1.3.5.local.patch
new file mode 100644
index 00000000..9c9420b0
--- /dev/null
+++ b/patches/libksba-1.3.5.local.patch
@@ -0,0 +1,160 @@
+--- libksba-1.3.5/baconfigure.orig 2016-08-22 11:56:54.000000000 +0200
++++ libksba-1.3.5/configure 2016-10-18 22:46:31.763896688 +0200
+@@ -13852,155 +13852,9 @@
+ # Checks for libraries.
+ #
+
+- gpg_error_config_prefix=""
++#Overcomplicated and useless check for gpg-error, use CFLAGS and LDFLAGS! >:(
++ GPG_ERROR_LIBS="-lgpg-error"
+
+-# Check whether --with-libgpg-error-prefix was given.
+-if test "${with_libgpg_error_prefix+set}" = set; then :
+- withval=$with_libgpg_error_prefix; gpg_error_config_prefix="$withval"
+-fi
+-
+-
+-
+-# Check whether --with-gpg-error-prefix was given.
+-if test "${with_gpg_error_prefix+set}" = set; then :
+- withval=$with_gpg_error_prefix; gpg_error_config_prefix="$withval"
+-fi
+-
+-
+- if test x"${GPG_ERROR_CONFIG}" = x ; then
+- if test x"${gpg_error_config_prefix}" != x ; then
+- GPG_ERROR_CONFIG="${gpg_error_config_prefix}/bin/gpg-error-config"
+- else
+- case "${SYSROOT}" in
+- /*)
+- if test -x "${SYSROOT}/bin/gpg-error-config" ; then
+- GPG_ERROR_CONFIG="${SYSROOT}/bin/gpg-error-config"
+- fi
+- ;;
+- '')
+- ;;
+- *)
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5
+-$as_echo "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;}
+- ;;
+- esac
+- fi
+- fi
+-
+- # Extract the first word of "gpg-error-config", so it can be a program name with args.
+-set dummy gpg-error-config; ac_word=$2
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if ${ac_cv_path_GPG_ERROR_CONFIG+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- case $GPG_ERROR_CONFIG in
+- [\\/]* | ?:[\\/]*)
+- ac_cv_path_GPG_ERROR_CONFIG="$GPG_ERROR_CONFIG" # Let the user override the test with a path.
+- ;;
+- *)
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_path_GPG_ERROR_CONFIG="$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
+- fi
+-done
+- done
+-IFS=$as_save_IFS
+-
+- test -z "$ac_cv_path_GPG_ERROR_CONFIG" && ac_cv_path_GPG_ERROR_CONFIG="no"
+- ;;
+-esac
+-fi
+-GPG_ERROR_CONFIG=$ac_cv_path_GPG_ERROR_CONFIG
+-if test -n "$GPG_ERROR_CONFIG"; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPG_ERROR_CONFIG" >&5
+-$as_echo "$GPG_ERROR_CONFIG" >&6; }
+-else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+- min_gpg_error_version="$NEED_GPG_ERROR_VERSION"
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GPG Error - version >= $min_gpg_error_version" >&5
+-$as_echo_n "checking for GPG Error - version >= $min_gpg_error_version... " >&6; }
+- ok=no
+- if test "$GPG_ERROR_CONFIG" != "no" \
+- && test -f "$GPG_ERROR_CONFIG" ; then
+- req_major=`echo $min_gpg_error_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\)/\1/'`
+- req_minor=`echo $min_gpg_error_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\)/\2/'`
+- gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version`
+- major=`echo $gpg_error_config_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'`
+- minor=`echo $gpg_error_config_version | \
+- sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'`
+- if test "$major" -gt "$req_major"; then
+- ok=yes
+- else
+- if test "$major" -eq "$req_major"; then
+- if test "$minor" -ge "$req_minor"; then
+- ok=yes
+- fi
+- fi
+- fi
+- fi
+- if test $ok = yes; then
+- GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags`
+- GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs`
+- GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --mt --cflags 2>/dev/null`
+- GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --mt --libs 2>/dev/null`
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($gpg_error_config_version)" >&5
+-$as_echo "yes ($gpg_error_config_version)" >&6; }
+- :
+- gpg_error_config_host=`$GPG_ERROR_CONFIG $gpg_error_config_args --host 2>/dev/null || echo none`
+- if test x"$gpg_error_config_host" != xnone ; then
+- if test x"$gpg_error_config_host" != x"$host" ; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+-***
+-*** The config script $GPG_ERROR_CONFIG was
+-*** built for $gpg_error_config_host and thus may not match the
+-*** used host $host.
+-*** You may want to use the configure option --with-gpg-error-prefix
+-*** to specify a matching config script or use \$SYSROOT.
+-***" >&5
+-$as_echo "$as_me: WARNING:
+-***
+-*** The config script $GPG_ERROR_CONFIG was
+-*** built for $gpg_error_config_host and thus may not match the
+-*** used host $host.
+-*** You may want to use the configure option --with-gpg-error-prefix
+-*** to specify a matching config script or use \$SYSROOT.
+-***" >&2;}
+- gpg_config_script_warn="$gpg_config_script_warn libgpg-error"
+- fi
+- fi
+- else
+- GPG_ERROR_CFLAGS=""
+- GPG_ERROR_LIBS=""
+- GPG_ERROR_MT_CFLAGS=""
+- GPG_ERROR_MT_LIBS=""
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+- :
+- fi
+-
+-
+-
+-
+-
+-if test "x$GPG_ERROR_LIBS" = "x"; then
+- as_fn_error $? "libgpg-error is needed.
+- See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ ." "$LINENO" 5
+-fi
+
+
+ $as_echo "#define GPG_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_KSBA" >>confdefs.h
diff --git a/patches/libressl-2.2.6.local.patch b/patches/libressl-2.2.6.local.patch
new file mode 100644
index 00000000..759cfecd
--- /dev/null
+++ b/patches/libressl-2.2.6.local.patch
@@ -0,0 +1,193 @@
+--- libressl-2.2.6/crypto/compat/arc4random.h.orig 2015-10-15 23:18:44.000000000 +0200
++++ libressl-2.2.6/crypto/compat/arc4random.h 2016-02-12 17:19:40.815245600 +0100
+@@ -12,7 +12,7 @@
+ #elif defined(__hpux)
+ #include "arc4random_hpux.h"
+
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__MIDIPIX)
+ #include "arc4random_linux.h"
+
+ #elif defined(__NetBSD__)
+--- libressl-2.2.6/crypto/compat/getentropy_linux.c.orig 2015-10-16 00:04:58.000000000 +0200
++++ libressl-2.2.6/crypto/compat/getentropy_linux.c 2016-02-12 17:48:47.474391200 +0100
+@@ -27,7 +27,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/resource.h>
+ #include <sys/syscall.h>
+-#ifdef SYS__sysctl
++#if defined(SYS__sysctl) && !defined(__MIDIPIX)
+ #include <linux/sysctl.h>
+ #endif
+ #include <sys/statvfs.h>
+@@ -49,8 +49,10 @@
+ #include <time.h>
+ #include <openssl/sha.h>
+
++#ifndef __MIDIPIX
+ #include <linux/types.h>
+ #include <linux/random.h>
++#endif
+ #ifdef HAVE_GETAUXVAL
+ #include <sys/auxv.h>
+ #endif
+@@ -78,7 +80,7 @@
+ static int getentropy_getrandom(void *buf, size_t len);
+ #endif
+ static int getentropy_urandom(void *buf, size_t len);
+-#ifdef SYS__sysctl
++#if defined(SYS__sysctl) && !defined(__MIDIPIX)
+ static int getentropy_sysctl(void *buf, size_t len);
+ #endif
+ static int getentropy_fallback(void *buf, size_t len);
+@@ -115,7 +117,7 @@
+ if (ret != -1)
+ return (ret);
+
+-#ifdef SYS__sysctl
++#if defined(SYS__sysctl) && !defined(__MIDIPIX)
+ /*
+ * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID.
+ * sysctl is a failsafe API, so it guarantees a result. This
+@@ -241,10 +243,12 @@
+ close(fd);
+ goto nodevrandom;
+ }
++#ifndef __MIDIPIX
+ if (ioctl(fd, RNDGETENTCNT, &cnt) == -1) {
+ close(fd);
+ goto nodevrandom;
+ }
++#endif
+ for (i = 0; i < len; ) {
+ size_t wanted = len - i;
+ ssize_t ret = read(fd, (char *)buf + i, wanted);
+@@ -267,7 +271,7 @@
+ return -1;
+ }
+
+-#ifdef SYS__sysctl
++#if defined(SYS__sysctl) && !defined(__MIDIPIX)
+ static int
+ getentropy_sysctl(void *buf, size_t len)
+ {
+--- libressl-2.2.6/crypto/Makefile.in.orig 2016-01-28 19:18:08.000000000 +0100
++++ libressl-2.2.6/crypto/Makefile.in 2016-02-12 17:19:40.823245600 +0100
+@@ -111,10 +111,11 @@
+ @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_FREEBSD_TRUE@am__append_19 = compat/getentropy_freebsd.c
+ @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_HPUX_TRUE@am__append_20 = compat/getentropy_hpux.c
+ @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_LINUX_TRUE@am__append_21 = compat/getentropy_linux.c
+-@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_NETBSD_TRUE@am__append_22 = compat/getentropy_netbsd.c
+-@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_DARWIN_TRUE@am__append_23 = compat/getentropy_osx.c
+-@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_SOLARIS_TRUE@am__append_24 = compat/getentropy_solaris.c
+-@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_WIN_TRUE@am__append_25 = compat/getentropy_win.c
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_MIDIPIX_TRUE@am__append_22 = compat/getentropy_linux.c
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_NETBSD_TRUE@am__append_23 = compat/getentropy_netbsd.c
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_DARWIN_TRUE@am__append_24 = compat/getentropy_osx.c
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_SOLARIS_TRUE@am__append_25 = compat/getentropy_solaris.c
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_WIN_TRUE@am__append_26 = compat/getentropy_win.c
+ @HOST_ASM_ELF_X86_64_TRUE@am__append_26 = -DAES_ASM -DBSAES_ASM \
+ @HOST_ASM_ELF_X86_64_TRUE@ -DVPAES_ASM -DOPENSSL_IA32_SSE2 \
+ @HOST_ASM_ELF_X86_64_TRUE@ -DOPENSSL_BN_ASM_MONT \
+@@ -220,17 +221,18 @@
+ @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_FREEBSD_TRUE@am__objects_13 = compat/getentropy_freebsd.lo
+ @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_HPUX_TRUE@am__objects_14 = compat/getentropy_hpux.lo
+ @HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_LINUX_TRUE@am__objects_15 = compat/getentropy_linux.lo
+-@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_NETBSD_TRUE@am__objects_16 = compat/getentropy_netbsd.lo
+-@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_DARWIN_TRUE@am__objects_17 = compat/getentropy_osx.lo
+-@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_SOLARIS_TRUE@am__objects_18 = compat/getentropy_solaris.lo
+-@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_WIN_TRUE@am__objects_19 = compat/getentropy_win.lo
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_MIDIPIX_TRUE@am__objects_16 = compat/getentropy_linux.lo
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_NETBSD_TRUE@am__objects_17 = compat/getentropy_netbsd.lo
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_DARWIN_TRUE@am__objects_18 = compat/getentropy_osx.lo
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_SOLARIS_TRUE@am__objects_19 = compat/getentropy_solaris.lo
++@HAVE_ARC4RANDOM_BUF_FALSE@@HAVE_GETENTROPY_FALSE@@HOST_WIN_TRUE@am__objects_20 = compat/getentropy_win.lo
+ am_libcompat_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9) $(am__objects_10) $(am__objects_11) \
+ $(am__objects_12) $(am__objects_13) $(am__objects_14) \
+ $(am__objects_15) $(am__objects_16) $(am__objects_17) \
+- $(am__objects_18) $(am__objects_19)
++ $(am__objects_18) $(am__objects_19) $(am__objects_20)
+ libcompat_la_OBJECTS = $(am_libcompat_la_OBJECTS)
+ AM_V_lt = $(am__v_lt_@AM_V@)
+ am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+@@ -985,7 +987,7 @@
+ $(am__append_16) $(am__append_17) $(am__append_18) \
+ $(am__append_19) $(am__append_20) $(am__append_21) \
+ $(am__append_22) $(am__append_23) $(am__append_24) \
+- $(am__append_25)
++ $(am__append_25) $(am__append_26)
+ libcompat_la_LIBADD = $(PLATFORM_LDADD)
+
+ # rc4
+--- libressl-2.2.6/include/compat/machine/endian.h.orig 2015-10-15 23:18:44.000000000 +0200
++++ libressl-2.2.6/include/compat/machine/endian.h 2016-02-12 17:19:40.827245600 +0100
+@@ -21,7 +21,7 @@
+ #define BYTE_ORDER BIG_ENDIAN
+ #endif
+
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__MIDIPIX)
+ #include <endian.h>
+
+ #elif defined(__sun) || defined(_AIX) || defined(__hpux)
+--- libressl-2.2.6/configure.orig 2016-01-28 18:18:06.000000000 +0000
++++ libressl-2.2.6/configure 2016-02-23 13:25:30.689963257 +0000
+@@ -690,6 +690,8 @@
+ HOST_NETBSD_TRUE
+ HOST_LINUX_FALSE
+ HOST_LINUX_TRUE
++HOST_MIDIPIX_FALSE
++HOST_MIDIPIX_TRUE
+ HOST_HPUX_FALSE
+ HOST_HPUX_TRUE
+ HOST_FREEBSD_FALSE
+@@ -10824,7 +10826,7 @@
+ ;;
+
+ # This must be glibc/ELF.
+-linux* | k*bsd*-gnu | kopensolaris*-gnu)
++linux* | k*bsd*-gnu | kopensolaris*-gnu | midipix*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+@@ -11902,6 +11904,11 @@
+ HOST_ABI=elf
+ CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE"
+ ;;
++ *midipix*)
++ HOST_OS=midipix
++ HOST_ABI=pe
++ CFLAGS="$CFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE"
++ ;;
+ *netbsd*)
+ HOST_OS=netbsd
+ CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE"
+@@ -11981,6 +11988,14 @@
+ HOST_LINUX_FALSE=
+ fi
+
++ if test x$HOST_OS = xmidipix; then
++ HOST_MIDIPIX_TRUE=
++ HOST_MIDIPIX_FALSE='#'
++else
++ HOST_MIDIPIX_TRUE='#'
++ HOST_MIDIPIX_FALSE=
++fi
++
+ if test x$HOST_OS = xnetbsd; then
+ HOST_NETBSD_TRUE=
+ HOST_NETBSD_FALSE='#'
+@@ -13422,6 +13437,10 @@
+ as_fn_error $? "conditional \"HOST_LINUX\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
++if test -z "${HOST_MIDIPIX_TRUE}" && test -z "${HOST_MIDIPIX_FALSE}"; then
++ as_fn_error $? "conditional \"HOST_MIDIPIX\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
+ if test -z "${HOST_NETBSD_TRUE}" && test -z "${HOST_NETBSD_FALSE}"; then
+ as_fn_error $? "conditional \"HOST_NETBSD\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/patches/lua-5.3.3.local.patch b/patches/lua-5.3.3.local.patch
new file mode 100644
index 00000000..e4a035d1
--- /dev/null
+++ b/patches/lua-5.3.3.local.patch
@@ -0,0 +1,128 @@
+--- lua-5.3.3/src/luaconf.h.orig 2016-05-01 20:06:09.000000000 +0000
++++ lua-5.3.3/src/luaconf.h 2016-06-23 10:02:23.471604030 +0000
+@@ -72,6 +72,12 @@
+ #endif
+
+
++#if defined(LUA_USE_MIDIPIX)
++#define LUA_USE_POSIX
++#define LUA_USE_DLOPEN /* needs an extra library: -ldl */
++#endif
++
++
+ /*
+ @@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for
+ ** C89 ('long' and 'double'); Windows always has '__int64', so it does
+@@ -188,7 +194,7 @@
+
+ #else /* }{ */
+
+-#define LUA_ROOT "/usr/local/"
++#define LUA_ROOT "/usr/"
+ #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/"
+ #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/"
+ #define LUA_PATH_DEFAULT \
+--- lua-5.3.3/src/Makefile.orig 2015-05-27 11:10:11.000000000 +0000
++++ lua-5.3.3/src/Makefile 2016-06-23 10:45:40.323546394 +0000
+@@ -26,9 +26,10 @@
+
+ # == END OF USER SETTINGS -- NO NEED TO CHANGE ANYTHING BELOW THIS LINE =======
+
+-PLATS= aix bsd c89 freebsd generic linux macosx mingw posix solaris
++PLATS= aix bsd c89 freebsd generic linux macosx midipix mingw posix solaris
+
+ LUA_A= liblua.a
++LUA_SO= liblua.so
+ CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
+ lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
+ ltm.o lundump.o lvm.o lzio.o
+@@ -36,14 +37,14 @@
+ lmathlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o loadlib.o linit.o
+ BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS)
+
+-LUA_T= lua
++LUA_T= lua$(V)
+ LUA_O= lua.o
+
+-LUAC_T= luac
++LUAC_T= luac$(V)
+ LUAC_O= luac.o
+
+ ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
+-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
++ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
+ ALL_A= $(LUA_A)
+
+ # Targets start here.
+@@ -56,9 +57,14 @@
+ a: $(ALL_A)
+
+ $(LUA_A): $(BASE_O)
+- $(AR) $@ $(BASE_O)
++ $(AR) rcs $@ $(BASE_O)
+ $(RANLIB) $@
+
++$(LUA_SO): $(CORE_O) $(LIB_O)
++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO)
++
+ $(LUA_T): $(LUA_O) $(LUA_A)
+ $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
+
+@@ -112,6 +118,9 @@
+ macosx:
+ $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline" CC=cc
+
++midipix:
++ $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MIDIPIX" SYSLIBS="-Wl,-E -ldl"
++
+ mingw:
+ $(MAKE) "LUA_A=lua53.dll" "LUA_T=lua.exe" \
+ "AR=$(CC) -shared -o" "RANLIB=strip --strip-unneeded" \
+--- lua-5.3.3/Makefile.orig 2015-05-27 11:10:11.000000000 +0000
++++ lua-5.3.3/Makefile 2016-06-23 10:59:29.519527991 +0000
+@@ -36,23 +36,25 @@
+ # == END OF USER SETTINGS -- NO NEED TO CHANGE ANYTHING BELOW THIS LINE =======
+
+ # Convenience platforms targets.
+-PLATS= aix bsd c89 freebsd generic linux macosx mingw posix solaris
++PLATS= aix bsd c89 freebsd generic linux macosx midipix mingw posix solaris
++
++# Lua version and release.
++V= 5.3
++R= $V.3
+
+ # What to install.
+-TO_BIN= lua luac
++TO_BIN= lua$(V) luac$(V)
++TO_BIN_LINKS= lua$(V):lua luac$(V):luac
+ TO_INC= lua.h luaconf.h lualib.h lauxlib.h lua.hpp
+ TO_LIB= liblua.a
++TO_LIBSO= liblua.so liblua.so.$V
+ TO_MAN= lua.1 luac.1
+
+-# Lua version and release.
+-V= 5.3
+-R= $V.3
+-
+ # Targets start here.
+ all: $(PLAT)
+
+ $(PLATS) clean:
+- cd src && $(MAKE) $@
++ cd src && $(MAKE) $@ V=$(V) R=$(R)
+
+ test: dummy
+ src/lua -v
+@@ -60,8 +62,10 @@
+ install: dummy
+ cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
+ cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN)
++ cd src && for FNAME in $(TO_BIN_LINKS); do echo ln -fs $${FNAME%:*} $(INSTALL_BIN)/$${FNAME#*:}; ln -fs $${FNAME%:*} $(INSTALL_BIN)/$${FNAME#*:}; done
+ cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC)
+ cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB)
++ cd src && $(INSTALL_EXEC) $(TO_LIBSO) $(INSTALL_LIB)
+ cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN)
+
+ uninstall:
diff --git a/patches/mc-4.8.17.local.patch b/patches/mc-4.8.17.local.patch
new file mode 100644
index 00000000..05c2ac50
--- /dev/null
+++ b/patches/mc-4.8.17.local.patch
@@ -0,0 +1,20 @@
+--- mc-4.8.17/configure.orig 2016-05-07 18:13:45.000000000 +0200
++++ mc-4.8.17/configure 2016-09-06 18:16:45.987179012 +0200
+@@ -19922,7 +19922,7 @@
+
+
+ # Determine how to get the list of mounted file systems.
+-ac_list_mounted_fs=
++#ac_list_mounted_fs=
+
+ # If the getmntent function is available but not in the standard library,
+ # make sure LIBS contains the appropriate -l option.
+@@ -20634,7 +20634,7 @@
+
+
+ # Determine how to get the list of mounted file systems.
+-ac_list_mounted_fs=
++#ac_list_mounted_fs=
+
+ # If the getmntent function is available but not in the standard library,
+ # make sure LIBS contains the appropriate -l option.
diff --git a/patches/nc110.local.patch b/patches/nc110.local.patch
new file mode 100644
index 00000000..fcf63536
--- /dev/null
+++ b/patches/nc110.local.patch
@@ -0,0 +1,56 @@
+--- nc110/Makefile.orig 1996-03-20 03:16:06.000000000 +0000
++++ nc110/Makefile 2016-09-11 20:44:21.896119203 +0000
+@@ -9,13 +9,13 @@
+ # pick gcc if you'd rather , and/or do -g instead of -O if debugging
+ # debugging
+ # DFLAGS = -DTEST -DDEBUG
+-CFLAGS = -O
++CFLAGS = -O $(CFLAGS_EXTRA)
+ XFLAGS = # xtra cflags, set by systype targets
+ XLIBS = # xtra libs if necessary?
+ # -Bstatic for sunos, -static for gcc, etc. You want this, trust me.
+ STATIC =
+-CC = cc $(CFLAGS)
+-LD = $(CC) -s # linker; defaults to stripped executables
++CC = cc ${CFLAGS}
++LD = $(CC) $(LDFLAGS_DEBUG) # linker; defaults to stripped executables
+ o = o # object extension
+
+ ALL = nc
+@@ -28,7 +28,7 @@
+ ### HARD TARGETS
+
+ nc: netcat.c
+- $(LD) $(DFLAGS) $(XFLAGS) $(STATIC) -o nc netcat.c $(XLIBS)
++ $(LD) $(CFLAGS) $(LDFLAGS) $(DFLAGS) $(XFLAGS) $(STATIC) -o nc netcat.c $(XLIBS)
+
+ nc-dos:
+ @echo "DOS?! Maybe someday, but not now"
+@@ -109,6 +109,10 @@
+ next:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DNEXT' STATIC=-Bstatic
+
++# midipix
++midipix:
++ make -e $(ALL) $(MFLAGS) XFLAGS='-DLINUX' STATIC=
++
+ # start with this for a new architecture, and see what breaks.
+ generic:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DGENERIC' STATIC=
+--- nc110/generic.h.orig 1996-02-18 01:36:43.000000000 +0000
++++ nc110/generic.h 2016-06-15 18:44:06.379382216 +0000
+@@ -360,6 +360,14 @@
+ #undef HAVE_SELECT_X
+ #endif /* NeXTSTEP 3.2 motorola */
+
++/* midipix */
++#ifdef MIDIPIX
++#undef UTMPX
++#undef HAVE_SYSINFO
++#undef HAVE_SELECT_H
++#undef HAVE_TTYENT_H
++#endif /* midipix */
++
+ /* Make some "generic" assumptions if all else fails */
+ #ifdef GENERIC
+ #undef HAVE_FLOCK
diff --git a/patches/ncurses-6.0.local.patch b/patches/ncurses-6.0.local.patch
new file mode 100644
index 00000000..6b86c27b
--- /dev/null
+++ b/patches/ncurses-6.0.local.patch
@@ -0,0 +1,33 @@
+--- ncurses-6.0/configure.orig 2015-08-05 09:20:32.000000000 +0000
++++ ncurses-6.0/configure 2016-02-23 11:33:12.718112802 +0000
+@@ -5856,7 +5856,7 @@
+ LD_RPATH_OPT="-rpath "
+ fi
+ ;;
+-(linux*|gnu*|k*bsd*-gnu)
++(linux*|gnu*|k*bsd*-gnu|midipix*)
+ LD_RPATH_OPT="-Wl,-rpath,"
+ ;;
+ (openbsd[2-9].*|mirbsd*)
+@@ -6188,7 +6188,7 @@
+ fi
+ cf_cv_rm_so_locs=yes
+ ;;
+- (linux*|gnu*|k*bsd*-gnu)
++ (linux*|gnu*|k*bsd*-gnu|midipix*)
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+--- ncurses-6.0/misc/Makefile.in.orig 2015-08-05 23:15:41.000000000 +0000
++++ ncurses-6.0/misc/Makefile.in 2016-06-23 08:40:43.767712775 +0000
+@@ -110,8 +110,8 @@
+ install.libs :: $(DESTDIR)$(bindir) ncurses-config
+ $(INSTALL_SCRIPT) ncurses-config $(DESTDIR)$(bindir)/$(NCURSES_CONFIG)
+
+-@MAKE_PC_FILES@install.libs :: pc-files $(DESTDIR)$(PKG_CONFIG_LIBDIR)
+-@MAKE_PC_FILES@ $(SHELL) -c 'for name in *.pc; do $(INSTALL_DATA) $$name $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; done'
++@MAKE_PC_FILES@install.libs :: pc-files $(PKG_CONFIG_LIBDIR)
++@MAKE_PC_FILES@ $(SHELL) -c 'for name in *.pc; do $(INSTALL_DATA) $$name $(PKG_CONFIG_LIBDIR)/$$name; done'
+
+ @MAKE_PC_FILES@sources :: pc-files
+ @MAKE_PC_FILES@pc-files :
diff --git a/patches/p7zip.local.patch b/patches/p7zip.local.patch
new file mode 100644
index 00000000..e9233672
--- /dev/null
+++ b/patches/p7zip.local.patch
@@ -0,0 +1,14 @@
+diff -ru midipix_build.orig/build.vars midipix_build/build.vars
+--- midipix_build.orig/build.vars 2016-11-11 20:27:40.381427111 +0100
++++ midipix_build/build.vars 2016-11-11 23:23:58.045425113 +0100
+@@ -640,5 +640,10 @@
+ : ${PKG_ZSH_SHA256SUM:=f17916320ffaa844bbd7ce48ceeb5945fc5f3eff64b149b4229bbfbdf3795a9d};
+ : ${PKG_ZSH_URL:="https://fourdots.com/mirror/zsh/zsh-${PKG_ZSH_VERSION}.tar.xz"};
+ : ${PKG_ZSH_FNAME:=zsh-${PKG_ZSH_VERSION}.tar.xz};
++: ${PKG_P7ZIP_URL_TYPE:=git};
++: ${PKG_P7ZIP_URL:=https://github.com/Redfoxmoon3/p7zip-midipix.git};
++: ${PKG_P7ZIP_BUILD_DIR:=p7zip-midipix.git};
++: ${PKG_P7ZIP_NO_MAKE_INSTALL:=1};
++: ${PKG_P7ZIP_INSTALL_FILES:="bin/7za=bin/"};
+
+ # vim:filetype=sh textwidth=0
diff --git a/patches/pacman-5.0.1.local.patch b/patches/pacman-5.0.1.local.patch
new file mode 100644
index 00000000..7df4cd24
--- /dev/null
+++ b/patches/pacman-5.0.1.local.patch
@@ -0,0 +1,44 @@
+--- pacman-5.0.1/lib/libalpm/Makefile.am.orig 2016-02-23 03:46:25.000000000 +0000
++++ pacman-5.0.1/lib/libalpm/Makefile.am 2016-05-31 06:39:23.693111052 +0000
+@@ -78,6 +78,7 @@
+ $(GPGME_LIBS) \
+ $(LIBARCHIVE_LIBS) \
+ $(LIBCURL_LIBS) \
+- $(LIBSSL_LIBS)
++ $(LIBSSL_LIBS) \
++ $(LIBALPM_LIBS)
+
+ # vim:set noet:
+--- pacman-5.0.1/src/pacman/Makefile.am.orig 2016-02-23 03:46:25.000000000 +0000
++++ pacman-5.0.1/src/pacman/Makefile.am 2016-05-31 08:33:33.452959027 +0000
+@@ -47,6 +47,6 @@
+ util.h util.c \
+ util-common.h util-common.c
+
+-LDADD = $(LTLIBINTL) $(top_builddir)/lib/libalpm/.libs/libalpm.la
++LDADD = $(LTLIBINTL) $(top_builddir)/lib/libalpm/libalpm.la
+
+ # vim:set noet:
+--- pacman-5.0.1/src/util/Makefile.am.orig 2016-02-23 03:46:25.000000000 +0000
++++ pacman-5.0.1/src/util/Makefile.am 2016-05-31 08:33:48.912958683 +0000
+@@ -19,16 +19,16 @@
+ $(LIBARCHIVE_CFLAGS)
+
+ cleanupdelta_SOURCES = cleanupdelta.c
+-cleanupdelta_LDADD = $(top_builddir)/lib/libalpm/.libs/libalpm.la
++cleanupdelta_LDADD = $(top_builddir)/lib/libalpm/libalpm.la
+
+ pacsort_SOURCES = pacsort.c util-common.c
+-pacsort_LDADD = $(top_builddir)/lib/libalpm/.libs/libalpm.la
++pacsort_LDADD = $(top_builddir)/lib/libalpm/libalpm.la
+
+ pactree_SOURCES = pactree.c util-common.c
+-pactree_LDADD = $(top_builddir)/lib/libalpm/.libs/libalpm.la
++pactree_LDADD = $(top_builddir)/lib/libalpm/libalpm.la
+
+ testpkg_SOURCES = testpkg.c
+-testpkg_LDADD = $(top_builddir)/lib/libalpm/.libs/libalpm.la
++testpkg_LDADD = $(top_builddir)/lib/libalpm/libalpm.la
+
+ vercmp_SOURCES = vercmp.c
+ vercmp_LDADD = $(top_builddir)/lib/libalpm/libalpm_la-version.lo
diff --git a/patches/pkg-cron.git.local.patch b/patches/pkg-cron.git.local.patch
new file mode 100644
index 00000000..4d6bc53e
--- /dev/null
+++ b/patches/pkg-cron.git.local.patch
@@ -0,0 +1,22 @@
+--- pkg-cron.git/Makefile.orig 2016-07-11 19:06:33.212362869 +0000
++++ pkg-cron.git/Makefile 2016-09-11 20:37:42.714987721 +0000
+@@ -79,7 +79,7 @@
+ #DEFS = -D_BSD_SIGNALS -Dconst=
+ #<<the name of the BSD-like install program>>
+ #INSTALL = installbsd
+-INSTALL = install -s
++INSTALL = install $(INSTALLFLAGS)
+ #<<any special load flags>>
+ # LDFLAGS = -s
+ # Let install do the strip
+@@ -118,8 +118,8 @@
+ $(CC) $(LDFLAGS) -o crontab $(CRONTAB_OBJ) $(LIBS)
+
+ install : all
+- $(INSTALL) -c -m 755 -o root cron $(DESTSBIN)/
+- $(INSTALL) -c -m 4755 -o root crontab $(DESTBIN)/
++ $(INSTALL) -c -m 755 cron $(DESTSBIN)/
++ $(INSTALL) -c -m 4755 crontab $(DESTBIN)/
+ sh putman.sh crontab.1 $(DESTMAN)
+ sh putman.sh cron.8 $(DESTMAN)
+ sh putman.sh crontab.5 $(DESTMAN)
diff --git a/patches/tcsh-6.19.00.local.patch b/patches/tcsh-6.19.00.local.patch
new file mode 100644
index 00000000..45674066
--- /dev/null
+++ b/patches/tcsh-6.19.00.local.patch
@@ -0,0 +1,201 @@
+--- tcsh-6.19.00/configure.orig 2015-05-21 21:41:48.000000000 +0000
++++ tcsh-6.19.00/configure 2016-05-26 11:51:44.823732557 +0000
+@@ -2975,6 +2975,11 @@
+ tcsh_config_file=qnx6
+ ;;
+
++ ## midipix
++ *-midipix*)
++ tcsh_config_file=midipix
++ ;;
++
+ * )
+ as_fn_error $? "Tcsh can't guess the configuration file name
+ for \`${host}' systems.
+--- tcsh-6.19.00/sh.h.orig 2015-05-10 13:29:28.000000000 +0000
++++ tcsh-6.19.00/sh.h 2016-05-26 12:16:19.303699832 +0000
+@@ -333,7 +333,7 @@
+ #endif /* POSIX && !WINNT_NATIVE */
+ #include <limits.h>
+
+-#if SYSVREL > 0 || defined(_IBMR2) || defined(_MINIX) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)
++#if SYSVREL > 0 || defined(_IBMR2) || defined(_MINIX) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) || defined(__midipix__)
+ # if !defined(pyr) && !defined(stellar)
+ # include <time.h>
+ # ifdef _MINIX
+--- tcsh-6.19.00/Makefile.in.orig 2014-07-24 22:52:13.000000000 +0000
++++ tcsh-6.19.00/Makefile.in 2016-05-26 12:43:28.099663682 +0000
+@@ -24,6 +24,7 @@
+ CF=-c
+
+ CPPFLAGS=-I. -I$(srcdir)
++CPPFLAGS_FOR_GETHOST=-I. -I$(srcdir)
+
+ LFLAGS=
+ # hpux lint
+@@ -449,7 +450,7 @@
+
+ gethost: gethost.c sh.err.h tc.const.h sh.h
+ rm -f gethost
+- ${CC_FOR_GETHOST} -o gethost ${CPPFLAGS} ${CFLAGS} $(srcdir)/gethost.c
++ ${CC_FOR_GETHOST} -o gethost ${CPPFLAGS_FOR_GETHOST} ${CFLAGS_FOR_GETHOST} $(srcdir)/gethost.c
+
+ tc.defs.c: gethost host.defs
+ @rm -f $@.tmp
+--- tcsh-6.19.00/config/midipix.orig 1970-01-01 00:00:00.000000000 +0000
++++ tcsh-6.19.00/config/midipix 2016-05-26 13:04:58.627635040 +0000
+@@ -0,0 +1,138 @@
++/*
++ * config.h -- configure various defines for tcsh
++ *
++ * All source files should #include this FIRST.
++ *
++ * This is the config file for midipix systems
++ */
++
++#ifndef _h_config
++#define _h_config
++/****************** System dependant compilation flags ****************/
++/*
++ * POSIX This system supports IEEE Std 1003.1-1988 (POSIX).
++ */
++#define POSIX
++
++/*
++ * POSIXJOBS This system supports the optional IEEE Std 1003.1-1988 (POSIX)
++ * job control facilities.
++ */
++#define POSIXJOBS
++
++/*
++ * VFORK This machine has a vfork().
++ * It used to be that for job control to work, this define
++ * was mandatory. This is not the case any more.
++ * If you think you still need it, but you don't have vfork,
++ * define this anyway and then do #define vfork fork.
++ * I do this anyway on a Sun because of yellow pages brain damage,
++ * [should not be needed under 4.1]
++ * and on the iris4d cause SGI's fork is sufficiently "virtual"
++ * that vfork isn't necessary. (Besides, SGI's vfork is weird).
++ * Note that some machines eg. rs6000 have a vfork, but not
++ * with the berkeley semantics, so we cannot use it there either.
++ */
++#undef VFORK
++
++/*
++ * BSDJOBS You have BSD-style job control (both process groups and
++ * a tty that deals correctly
++ */
++#define BSDJOBS
++
++/*
++ * BSDTIMES You have BSD-style process time stuff (like rusage)
++ * This may or may not be true. For example, Apple Unix
++ * (OREO) has BSDJOBS but not BSDTIMES.
++ */
++#define BSDTIMES
++
++/*
++ * BSDLIMIT You have BSD-style resource limit stuff (getrlimit/setrlimit)
++ */
++#define BSDLIMIT
++
++/*
++ * TERMIO You have struct termio instead of struct sgttyb.
++ * This is usually the case for SVID systems, where
++ * BSD uses sgttyb. POSIX systems should define this
++ * anyway, even though they use struct termios.
++ */
++#define TERMIO
++
++/*
++ * SYSVREL Your machine is SYSV based (HPUX, A/UX)
++ * NOTE: don't do this if you are on a Pyramid -- tcsh is
++ * built in a BSD universe.
++ * Set SYSVREL to 1, 2, 3, or 4, depending the version of System V
++ * you are running. Or set it to 0 if you are not SYSV based
++ *
++ * Note: Linux should work with any SYSVREL < 3.
++ */
++#define SYSVREL 2
++
++/*
++ * YPBUGS Work around Sun YP bugs that cause expansion of ~username
++ * to send command output to /dev/null
++ */
++#undef YPBUGS
++
++/*
++ * Get the name space we want.
++ *
++ * The more recent defaults for gcc (e.g. on Red Hat 7.0)
++ * also define _POSIX_C_SOURCE, which throws our code off.
++ */
++
++#define __STRICT_ANSI__
++#ifndef _BSD_SOURCE
++# define _BSD_SOURCE
++#endif
++#ifndef _SVID_SOURCE
++# define _SVID_SOURCE
++#endif
++#ifndef _POSIX_SOURCE
++# define _POSIX_SOURCE
++#endif
++#ifndef _XOPEN_SOURCE
++# define _XOPEN_SOURCE 500
++#endif
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE
++#endif
++
++/*
++ * Large file support from <features.h>
++ */
++
++#ifndef _LARGEFILE_SOURCE
++# define _LARGEFILE_SOURCE
++#endif
++#ifndef _LARGEFILE64_SOURCE
++# define _LARGEFILE64_SOURCE
++#endif
++#ifndef _FILE_OFFSET_BITS
++# define _FILE_OFFSET_BITS 64
++#endif
++
++/****************** local defines *********************/
++#ifndef _PATH_TCSHELL
++#define _PATH_TCSHELL "/bin/tcsh"
++#endif
++#define ECHO_STYLE BOTH_ECHO
++
++#if !defined(SYSMALLOC)
++# define SYSMALLOC
++#endif
++#if !defined(NISPLUS)
++# define NISPLUS
++#endif
++#if !defined(POSIX)
++# define POSIX
++#endif
++
++/* midipix allows paths prepended with double slashes (network paths). */
++#define HAVE_SLASHSLASH 1
++
++#endif /* _h_config */
+--- tcsh-6.19.00/config_f.h.orig 2015-02-22 17:31:54.000000000 +0100
++++ tcsh-6.19.00/config_f.h 2016-10-14 22:10:42.212000000 +0200
+@@ -135,11 +135,9 @@
+ * This can be much slower and no memory statistics will be
+ * provided.
+ */
+-#if defined(__MACHTEN__) || defined(PURIFY) || defined(MALLOC_TRACE) || defined(_OSD_POSIX) || defined(__MVS__) || defined (__CYGWIN__) || defined(__GLIBC__) || defined(__OpenBSD__) || defined(__APPLE__)
++
++/* always use the system malloc. seriously guys. */
+ # define SYSMALLOC
+-#else
+-# undef SYSMALLOC
+-#endif
+
+ /*
+ * USE_ACCESS Use access(2) rather than stat(2) when POSIX is defined.
diff --git a/patches/tmux-2.2.local.patch b/patches/tmux-2.2.local.patch
new file mode 100644
index 00000000..3fdec0a7
--- /dev/null
+++ b/patches/tmux-2.2.local.patch
@@ -0,0 +1,51 @@
+--- tmux-2.2/configure.orig 2016-04-11 02:01:19.000000000 +0200
++++ tmux-2.2/configure 2016-06-24 12:56:52.685289900 +0200
+@@ -3664,18 +3664,6 @@
+ $as_echo "$ac_cv_prog_cc_g" >&6; }
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+-elif test $ac_cv_prog_cc_g = yes; then
+- if test "$GCC" = yes; then
+- CFLAGS="-g -O2"
+- else
+- CFLAGS="-g"
+- fi
+-else
+- if test "$GCC" = yes; then
+- CFLAGS="-O2"
+- else
+- CFLAGS=
+- fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+ $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+--- tmux-2.2/Makefile.in.orig 2016-04-11 02:01:16.000000000 +0200
++++ tmux-2.2/Makefile.in 2016-06-24 12:58:45.526157800 +0200
+@@ -94,10 +94,10 @@
+
+ # glibc as usual does things ass-backwards and hides useful things by default,
+ # so everyone has to add this.
+-@IS_GLIBC_TRUE@am__append_1 = -D_GNU_SOURCE
++am__append_1 = -D_GNU_SOURCE
+
+ # Set flags for gcc.
+-@IS_GCC_TRUE@am__append_2 = -std=gnu99 -O2
++@IS_GCC_TRUE@am__append_2 = -std=gnu99
+ @IS_DEBUG_TRUE@@IS_GCC_TRUE@am__append_3 = -g -Wno-long-long -Wall -W \
+ @IS_DEBUG_TRUE@@IS_GCC_TRUE@ -Wnested-externs -Wformat=2 \
+ @IS_DEBUG_TRUE@@IS_GCC_TRUE@ -Wmissing-prototypes \
+--- tmux-2.2/tmux.c.orig 2016-03-05 18:55:49.000000000 +0100
++++ tmux-2.2/tmux.c 2016-06-24 13:00:39.079504000 +0200
+@@ -133,10 +133,12 @@
+ errno = ENOTDIR;
+ goto fail;
+ }
++#if 0
+ if (sb.st_uid != uid || (sb.st_mode & S_IRWXO) != 0) {
+ errno = EACCES;
+ goto fail;
+ }
++#endif
+
+ if (realpath(base, resolved) == NULL)
+ strlcpy(resolved, base, sizeof resolved);
diff --git a/patches/unzip60.local.patch b/patches/unzip60.local.patch
new file mode 100644
index 00000000..1b5006e6
--- /dev/null
+++ b/patches/unzip60.local.patch
@@ -0,0 +1,14 @@
+--- unzip60/unix/Makefile.orig 2009-01-18 23:41:18.000000000 +0100
++++ unzip60/unix/Makefile 2016-10-17 05:23:43.308917300 +0200
+@@ -535,6 +535,11 @@
+ # INDIVIDUAL MACHINE MAKERULES #
+ ################################
+
++#Midipix target
++midipix:
++ $(MAKE) $(MAKEF) unzips CC="x86_64-nt64-midipix-gcc" CFLAGS="-g3 -O0 -I. -DUNIX -DNO_BZIP2_SUPPORT -DLARGE_FILE_SUPPORT -DUNICODE_SUPPORT -DUNICODE_WCHAR -DUNICODE_SUPPORT \
++ -DUTF8_MAYBE_NATIVE -DNO_LCHMOD -DHAVE_DIRENT_H -DHAVE_TERMIOS_H -D_MBCS" CRCA_O="" AS="x86_64-nt64-midipix-gcc -c" LFLAGS1="" LF2=""
++
+ #----------------------------------------------------------------------------
+ # Generic targets using the configure script to determine configuration.
+ #----------------------------------------------------------------------------
diff --git a/patches/vim-7.4.1952.local.patch b/patches/vim-7.4.1952.local.patch
new file mode 100644
index 00000000..178e0fc5
--- /dev/null
+++ b/patches/vim-7.4.1952.local.patch
@@ -0,0 +1,56 @@
+--- vim-7.4.1952/src/osdef2.h.in.orig 2016-06-21 23:42:20.000000000 +0200
++++ vim-7.4.1952/src/osdef2.h.in 2016-09-06 18:33:43.655518796 +0200
+@@ -92,5 +92,5 @@
+ extern int _Xmblen(char const *, size_t);
+ #else
+ /* This is different from the header but matches mblen() */
+-extern int _Xmblen(char *, size_t);
++extern int _Xmblen(char *, int);
+ #endif
+--- vim-7.4.1952/src/Makefile.orig 2016-06-21 23:42:20.000000000 +0200
++++ vim-7.4.1952/src/Makefile 2016-09-07 06:29:14.483862359 +0200
+@@ -2692,7 +2692,7 @@
+ $(PERLLIB)/ExtUtils/typemap if_perl.xs >> $@
+
+ auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
+- CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
++ CC="$(CC) $(OSDEF_CFLAGS) -I$(PKG_PREFIX)/include" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
+
+ auto/pathdef.c: Makefile auto/config.mk
+ -@echo creating $@
+--- vim-7.4.1952/src/auto/configure.orig 2016-06-21 23:42:20.000000000 +0200
++++ vim-7.4.1952/src/auto/configure 2016-09-16 16:37:28.147266000 +0200
+@@ -2603,7 +2603,7 @@
+ ## -------------------- ##
+
+ ac_ext=c
+-ac_cpp='$CPP $CPPFLAGS'
++ac_cpp='$CPP $CFLAGS $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+@@ -7607,6 +7607,7 @@
+
+ # Standard set of common directories for X headers.
+ # Check X11 before X11Rn because it is often a symlink to the current release.
++if test -z "$ac_x_header_dirs"; then
+ ac_x_header_dirs='
+ /usr/X11/include
+ /usr/X11R7/include
+@@ -7645,6 +7646,7 @@
+
+ /usr/openwin/include
+ /usr/openwin/share/include'
++fi
+
+ if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Xlib.h.
+@@ -9488,7 +9490,7 @@
+
+
+
+-
++SKIP_MOTIF=YES
+ if test -z "$SKIP_MOTIF"; then
+ gui_XXX="/usr/XXX/Motif* /usr/Motif*/XXX /usr/XXX /usr/shlib /usr/X11*/XXX /usr/XXX/X11* /usr/dt/XXX /local/Motif*/XXX /local/XXX/Motif* /usr/local/Motif*/XXX /usr/local/XXX/Motif* /usr/local/XXX /usr/local/X11*/XXX /usr/local/LessTif/Motif*/XXX $MOTIFHOME/XXX"
+ GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
diff --git a/patches/weechat-1.6.local.patch b/patches/weechat-1.6.local.patch
new file mode 100644
index 00000000..c25f36ca
--- /dev/null
+++ b/patches/weechat-1.6.local.patch
@@ -0,0 +1,45 @@
+diff -ru weechat-1.6.orig/config.sub weechat-1.6/config.sub
+--- weechat-1.6.orig/config.sub 2016-10-19 20:51:03.610252372 +0200
++++ weechat-1.6/config.sub 2016-10-19 20:33:14.686252372 +0200
+@@ -1376,7 +1376,7 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+--- weechat-1.6/configure.orig 2016-11-15 19:19:45.531918300 +0100
++++ weechat-1.6/configure 2016-11-15 19:23:22.078226900 +0100
+@@ -23683,7 +23683,7 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ GCRYPT_CFLAGS=`libgcrypt-config --cflags`
+- GCRYPT_LFLAGS=`libgcrypt-config --libs`
++ GCRYPT_LFLAGS="-lgcrypt -lgpg-error"
+
+
+ fi
+@@ -23760,8 +23760,8 @@
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+- GNUTLS_CFLAGS=`pkg-config gnutls --cflags`
+- GNUTLS_LFLAGS=`pkg-config gnutls --libs`
++ GNUTLS_CFLAGS=`$PKG_CONFIG gnutls --cflags`
++ GNUTLS_LFLAGS=`$PKG_CONFIG gnutls --libs`
+
+
+ $as_echo "#define HAVE_GNUTLS 1" >>confdefs.h
+@@ -23972,8 +23972,8 @@
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+- ZLIB_CFLAGS=`pkg-config zlib --cflags`
+- ZLIB_LFLAGS=`pkg-config zlib --libs`
++ ZLIB_CFLAGS=`$PKG_CONFIG zlib --cflags`
++ ZLIB_LFLAGS=`$PKG_CONFIG zlib --libs`
+
+
+ fi
diff --git a/patches/zip30.local.patch b/patches/zip30.local.patch
new file mode 100644
index 00000000..0c37bcf9
--- /dev/null
+++ b/patches/zip30.local.patch
@@ -0,0 +1,16 @@
+diff -ru zip30.orig/unix/Makefile zip30/unix/Makefile
+--- zip30.orig/unix/Makefile 2008-05-07 08:33:56.000000000 +0200
++++ zip30/unix/Makefile 2016-10-17 01:03:49.734470317 +0200
+@@ -196,6 +196,12 @@
+ # NO_UNICODE_SUPPORT - do not enable Unicode support even if available.
+ # NO_BZIP2_SUPPORT - do not compile in bzip2 code even if available.
+
++# Midipix target
++midipix:
++ $(MAKE) $(MAKEF) zips LDFLAGS1="" CC="x86_64-nt64-midipix-gcc" CPP="x86_64-nt64-midipix-gcc -E" \
++ CFLAGS="-g3 -O0 -DUNIX -I. -DHAVE_TERMIOS_H -DNO_BZIP2_SUPPORT -DLARGE_FILE_SUPPORT -DUNICODE_SUPPORT \
++ -DHAVE_DIRENT_H -DUIDGID_NOT_16BIT" OBJA="" OCRCU8="crc32_.o " OCRCTB="" LN="ln -s" LFLAGS2=""
++
+ # Generic targets:
+
+ generic: flags