The package rpms/ksh.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/ksh.git/commit/?id=da51c676393df7....
Change:
-%ifarch s390
Thanks.
Full change:
============
commit da51c676393df765d3829c5fae08450185e25939
Author: Siteshwar Vashisht <svashisht(a)redhat.com>
Date: Wed Apr 17 14:00:25 2019 +0200
Rebase to 2020.0.0-alpha1
* All the downstream patches have been upstreamed, so they are being
removed with this commit.
* It introduces alternatives to switch between different versions of
ksh.
Resolves: #1700777
diff --git a/.gitignore b/.gitignore
index 6be3080..2d4ea2b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -59,3 +59,4 @@ INIT.2010-07-01.tgz
/ast-ksh.2012-08-01.tgz
/INIT.2012-08-01.tgz
/ast-ksh.2012-08-01b.tgz
+/ksh-2020.0.0-alpha1.tar.gz
diff --git a/ksh-20070328-builtins.patch b/ksh-20070328-builtins.patch
deleted file mode 100644
index 061bf9a..0000000
--- a/ksh-20070328-builtins.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up ksh-20080202/src/cmd/ksh93/data/builtins.c.builtins
ksh-20080202/src/cmd/ksh93/data/builtins.c
---- ksh-20080202/src/cmd/ksh93/data/builtins.c.builtins 2008-10-01 09:24:46.000000000
+0200
-+++ ksh-20080202/src/cmd/ksh93/data/builtins.c 2008-10-01 09:24:58.000000000 +0200
-@@ -129,7 +129,6 @@ const struct shtable3 shtab_builtins[] =
- CMDLIST(dirname)
- CMDLIST(getconf)
- CMDLIST(head)
-- CMDLIST(mkdir)
- CMDLIST(logname)
- CMDLIST(cat)
- CMDLIST(cmp)
diff --git a/ksh-20080202-manfix.patch b/ksh-20080202-manfix.patch
deleted file mode 100644
index 8fe4225..0000000
--- a/ksh-20080202-manfix.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh.1.manfix ksh-20120801/src/cmd/ksh93/sh.1
---- ksh-20120801/src/cmd/ksh93/sh.1.manfix 2012-06-18 16:16:22.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh.1 2013-04-30 13:35:17.393909479 +0200
-@@ -39,7 +39,7 @@ ksh93, rksh93, pfksh93 \- KornShell, a s
- .B ksh93
- .\}
- [
--.B \(+-abcefhikmnoprstuvxBCDP
-+.B \(+-abcefhiknoprstuvxBCDP
- ] [
- .B \-R
- file ] [
-@@ -47,25 +47,6 @@ file ] [
- option ] .\|.\|. [
- .B \-
- ] [ arg .\|.\|. ]
--.br
--.if \nZ=0 \{\
--.B rsh
--.\}
--.if \nZ=1 \{\
--.B rksh
--.\}
--.if \nZ=2 \{\
--.B rksh93
--.\}
--[
--.B \(+-abcefhikmnoprstuvxBCD
--] [
--.B \-R
--file ] [
--.B \(+-o
--option ] .\|.\|. [
--.B \-
--] [ arg .\|.\|. ]
- .SH DESCRIPTION
- .if \nZ=0 .I Sh\^
- .if \nZ=1 .I Ksh\^
-@@ -7963,6 +7944,8 @@ option is used
- to generate a cross reference database
- that can be used by a separate utility
- to find definitions and references for variables and commands.
-+The filename argument specifies the generated database. A script file must be
-+provided on the command line as well.
- .PP
- The remaining options and arguments are described under the
- .B set
diff --git a/ksh-20100202-pathvar.patch b/ksh-20100202-pathvar.patch
deleted file mode 100644
index 5086499..0000000
--- a/ksh-20100202-pathvar.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff -up ksh-20100202/src/cmd/ksh93/sh.1.pathvar ksh-20100202/src/cmd/ksh93/sh.1
---- ksh-20100202/src/cmd/ksh93/sh.1.pathvar 2011-04-26 16:42:08.000000000 +0200
-+++ ksh-20100202/src/cmd/ksh93/sh.1 2011-04-27 09:09:00.315883280 +0200
-@@ -4025,13 +4025,9 @@ the directory containing the command.
- Alternative directory names are separated by
- a colon
- .RB ( : ).
--The default path is
--.B /bin:/usr/bin:
--(specifying
--.BR /bin ,
--.BR /usr/bin ,
--and the current directory
--in that order).
-+The default path is equal to
-+.BI getconf\ PATH
-+output.
- The current directory can be specified by
- two or more adjacent colons, or by a colon
- at the beginning or end of the path list.
diff --git a/ksh-20100621-fdstatus.patch b/ksh-20100621-fdstatus.patch
deleted file mode 100644
index 99abb55..0000000
--- a/ksh-20100621-fdstatus.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/io.c.fdstatus ksh-20120801/src/cmd/ksh93/sh/io.c
---- ksh-20120801/src/cmd/ksh93/sh/io.c.fdstatus 2013-07-04 18:01:27.187516655 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/io.c 2013-07-04 18:01:38.249607392 +0200
-@@ -1508,7 +1508,7 @@ int sh_redirect(Shell_t *shp,struct iono
- fn = fd;
- if(fd<10)
- {
-- if((fn=fcntl(fd,F_DUPFD,10)) < 0)
-+ if((fn=sh_fcntl(fd,F_DUPFD,10)) < 0)
- goto fail;
- if(fn>=shp->gd->lim.open_max && !sh_iovalidfd(shp,fn))
- goto fail;
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.fdstatus
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.fdstatus 2012-07-17 23:54:21.000000000
+0200
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2013-07-04 17:56:20.342000310 +0200
-@@ -122,7 +122,7 @@ void sh_subtmpfile(Shell_t *shp)
- register struct checkpt *pp = (struct checkpt*)shp->jmplist;
- register struct subshell *sp = subshell_data->pipe;
- /* save file descriptor 1 if open */
-- if((sp->tmpfd = fd = fcntl(1,F_DUPFD,10)) >= 0)
-+ if((sp->tmpfd = fd = sh_fcntl(1,F_DUPFD,10)) >= 0)
- {
- fcntl(fd,F_SETFD,FD_CLOEXEC);
- shp->fdstatus[fd] = shp->fdstatus[1]|IOCLEX;
-@@ -554,7 +554,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- sp->pwdfd = n;
- if(n<10)
- {
-- sp->pwdfd = fcntl(n,F_DUPFD,10);
-+ sp->pwdfd = sh_fcntl(n,F_DUPFD,10);
- close(n);
- }
- if(sp->pwdfd>0)
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.fdstatus
ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.fdstatus 2012-07-23 16:49:32.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2013-07-04 17:57:47.153712116 +0200
-@@ -116,7 +116,7 @@ static int iousepipe(Shell_t *shp)
- return(0);
- usepipe++;
- fcntl(subpipe[0],F_SETFD,FD_CLOEXEC);
-- subpipe[2] = fcntl(1,F_DUPFD,10);
-+ subpipe[2] = sh_fcntl(1,F_DUPFD,10);
- fcntl(subpipe[2],F_SETFD,FD_CLOEXEC);
- shp->fdstatus[subpipe[2]] = shp->fdstatus[1];
- close(1);
-@@ -3622,7 +3622,7 @@ static void coproc_init(Shell_t *shp, in
- sh_pipe(shp->cpipe);
- if((outfd=shp->cpipe[1]) < 10)
- {
-- int fd=fcntl(shp->cpipe[1],F_DUPFD,10);
-+ int fd=sh_fcntl(shp->cpipe[1],F_DUPFD,10);
- if(fd>=10)
- {
- shp->fdstatus[fd] = (shp->fdstatus[outfd]&~IOCLEX);
diff --git a/ksh-20100621-manfix3.patch b/ksh-20100621-manfix3.patch
deleted file mode 100644
index bced575..0000000
--- a/ksh-20100621-manfix3.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20100621/src/cmd/ksh93/sh.1.manfix3 ksh-20100621/src/cmd/ksh93/sh.1
---- ksh-20100621/src/cmd/ksh93/sh.1.manfix3 2013-05-02 13:07:51.180529762 +0200
-+++ ksh-20100621/src/cmd/ksh93/sh.1 2013-05-02 13:11:30.469327199 +0200
-@@ -7585,7 +7585,7 @@ file descriptor 2.
- If the
- .B \-i
- option is present or
--if the shell input and output are attached to a terminal (as told by
-+if the shell input and error output are attached to a terminal (as told by
- .IR tcgetattr (2)),
- then this shell is
- .IR interactive .
diff --git a/ksh-20100826-fixregr.patch b/ksh-20100826-fixregr.patch
deleted file mode 100644
index 87cb13c..0000000
--- a/ksh-20100826-fixregr.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/tests/builtins.sh.fixregr
ksh-20120801/src/cmd/ksh93/tests/builtins.sh
---- ksh-20120801/src/cmd/ksh93/tests/builtins.sh.fixregr 2012-07-16 17:23:56.000000000
+0200
-+++ ksh-20120801/src/cmd/ksh93/tests/builtins.sh 2012-08-08 12:29:00.733243019 +0200
-@@ -303,9 +303,9 @@ then err_exit "printf '%..*s' not workin
- fi
- [[ $(printf '%q\n') == '' ]] || err_exit 'printf "%q" with
missing arguments'
- # we won't get hit by the one second boundary twice, right?
--[[ $(printf '%T\n' now) == "$(date)" ]] ||
--[[ $(printf '%T\n' now) == "$(date)" ]] ||
--err_exit 'printf "%T" now'
-+[[ $(printf '%T\n' now | sed 's/GMT/UTC/') == "$(date)" ]] ||
-+[[ $(printf '%T\n' now | sed 's/GMT/UTC/') == "$(date)" ]] ||
-+err_exit 'printf "%T" now = '"$(printf '%T\n' now) !=
$(date)"
- behead()
- {
- read line
-diff -up ksh-20120801/src/cmd/ksh93/tests/locale.sh.fixregr
ksh-20120801/src/cmd/ksh93/tests/locale.sh
---- ksh-20120801/src/cmd/ksh93/tests/locale.sh.fixregr 2012-06-26 21:57:46.000000000
+0200
-+++ ksh-20120801/src/cmd/ksh93/tests/locale.sh 2012-08-08 12:29:20.039405240 +0200
-@@ -104,6 +104,7 @@ if (( $($SHELL -c $'export LC_ALL='$loca
- then LC_ALL=$locale $SHELL -c
b1=$'"\342\202\254\342\202\254\342\202\254\342\202\254w\342\202\254\342\202\254\342\202\254\342\202\254";
[[ ${b1:4:1} == w ]]' || err_exit 'multibyte ${var:offset:len} not working
correctly'
- fi
-
-+locale=en_US.UTF-8
- #$SHELL -c 'export LANG='$locale'; printf "\u[20ac]\u[20ac]" >
$tmp/two_euro_chars.txt'
- printf $'\342\202\254\342\202\254' > $tmp/two_euro_chars.txt
- exp="6 2 6"
-@@ -111,11 +112,11 @@ set -- $($SHELL -c "
- unset LC_CTYPE
- export LANG=$locale
- export LC_ALL=C
-- command wc -C < $tmp/two_euro_chars.txt
-+ command wc -m < $tmp/two_euro_chars.txt
- unset LC_ALL
-- command wc -C < $tmp/two_euro_chars.txt
-+ command wc -m < $tmp/two_euro_chars.txt
- export LC_ALL=C
-- command wc -C < $tmp/two_euro_chars.txt
-+ command wc -m < $tmp/two_euro_chars.txt
- ")
- got=$*
- [[ $got == $exp ]] || err_exit "command wc LC_ALL default failed -- expected
'$exp', got '$got'"
-@@ -134,6 +135,8 @@ set -- $($SHELL -c "
- got=$*
- [[ $got == $exp ]] || err_exit "builtin wc LC_ALL default failed -- expected
'$exp', got '$got'"
-
-+locale=C_EU.UTF-8
-+
- # multibyte char straddling buffer boundary
-
- {
-@@ -190,6 +193,7 @@ do exp=$1
- done
-
- # setocale(LC_ALL,"") after setlocale() initialization
-+locale=en_US.UTF-8
-
- printf 'f1\357\274\240f2\n' > input1
- printf 't2\357\274\240f1\n' > input2
-@@ -336,7 +340,7 @@ then LC_ALL=en_US.UTF-8
- [[ $(print -r -- "$x") == $'hello\u[20ac]\xee world' ]] || err_exit
'%q with unicode and non-unicode not working'
- if [[ $(whence od) ]]
- then got='68 65 6c 6c 6f e2 82 ac ee 20 77 6f 72 6c 64 0a'
-- [[ $(print -r -- "$x" | od -An -tx1) == "$got" ]] || err_exit
"incorrect string from printf %q"
-+ [[ $(print -r -- "$x" | od -An -tx1) =~ $got ]] || err_exit "incorrect
string from printf %q"
- fi
-
- fi
diff --git a/ksh-20120801-F_dupfd_cloexec.patch b/ksh-20120801-F_dupfd_cloexec.patch
deleted file mode 100644
index 7a034b3..0000000
--- a/ksh-20120801-F_dupfd_cloexec.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/io.c.orig ksh-20120801/src/cmd/ksh93/sh/io.c
---- ksh-20120801/src/cmd/ksh93/sh/io.c.orig 2015-08-12 11:35:36.882268954 -0300
-+++ ksh-20120801/src/cmd/ksh93/sh/io.c 2015-08-12 11:44:06.324587019 -0300
-@@ -2580,10 +2580,18 @@ int sh_fcntl(register int fd, int op, ..
- if(newfd>=0) switch(op)
- {
- case F_DUPFD:
-+#if F_dupfd_cloexec != F_DUPFD
-+ case F_dupfd_cloexec:
-+#endif
- if(shp->fdstatus[fd] == IOCLOSE)
- shp->fdstatus[fd] = 0;
- if(newfd>=shp->gd->lim.open_max)
- sh_iovalidfd(shp,newfd);
-+#if F_dupfd_cloexec != F_DUPFD
-+ if(op==F_dupfd_cloexec)
-+ shp->fdstatus[newfd] = (shp->fdstatus[fd]|IOCLEX);
-+ else
-+#endif
- shp->fdstatus[newfd] = (shp->fdstatus[fd]&~IOCLEX);
- if(fdnotify)
- (*fdnotify)(fd,newfd);
diff --git a/ksh-20120801-alarmifs.patch b/ksh-20120801-alarmifs.patch
deleted file mode 100644
index 88b0ba9..0000000
--- a/ksh-20120801-alarmifs.patch
+++ /dev/null
@@ -1,33 +0,0 @@
---- ksh-20120801/src/cmd/ksh93/sh/init.c 2014-12-10 20:11:17.693446084 -0200
-+++ ksh-20120801/src/cmd/ksh93/sh/init.c 2014-12-10 20:11:24.753442619 -0200
-@@ -576,6 +576,7 @@ static char* get_ifs(register Namval_t*
- shp->ifstable[' '] = shp->ifstable['\t'] = S_SPACE;
- shp->ifstable['\n'] = S_NL;
- }
-+ shp->ifstable[0] = S_EOF;
- }
- return(value);
- }
---- ksh-20120801/src/cmd/ksh93/bltins/alarm.c 2014-12-18 12:03:39.198461933 -0200
-+++ ksh-20120801/src/cmd/ksh93/bltins/alarm.c 2014-12-18 12:04:32.464421268 -0200
-@@ -130,6 +130,7 @@ void sh_timetraps(Shell_t *shp)
- {
- register struct tevent *tp, *tpnext;
- register struct tevent *tptop;
-+ char ifstable[256];
- while(1)
- {
- shp->sigflag[SIGALRM] &= ~SH_SIGALRM;
-@@ -141,7 +142,11 @@ void sh_timetraps(Shell_t *shp)
- {
- tp->flags &= ~L_FLAG;
- if(tp->action)
-+ {
-+ memcpy(ifstable,shp->ifstable,sizeof(ifstable));
- sh_fun(tp->action,tp->node,(char**)0);
-+ memcpy(shp->ifstable,ifstable,sizeof(ifstable));
-+ }
- tp->flags &= ~L_FLAG;
- if(!tp->flags)
- {
-
diff --git a/ksh-20120801-argvfix.patch b/ksh-20120801-argvfix.patch
deleted file mode 100644
index b0e1a78..0000000
--- a/ksh-20120801-argvfix.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/main.c.fixargs
ksh-20120801/src/cmd/ksh93/sh/main.c
---- ksh-20120801/src/cmd/ksh93/sh/main.c.fixargs 2013-12-31 11:32:14.917874134 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/main.c 2013-12-31 11:32:58.028847126 +0100
-@@ -757,7 +757,7 @@ static void fixargs(char **argv, int mod
- offset += size;
- buff[offset++] = ' ';
- }
-- buff[offset-1] = 0;
-+ memset(&buff[offset - 1], 0, command_len - offset + 1);
- # ifdef PSTAT
- un.pst_command = stakptr(0);
- pstat(PSTAT_SETCMD,un,0,0,0);
-
diff --git a/ksh-20120801-assoc-unset-leak.patch b/ksh-20120801-assoc-unset-leak.patch
deleted file mode 100644
index 1af7d16..0000000
--- a/ksh-20120801-assoc-unset-leak.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/name.c.orig ksh-20120801/src/cmd/ksh93/sh/name.c
---- ksh-20120801/src/cmd/ksh93/sh/name.c.orig 2015-02-10 17:15:37.180783550 -0200
-+++ ksh-20120801/src/cmd/ksh93/sh/name.c 2015-02-10 18:25:51.726228437 -0200
-@@ -1298,7 +1298,16 @@ void nv_delete(Namval_t* np, Dt_t *root,
- if(dtdelete(root,np))
- {
- if(!(flags&NV_NOFREE) && ((flags&NV_FUNCTION) ||
!nv_subsaved(np,flags&NV_TABLE)))
-+ {
-+ Namarr_t *ap;
-+ if(nv_isarray(np) && np->nvfun && (ap=nv_arrayptr(np)) &&
array_assoc(ap)) {
-+ while(nv_associative(np,0,NV_ANEXT))
-+ nv_associative(np, 0, NV_ADELETE);
-+ nv_associative(np, 0, NV_AFREE);
-+ free((void*)np->nvfun);
-+ }
- free((void*)np);
-+ }
- }
- #if 0
- else
diff --git a/ksh-20120801-badgcc.patch b/ksh-20120801-badgcc.patch
deleted file mode 100644
index cd26316..0000000
--- a/ksh-20120801-badgcc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff -up ksh-20120801/src/lib/libast/string/strdup.c.badgcc
ksh-20120801/src/lib/libast/string/strdup.c
---- ksh-20120801/src/lib/libast/string/strdup.c.badgcc 2012-05-21 15:04:46.000000000
+0200
-+++ ksh-20120801/src/lib/libast/string/strdup.c 2015-06-17 10:12:52.693922581 +0200
-@@ -50,11 +50,18 @@ __STDPP__directive pragma pp:nohide strd
- #define extern __EXPORT__
- #endif
-
-+#pragma GCC push_options
-+#pragma GCC optimize ("O0")
-+
-+
- extern char*
- strdup(register const char* s)
- {
- register char* t;
- register int n;
-
- return (s && (t = oldof(0, char, n = strlen(s) + 1, 0))) ? (char*)memcpy(t, s,
n) : (char*)0;
- }
-+
-+#pragma GCC pop_options
-+
diff --git a/ksh-20120801-ccflags.patch b/ksh-20120801-ccflags.patch
deleted file mode 100644
index b95db66..0000000
--- a/ksh-20120801-ccflags.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/src/cmd/ksh93/Mamfile b/src/cmd/ksh93/Mamfile
---- a/src/cmd/ksh93/Mamfile
-+++ b/src/cmd/ksh93/Mamfile
-@@ -1111,7 +1111,7 @@ prev include/defs.h implicit
- done sh/trestore.c
- meta trestore.o %.c>%.o sh/trestore.c trestore
- prev sh/trestore.c
--exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} ${SHOPT_BASH+-DSHOPT_BASH=${SHOPT_BASH}}
${SHOPT_SYSRC+-DSHOPT_SYSRC=${SHOPT_SYSRC}} ${SHOPT_ACCT+-DSHOPT_ACCT=${SHOPT_ACCT}}
${SHOPT_SPAWN+-DSHOPT_SPAWN=${SHOPT_SPAWN}}
${SH_CMDLIB_DIR+-DSH_CMDLIB_DIR=${SH_CMDLIB_DIR}} ${SH_DICT+-DSH_DICT=${SH_DICT}}
${SHOPT_P_SUID+-DSHOPT_P_SUID=${SHOPT_P_SUID}}
${SHOPT_REGRESS+-DSHOPT_REGRESS=${SHOPT_REGRESS}} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DKSHELL -D_API_ast=20100309 -D_PACKAGE_ast -DSHOPT_SUID_EXEC
-DSHOPT_BRACEPAT -DSHOPT_STATS -DSHOPT_NAMESPACE -DSHOPT_COSHELL -DSHOPT_PFSH
-DSHOPT_HISTEXPAND -DERROR_CONTEXT_T=Error_context_t -DSHOPT_FIXEDARRAY -DSHOPT_ESH
-DSHOPT_MULTIBYTE -c sh/trestore.c
-+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} ${SHOPT_BASH+-DSHOPT_BASH=${SHOPT_BASH}}
${SHOPT_SYSRC+-DSHOPT_SYSRC=${SHOPT_SYSRC}} ${SHOPT_ACCT+-DSHOPT_ACCT=${SHOPT_ACCT}}
${SHOPT_SPAWN+-DSHOPT_SPAWN=${SHOPT_SPAWN}}
${SH_CMDLIB_DIR+-DSH_CMDLIB_DIR=${SH_CMDLIB_DIR}} ${SH_DICT+-DSH_DICT=${SH_DICT}}
${SHOPT_P_SUID+-DSHOPT_P_SUID=${SHOPT_P_SUID}}
${SHOPT_REGRESS+-DSHOPT_REGRESS=${SHOPT_REGRESS}} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DKSHELL -D_API_ast=20100309 -D_PACKAGE_ast -DSHOPT_SUID_EXEC
-DSHOPT_BRACEPAT -DSHOPT_STATS -DSHOPT_NAMESPACE -DSHOPT_COSHELL -DSHOPT_PFSH
-DSHOPT_HISTEXPAND -DERROR_CONTEXT_T=Error_context_t -DSHOPT_FIXEDARRAY -DSHOPT_ESH
-DSHOPT_MULTIBYTE -c sh/trestore.c
- done trestore.o generated
- make waitevent.o
- make sh/waitevent.c
-@@ -1199,7 +1199,7 @@ prev ${PACKAGE_ast_INCLUDE}/ast_standards.h implicit
- done data/strdata.c
- meta strdata.o %.c>%.o data/strdata.c strdata
- prev data/strdata.c
--exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} ${SHOPT_BASH+-DSHOPT_BASH=${SHOPT_BASH}}
${SH_CMDLIB_DIR+-DSH_CMDLIB_DIR=${SH_CMDLIB_DIR}} ${SH_DICT+-DSH_DICT=${SH_DICT}}
${SHOPT_P_SUID+-DSHOPT_P_SUID=${SHOPT_P_SUID}}
${SHOPT_REGRESS+-DSHOPT_REGRESS=${SHOPT_REGRESS}} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_STATS -DSHOPT_NAMESPACE -DSHOPT_COSHELL -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-D_BLD_shell -D_API_ast=20100309 -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t
-DSHOPT_FIXEDARRAY -DSHOPT_ESH -DSHOPT_MULTIBYTE -c data/strdata.c
-+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} ${SHOPT_BASH+-DSHOPT_BASH=${SHOPT_BASH}}
${SH_CMDLIB_DIR+-DSH_CMDLIB_DIR=${SH_CMDLIB_DIR}} ${SH_DICT+-DSH_DICT=${SH_DICT}}
${SHOPT_P_SUID+-DSHOPT_P_SUID=${SHOPT_P_SUID}}
${SHOPT_REGRESS+-DSHOPT_REGRESS=${SHOPT_REGRESS}} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_STATS -DSHOPT_NAMESPACE -DSHOPT_COSHELL -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-D_BLD_shell -D_API_ast=20100309 -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t
-DSHOPT_FIXEDARRAY -DSHOPT_ESH -DSHOPT_MULTIBYTE -c data/strdata.c
- done strdata.o generated
- make testops.o
- make data/testops.c
diff --git a/ksh-20120801-cdfix.patch b/ksh-20120801-cdfix.patch
deleted file mode 100644
index 59265dd..0000000
--- a/ksh-20120801-cdfix.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix
ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c
---- ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix 2013-02-01 16:04:55.507150242 +0100
-+++ ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c 2013-02-01 16:06:39.361007641 +0100
-@@ -214,7 +214,10 @@ int b_cd(int argc, char *argv[],Shbltin_
- if(*++dp=='.' && (*++dp=='/' || *dp==0))
- n++;
- else if(*dp && *dp!='/')
-+ {
-+ dp--;
- break;
-+ }
- if(*dp==0)
- break;
- }
diff --git a/ksh-20120801-cdfix2.patch b/ksh-20120801-cdfix2.patch
deleted file mode 100644
index 84bb491..0000000
--- a/ksh-20120801-cdfix2.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix2
ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c
---- ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix2 2013-02-01 16:46:50.441771371
+0100
-+++ ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c 2013-02-01 16:57:43.241784024 +0100
-@@ -61,6 +61,7 @@ int sh_diropenat(Shell_t *shp, int dir,
- {
- int fd,shfd;
- int savederrno=errno;
-+ struct stat fs;
- #ifndef AT_FDCWD
- NOT_USED(dir);
- #endif
-@@ -133,6 +134,13 @@ int sh_diropenat(Shell_t *shp, int dir,
-
- if(fd < 0)
- return fd;
-+
-+ if (!fstat(fd, &fs) && !S_ISDIR(fs.st_mode))
-+ {
-+ close(fd);
-+ errno = ENOTDIR;
-+ return -1;
-+ }
-
- /* Move fd to a number > 10 and *register* the fd number with the shell */
- shfd = sh_fcntl(fd, F_dupfd_cloexec, 10);
diff --git a/ksh-20120801-cdfix3.patch b/ksh-20120801-cdfix3.patch
deleted file mode 100644
index 7e47f71..0000000
--- a/ksh-20120801-cdfix3.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix3
ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c
---- ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix3 2014-06-20 12:39:02.757407689
+0200
-+++ ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c 2014-06-20 12:40:19.530998070 +0200
-@@ -290,7 +290,7 @@ int b_cd(int argc, char *argv[],Shbltin_
- if(newdirfd >=0)
- {
- /* chdir for directories on HSM/tapeworms may take minutes */
-- if(fchdir(newdirfd) >= 0)
-+ if((rval=fchdir(newdirfd)) >= 0)
- {
- if(shp->pwdfd >= 0)
- sh_close(shp->pwdfd);
diff --git a/ksh-20120801-cdfork.patch b/ksh-20120801-cdfork.patch
deleted file mode 100644
index c82cb4c..0000000
--- a/ksh-20120801-cdfork.patch
+++ /dev/null
@@ -1,40 +0,0 @@
---- ksh-20120801/src/cmd/ksh93/sh/path.c 2014-09-01 15:08:06.738969962 -0300
-+++ ksh-20120801/src/cmd/ksh93/sh/path.c 2014-09-01 15:13:51.321459978 -0300
-@@ -229,13 +229,12 @@ static pid_t path_xargs(Shell_t *shp,con
- /*
- * make sure PWD is set up correctly
- * Return the present working directory
-- * Invokes getcwd() if flag==0 and if necessary
-+ * Invokes getcwd() if necessary
- * Sets the PWD variable to this value
- */
- char *path_pwd(Shell_t *shp,int flag)
- {
- register char *cp;
-- register char *dfault = (char*)e_dot;
- register int count = 0;
- if(shp->pwd)
- return((char*)shp->pwd);
-@@ -254,11 +253,6 @@ char *path_pwd(Shell_t *shp,int flag)
- cp = "/";
- break;
- case 3:
-- cp = (char*)e_crondir;
-- if(flag) /* skip next case when non-zero flag */
-- ++count;
-- break;
-- case 4:
- {
- if(cp=getcwd(NIL(char*),0))
- {
-@@ -269,8 +263,8 @@ char *path_pwd(Shell_t *shp,int flag)
- }
- break;
- }
-- case 5:
-+ case 4:
-- return(dfault);
-+ return((char*)e_dot);
- }
- if(cp && *cp=='/' && test_inode(cp,e_dot))
- break;
diff --git a/ksh-20120801-covsfix.patch b/ksh-20120801-covsfix.patch
deleted file mode 100644
index c64e2a7..0000000
--- a/ksh-20120801-covsfix.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/init.c.covsfix
ksh-20120801/src/cmd/ksh93/sh/init.c
---- ksh-20120801/src/cmd/ksh93/sh/init.c.covsfix 2013-07-22 17:41:34.674054068 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/init.c 2013-07-22 17:42:50.761361921 +0200
-@@ -1237,9 +1237,11 @@ static void put_mode(Namval_t* np, const
- mode = *(double*)val;
- }
- else
-+ {
- mode = strperm(val, &last,0);
-- if(*last)
-- errormsg(SH_DICT,ERROR_exit(1),"%s: invalid mode string",val);
-+ if(*last)
-+ errormsg(SH_DICT,ERROR_exit(1),"%s: invalid mode string",val);
-+ }
- nv_putv(np,(char*)&mode,NV_INTEGER,nfp);
- }
- else
-diff -up ksh-20120801/src/cmd/ksh93/sh/io.c.covsfix ksh-20120801/src/cmd/ksh93/sh/io.c
---- ksh-20120801/src/cmd/ksh93/sh/io.c.covsfix 2013-07-22 17:06:30.282927080 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/io.c 2013-07-22 17:08:49.645721280 +0200
-@@ -954,6 +954,7 @@ int sh_pipe(register int pv[])
- socklen_t slen;
- if ((pv[out] = socket (AF_INET, SOCK_STREAM, 0)) < 0)
- errormsg(SH_DICT,ERROR_system(1),e_pipe);
-+ memset(&sin.sin_zero, 0, sizeof(sin.sin_zero));
- do
- {
- sin.sin_family = AF_INET;
-diff -up ksh-20120801/src/cmd/ksh93/sh/name.c.covsfix
ksh-20120801/src/cmd/ksh93/sh/name.c
---- ksh-20120801/src/cmd/ksh93/sh/name.c.covsfix 2013-07-22 17:40:31.644635604 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/name.c 2013-07-22 17:41:15.828227073 +0200
-@@ -3094,6 +3094,7 @@ void nv_newattr (register Namval_t *np,
- if(!mp)
- nv_putval (np, cp, NV_RDONLY);
- free(cp);
-+ cp = NULL;
- }
- }
- while(ap && nv_nextsub(np));
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.covsfix
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.covsfix 2013-07-22 17:46:15.607533423 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2013-07-22 17:48:36.739290968 +0200
-@@ -205,7 +205,14 @@ void sh_subfork(void)
- shp->comsub = 0;
- SH_SUBSHELLNOD->nvalue.s = 0;
- sp->subpid=0;
-- shp->st.trapcom[0] = (comsub==2?NULL:trap);
-+ if (comsub==2)
-+ {
-+ shp->st.trapcom[0] = NULL;
-+ if(trap)
-+ free((void*)trap);
-+ }
-+ else
-+ shp->st.trapcom[0] = (comsub==2?NULL:trap);
- shp->savesig = 0;
- }
- }
diff --git a/ksh-20120801-crash.patch b/ksh-20120801-crash.patch
deleted file mode 100644
index 37b7962..0000000
--- a/ksh-20120801-crash.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/include/jobs.h.crash
ksh-20120801/src/cmd/ksh93/include/jobs.h
---- ksh-20120801/src/cmd/ksh93/include/jobs.h.crash 2014-07-22 11:48:57.205062905 +0200
-+++ ksh-20120801/src/cmd/ksh93/include/jobs.h 2014-07-22 11:48:57.243062711 +0200
-@@ -118,6 +118,7 @@ struct jobs
- char jobcontrol; /* turned on for real job control */
- char waitsafe; /* wait will not block */
- char waitall; /* wait for all jobs in pipe */
-+ char hack1_waitall;
- char toclear; /* job table needs clearing */
- unsigned char *freejobs; /* free jobs numbers */
- #if SHOPT_COSHELL
-diff -up ksh-20120801/src/cmd/ksh93/sh/jobs.c.crash ksh-20120801/src/cmd/ksh93/sh/jobs.c
---- ksh-20120801/src/cmd/ksh93/sh/jobs.c.crash 2014-07-22 11:48:57.190062982 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/jobs.c 2014-07-22 11:48:57.243062711 +0200
-@@ -1957,6 +1957,7 @@ again:
- {
- count = bp->count;
- jp = bp->list;
-+ jpold = 0;
- goto again;
- }
- if(jp)
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.crash
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.crash 2014-07-22 11:48:57.234062758 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2014-07-22 11:54:04.164491483 +0200
-@@ -492,6 +492,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- struct sh_scoped savst;
- struct dolnod *argsav=0;
- int argcnt;
-+ int pipefail = 0;
- memset((char*)sp, 0, sizeof(*sp));
- sfsync(shp->outpool);
- sh_sigcheck(shp);
-@@ -541,7 +542,10 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- sp->comsub = shp->comsub;
- shp->subshare = comsub==2 || (comsub==1 && sh_isoption(SH_SUBSHARE));
- if(comsub)
-+ {
- shp->comsub = comsub;
-+ job.hack1_waitall=(comsub==1);
-+ }
- sp->shpwdfd=-1;
- if(!comsub || !shp->subshare)
- {
-@@ -648,6 +652,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- }
- else
- {
-+ job.hack1_waitall=0;
- if(comsub!=1 && shp->spid)
- {
- job_wait(shp->spid);
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.crash ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.crash 2014-07-22 11:48:57.228062787 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2014-07-22 11:48:57.245062700 +0200
-@@ -2125,7 +2125,7 @@ int sh_exec(register const Shnode_t *t,
- memset(exitval,0,job.waitall*sizeof(int));
- }
- else
-- job.waitall |= !pipejob && sh_isstate(SH_MONITOR);
-+ job.waitall |= job.hack1_waitall || !pipejob && sh_isstate(SH_MONITOR);
- job_lock();
- nlock++;
- do
diff --git a/ksh-20120801-dotdoublefree.patch b/ksh-20120801-dotdoublefree.patch
deleted file mode 100644
index bf29cb1..0000000
--- a/ksh-20120801-dotdoublefree.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/xec.c b/src/cmd/ksh93/sh/xec.c
-index 1ba7347..ab745d4 100644
---- a/src/cmd/ksh93/sh/xec.c
-+++ b/src/cmd/ksh93/sh/xec.c
-@@ -640,7 +640,11 @@ int sh_eval(register Sfio_t *iop, int mode)
- if(lineno)
- shp->inlineno = lineno;
- if(io_save)
-+ {
- sfclose(io_save);
-+ io_save = 0;
-+ }
-+
- sh_freeup(shp);
- shp->st.staklist = saveslp;
- shp->fn_reset = 0;
---
-2.9.3
-
diff --git a/ksh-20120801-emptyarrayinit.patch b/ksh-20120801-emptyarrayinit.patch
deleted file mode 100644
index c888b31..0000000
--- a/ksh-20120801-emptyarrayinit.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- ksh-20120801/src/cmd/ksh93/sh/array.c 2014-12-11 16:39:34.253860675 -0200
-+++ ksh-20120801/src/cmd/ksh93/sh/array.c 2014-12-11 16:39:40.794857083 -0200
-@@ -1003,7 +1003,7 @@ Namarr_t *nv_setarray(Namval_t *np, void
- ap->nelem = nelem;
- ap->fun = fun;
- nv_onattr(np,NV_ARRAY);
-- if(fp || value)
-+ if(fp || (value && value != Empty))
- {
- nv_putsub(np, "0", ARRAY_ADD);
- if(value)
diff --git a/ksh-20120801-fd2lost.patch b/ksh-20120801-fd2lost.patch
deleted file mode 100644
index 0605f6e..0000000
--- a/ksh-20120801-fd2lost.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/macro.c.fd2lost
ksh-20120801/src/cmd/ksh93/sh/macro.c
---- ksh-20120801/src/cmd/ksh93/sh/macro.c.fd2lost 2014-01-22 16:23:21.211658984 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/macro.c 2014-01-22 16:23:21.243658703 +0100
-@@ -391,7 +391,7 @@ void sh_machere(Shell_t *shp,Sfio_t *inf
- break;
- }
- case S_PAR:
-- comsubst(mp,(Shnode_t*)0,1);
-+ comsubst(mp,(Shnode_t*)0,3);
- break;
- case S_EOF:
- if((c=fcfill()) > 0)
-@@ -1165,7 +1165,7 @@ retry1:
- case S_PAR:
- if(type)
- goto nosub;
-- comsubst(mp,(Shnode_t*)0,1);
-+ comsubst(mp,(Shnode_t*)0,3);
- return(1);
- case S_DIG:
- var = 0;
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.fd2lost
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.fd2lost 2014-01-22 16:23:21.222658887 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2014-01-22 16:23:21.243658703 +0100
-@@ -122,7 +122,8 @@ void sh_subtmpfile(Shell_t *shp)
- else if(errno!=EBADF)
- errormsg(SH_DICT,ERROR_system(1),e_toomany);
- /* popping a discipline forces a /tmp file create */
-- sfdisc(sfstdout,SF_POPDISC);
-+ if(shp->comsub != 1)
-+ sfdisc(sfstdout,SF_POPDISC);
- if((fd=sffileno(sfstdout))<0)
- {
- /* unable to create the /tmp file so use a pipe */
-@@ -635,6 +636,13 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- }
- else
- {
-+ if(comsub!=1 && shp->spid)
-+ {
-+ job_wait(shp->spid);
-+ if(shp->pipepid==shp->spid)
-+ shp->spid = 0;
-+ shp->pipepid = 0;
-+ }
- /* move tmp file to iop and restore sfstdout */
- iop = sfswap(sfstdout,NIL(Sfio_t*));
- if(!iop)
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.fd2lost ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.fd2lost 2014-01-22 16:23:21.237658756 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2014-01-22 16:38:36.374666019 +0100
-@@ -1756,6 +1756,8 @@ int sh_exec(register const Shnode_t *t,
- nlock--;
- job_unlock();
- }
-+ if(shp->subshell)
-+ shp->spid = parent;
- if(type&FPCL)
- sh_close(shp->inpipe[0]);
- if(type&(FCOOP|FAMP))
-@@ -1771,7 +1773,11 @@ int sh_exec(register const Shnode_t *t,
- if(shp->pipepid)
- shp->pipepid = parent;
- else
-+ {
- job_wait(parent);
-+ if(parent==shp->spid)
-+ shp->spid = 0;
-+ }
- if(shp->topfd > topfd)
- sh_iorestore(shp,topfd,0);
- if(usepipe && tsetio && subdup && unpipe)
diff --git a/ksh-20120801-filecomsubst.patch b/ksh-20120801-filecomsubst.patch
deleted file mode 100644
index 676cc27..0000000
--- a/ksh-20120801-filecomsubst.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/io.c.tryfix01 ksh-20120801/src/cmd/ksh93/sh/io.c
---- ksh-20120801/src/cmd/ksh93/sh/io.c.tryfix01 2014-02-26 16:15:52.355391420 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/io.c 2014-02-26 16:23:55.588148801 +0100
-@@ -1326,6 +1326,7 @@ int sh_redirect(Shell_t *shp,struct iono
- if(flag==SH_SHOWME)
- goto traceit;
- fd=sh_chkopen(fname);
-+ fd=sh_iomovefd(fd);
- }
- else if(sh_isoption(SH_RESTRICTED))
- errormsg(SH_DICT,ERROR_exit(1),e_restricted,fname);
diff --git a/ksh-20120801-forkbomb.patch b/ksh-20120801-forkbomb.patch
deleted file mode 100644
index 7a1a5c1..0000000
--- a/ksh-20120801-forkbomb.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/fault.c.forkbomb
ksh-20120801/src/cmd/ksh93/sh/fault.c
---- ksh-20120801/src/cmd/ksh93/sh/fault.c.forkbomb 2013-04-30 16:20:40.237490109 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/fault.c 2013-04-30 16:21:49.961068778 +0200
-@@ -519,7 +519,7 @@ void sh_exit(register int xno)
- if(pp && pp->mode>1)
- cursig = -1;
- #ifdef SIGTSTP
-- if(shp->trapnote&SH_SIGTSTP)
-+ if((shp->trapnote&SH_SIGTSTP) && job.jobcontrol)
- {
- /* ^Z detected by the shell */
- shp->trapnote = 0;
diff --git a/ksh-20120801-fununset.patch b/ksh-20120801-fununset.patch
deleted file mode 100644
index 1f5cb17..0000000
--- a/ksh-20120801-fununset.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.fununset
ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.fununset 2014-06-16 14:21:09.293513844 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2014-06-16 14:21:09.309513760 +0200
-@@ -3570,7 +3570,7 @@ static void sh_funct(Shell_t *shp,Namval
- #endif
- nv_putval(SH_PATHNAMENOD,shp->st.filename,NV_NOFREE);
- shp->pipepid = pipepid;
-- np->nvalue.rp->running -= 2;
-+ if (np->nvalue.rp) np->nvalue.rp->running -= 2;
- }
-
- /*
diff --git a/ksh-20120801-glibc-build-fix.patch b/ksh-20120801-glibc-build-fix.patch
deleted file mode 100644
index 28be43b..0000000
--- a/ksh-20120801-glibc-build-fix.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-diff --git a/src/lib/libast/features/stdio b/src/lib/libast/features/stdio
---- a/src/lib/libast/features/stdio
-+++ b/src/lib/libast/features/stdio
-@@ -6,6 +6,8 @@ cat{
- #define _FILE_DEFINED 1
- #define _FILE_defined 1
- #define _FILEDEFED 1
-+ #define __FILE_defined 1
-+ #define ____FILE_defined 1
-
- #ifndef __FILE_TAG
- #define __FILE_TAG _sfio_s
-diff --git a/src/lib/libast/include/ast.h b/src/lib/libast/include/ast.h
-index ebf82d7..f4bbe6d 100644
---- a/src/lib/libast/include/ast.h
-+++ b/src/lib/libast/include/ast.h
-@@ -59,9 +59,21 @@ struct _sfio_s;
- #ifndef __FILE_typedef
- #define __FILE_typedef 1
- #endif
-+#ifndef _FILE_DEFINED
-+#define _FILE_DEFINED 1
-+#endif
-+#ifndef _FILE_defined
-+#define _FILE_defined 1
-+#endif
- #ifndef _FILEDEFED
- #define _FILEDEFED 1
- #endif
-+#ifndef __FILE_defined
-+#define __FILE_defined 1
-+#endif
-+#ifndef ____FILE_defined
-+#define ____FILE_defined 1
-+#endif
- #endif
-
- /*
diff --git a/ksh-20120801-heresub.patch b/ksh-20120801-heresub.patch
deleted file mode 100644
index 880071c..0000000
--- a/ksh-20120801-heresub.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/lex.c.heresub ksh-20120801/src/cmd/ksh93/sh/lex.c
---- ksh-20120801/src/cmd/ksh93/sh/lex.c.heresub 2014-05-21 16:48:42.635700984 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/lex.c 2014-05-21 16:48:42.678700772 +0200
-@@ -1557,6 +1557,7 @@ static int comsub(register Lex_t *lp, in
- {
- register int n,c,count=1;
- register int line=lp->sh->inlineno;
-+ struct ionod *inheredoc = lp->heredoc;
- char *first,*cp=fcseek(0),word[5];
- int off, messages=0, assignok=lp->assignok, csub;
- struct lexstate save;
-@@ -1683,7 +1684,7 @@ done:
- lp->lexd.dolparen--;
- lp->lex = save;
- lp->assignok = (endchar(lp)==RBRACT?assignok:0);
-- if(lp->heredoc)
-+ if(lp->heredoc && !inheredoc)
-
errormsg(SH_DICT,ERROR_exit(SYNBAD),e_lexsyntax5,lp->sh->inlineno,lp->heredoc->ioname);
- return(messages);
- }
-diff -up ksh-20120801/src/cmd/ksh93/sh/macro.c.heresub
ksh-20120801/src/cmd/ksh93/sh/macro.c
---- ksh-20120801/src/cmd/ksh93/sh/macro.c.heresub 2014-05-21 16:48:42.650700910 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/macro.c 2014-05-21 16:48:42.678700772 +0200
-@@ -2085,7 +2085,7 @@ static void comsubst(Mac_t *mp,register
- }
- sfputc(stkp,c);
- }
-- sfputc(stkp,' ');
-+ sfputc(stkp,'\n');
- c = stktell(stkp);
- str=stkfreeze(stkp,1);
- /* disable verbose and don't save in history file */
diff --git a/ksh-20120801-iso8859.patch b/ksh-20120801-iso8859.patch
deleted file mode 100644
index 8f3a355..0000000
--- a/ksh-20120801-iso8859.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/fcin.c b/src/cmd/ksh93/sh/fcin.c
-index ea6ea6b..08c1f2a 100644
---- a/src/cmd/ksh93/sh/fcin.c
-+++ b/src/cmd/ksh93/sh/fcin.c
-@@ -150,63 +150,19 @@ extern void fcrestore(Fcin_t *fp)
- _Fcin = *fp;
- }
-
--/* for testing purposes with small buffers */
--#if defined(IOBSIZE) && (IOBSIZE < 2*MB_LEN_MAX)
--# undef MB_LEN_MAX
--# define MB_LEN_MAX (IOBSIZE/2)
--#endif
--
--struct Extra
--{
-- unsigned char buff[2*MB_LEN_MAX];
-- unsigned char *next;
--};
--
- int _fcmbget(short *len)
- {
-- static struct Extra extra;
-- register int i, c, n;
-- if(_Fcin.fcleft)
-- {
-- if((c = mbsize(extra.next)) < 0)
-- c = 1;
-- if((_Fcin.fcleft -= c) <=0)
-- {
-- _Fcin.fcptr = (unsigned char*)fcfirst() - _Fcin.fcleft;
-- _Fcin.fcleft = 0;
-- }
-- *len = c;
-- if(c==1)
-- c = *extra.next++;
-- else if(c==0)
-- _Fcin.fcleft = 0;
-- else
-- c = mbchar(extra.next);
-- return(c);
-- }
-- switch(*len = mbsize(_Fcin.fcptr))
-+ register int c;
-+ switch (*len = mbsize(_Fcin.fcptr))
- {
-- case -1:
-- if(_Fcin._fcfile && (n=(_Fcin.fclast-_Fcin.fcptr)) < MB_LEN_MAX)
-- {
-- memcpy(extra.buff, _Fcin.fcptr, n);
-- _Fcin.fcptr = _Fcin.fclast;
-- for(i=n; i < MB_LEN_MAX+n; i++)
-- {
-- if((extra.buff[i] = fcgetc(c))==0)
-- break;
-- }
-- _Fcin.fcleft = n;
-- extra.next = extra.buff;
-- return(fcmbget(len));
-- }
-+ case -1:
- *len = 1;
- /* fall through */
-- case 0:
-- case 1:
-+ case 0:
-+ case 1:
- c=fcget();
- break;
-- default:
-+ default:
- c = mbchar(_Fcin.fcptr);
- }
- return(c);
diff --git a/ksh-20120801-jobwait-sigstop.patch b/ksh-20120801-jobwait-sigstop.patch
deleted file mode 100644
index 1749288..0000000
--- a/ksh-20120801-jobwait-sigstop.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/jobs.c b/src/cmd/ksh93/sh/jobs.c
---- a/src/cmd/ksh93/sh/jobs.c
-+++ b/src/cmd/ksh93/sh/jobs.c
-@@ -1579,6 +1579,7 @@ int job_wait(register pid_t pid)
- if( pw->p_exit!=SIGTTIN && pw->p_exit!=SIGTTOU)
- break;
-
-+ tcsetpgrp(JOBTTY,pw->p_pgrp);
- killpg(pw->p_pgrp,SIGCONT);
- }
- else /* ignore stop when non-interactive */
diff --git a/ksh-20120801-kia.patch b/ksh-20120801-kia.patch
deleted file mode 100644
index 9b4b972..0000000
--- a/ksh-20120801-kia.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/parse.c b/src/cmd/ksh93/sh/parse.c
-index d139389..5a02af7 100644
---- a/src/cmd/ksh93/sh/parse.c
-+++ b/src/cmd/ksh93/sh/parse.c
-@@ -2032,6 +2032,7 @@ unsigned long kiaentity(Lex_t *lexp,const char *name,int len,int
type,int first,
- else
- sfputr(stkp,name,0);
- }
-+ sfputc(stkp,'\0');
- np = nv_search(stakptr(offset),lexp->entity_tree,NV_ADD);
- stkseek(stkp,offset);
- np->nvalue.i = pkind;
diff --git a/ksh-20120801-kshmfix.patch b/ksh-20120801-kshmfix.patch
deleted file mode 100644
index cc68406..0000000
--- a/ksh-20120801-kshmfix.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/main.c.monintoron
ksh-20120801/src/cmd/ksh93/sh/main.c
---- ksh-20120801/src/cmd/ksh93/sh/main.c.monintoron 2013-05-31 10:15:02.738828102 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/main.c 2013-05-31 10:15:36.057095262 +0200
-@@ -406,10 +406,10 @@ static void exfile(register Shell_t *shp
- {
- buff.mode = SH_JMPEXIT;
- sh_onoption(SH_TRACKALL);
-- sh_offoption(SH_MONITOR);
- }
- sh_offstate(SH_INTERACTIVE);
-- sh_offstate(SH_MONITOR);
-+ if(sh_isoption(SH_MONITOR))
-+ sh_onstate(SH_MONITOR);
- sh_offstate(SH_HISTORY);
- sh_offoption(SH_HISTORY);
- }
-diff -up ksh-20120801/src/cmd/ksh93/sh/jobs.c.orig ksh-20120801/src/cmd/ksh93/sh/jobs.c
---- ksh-20120801/src/cmd/ksh93/sh/jobs.c.orig 2013-05-31 10:12:28.358590452 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/jobs.c 2013-05-31 10:16:51.203697890 +0200
-@@ -548,7 +548,7 @@ int job_reap(register int sig)
- {
- px = job_byjid((int)pw->p_job);
- for(; px && (px->p_flag&P_DONE); px=px->p_nxtproc);
-- if(!px)
-+ if(!px && sh_isoption(SH_INTERACTIVE))
- tcsetpgrp(JOBTTY,job.mypid);
- }
- #ifndef SHOPT_BGX
-@@ -842,10 +842,11 @@ static void job_set(register struct proc
-
- static void job_reset(register struct process *pw)
- {
-+ Shell_t *shp = pw->p_shp;
- /* save the terminal state for current job */
- #ifdef SIGTSTP
- job_fgrp(pw,tcgetpgrp(job.fd));
-- if(tcsetpgrp(job.fd,job.mypid) !=0)
-+ if(sh_isoption(SH_INTERACTIVE) && tcsetpgrp(job.fd,job.mypid) !=0)
- return;
- #endif /* SIGTSTP */
- /* force the following tty_get() to do a tcgetattr() unless fg */
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.orig ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.orig 2013-05-31 10:12:27.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2013-05-31 10:18:14.650367185 +0200
-@@ -2201,7 +2201,7 @@ int sh_exec(register const Shnode_t *t,
- }
- shp->exitval = n;
- #ifdef SIGTSTP
-- if(!pipejob && sh_isstate(SH_MONITOR))
-+ if(!pipejob && sh_isstate(SH_MONITOR) &&
sh_isoption(SH_INTERACTIVE))
- tcsetpgrp(JOBTTY,shp->gd->pid);
- #endif /*SIGTSTP */
- job.curpgid = savepgid;
-diff -up ksh-20120801/src/cmd/ksh93/edit/edit.c.kshmfix
ksh-20120801/src/cmd/ksh93/edit/edit.c
---- ksh-20120801/src/cmd/ksh93/edit/edit.c.kshmfix 2013-09-23 10:46:57.007256192
+0200
-+++ ksh-20120801/src/cmd/ksh93/edit/edit.c 2013-09-23 10:47:43.988937610 +0200
-@@ -1050,7 +1050,7 @@ int ed_getchar(register Edit_t *ep,int m
- {
- if(mode<=0 && -c == ep->e_intr)
- {
-- sh_fault(SIGINT);
-+ killpg(getpgrp(),SIGINT);
- siglongjmp(ep->e_env, UINTR);
- }
- if(mode<=0 && ep->sh->st.trap[SH_KEYTRAP])
-
diff --git a/ksh-20120801-lexfix.patch b/ksh-20120801-lexfix.patch
deleted file mode 100644
index 9150da8..0000000
--- a/ksh-20120801-lexfix.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/edit/edit.c.trajfiks
ksh-20120801/src/cmd/ksh93/edit/edit.c
---- ksh-20120801/src/cmd/ksh93/edit/edit.c.trajfiks 2012-08-02 00:18:19.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/edit/edit.c 2014-02-06 12:12:11.570942651 +0100
-@@ -53,6 +53,7 @@
-
- static char CURSOR_UP[20] = { ESC, '[', 'A', 0 };
- static char KILL_LINE[20] = { ESC, '[', 'J', 0 };
-+static char *savelex;
-
-
-
-@@ -232,6 +233,8 @@ int tty_set(int fd, int action, struct t
- void tty_cooked(register int fd)
- {
- register Edit_t *ep = (Edit_t*)(shgd->ed_context);
-+ if(ep->sh->st.trap[SH_KEYTRAP] && savelex)
-+ memcpy(ep->sh->lex_context,savelex,ep->sh->lexsize);
- ep->e_keytrap = 0;
- if(ep->e_raw==0)
- return;
-@@ -783,6 +786,13 @@ void ed_setup(register Edit_t *ep, int f
- ep->e_lbuf[n] = *pp++;
- ep->e_default = 0;
- }
-+ if(ep->sh->st.trap[SH_KEYTRAP])
-+ {
-+ if(!savelex)
-+ savelex = (char*)malloc(shp->lexsize);
-+ if(savelex)
-+ memcpy(savelex, ep->sh->lex_context, ep->sh->lexsize);
-+ }
- }
-
- static void ed_putstring(register Edit_t *ep, const char *str)
-diff -up ksh-20120801/src/cmd/ksh93/include/defs.h.trajfiks
ksh-20120801/src/cmd/ksh93/include/defs.h
---- ksh-20120801/src/cmd/ksh93/include/defs.h.trajfiks 2014-02-06 12:18:13.149091836
+0100
-+++ ksh-20120801/src/cmd/ksh93/include/defs.h 2014-02-06 12:18:13.175091784 +0100
-@@ -224,6 +224,7 @@ struct shared
- int xargexit; \
- int nenv; \
- mode_t mask; \
-+ int lexsize; \
- Env_t *env; \
- void *init_context; \
- void *mac_context; \
-diff -up ksh-20120801/src/cmd/ksh93/sh/lex.c.trajfiks
ksh-20120801/src/cmd/ksh93/sh/lex.c
---- ksh-20120801/src/cmd/ksh93/sh/lex.c.trajfiks 2014-02-06 12:19:13.587950320 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/lex.c 2014-02-06 12:19:13.623950219 +0100
-@@ -268,6 +268,7 @@ Lex_t *sh_lexopen(Lex_t *lp, Shell_t *sp
- {
- lp = (Lex_t*)newof(0,Lex_t,1,0);
- lp->sh = sp;
-+ sp->lexsize = sizeof(Lex_t);
- }
- fcnotify(lex_advance,lp);
- lp->lex.intest = lp->lex.incase = lp->lex.skipword = lp->lexd.warn = 0;
diff --git a/ksh-20120801-locking.patch b/ksh-20120801-locking.patch
deleted file mode 100644
index 189d254..0000000
--- a/ksh-20120801-locking.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/include/jobs.h.locking
ksh-20120801/src/cmd/ksh93/include/jobs.h
---- ksh-20120801/src/cmd/ksh93/include/jobs.h.locking 2014-06-27 15:51:07.144923719
+0200
-+++ ksh-20120801/src/cmd/ksh93/include/jobs.h 2014-06-27 15:52:56.463272276 +0200
-@@ -149,15 +149,18 @@ extern struct jobs job;
- #define vmbusy() 0
- #endif
-
--#define job_lock() (job.in_critical++)
-+#define asoincint(p) __sync_fetch_and_add(p,1)
-+#define asodecint(p) __sync_fetch_and_sub(p,1)
-+
-+#define job_lock() asoincint(&job.in_critical)
- #define job_unlock() \
- do { \
- int sig; \
-- if (!--job.in_critical && (sig = job.savesig)) \
-+ if (asodecint(&job.in_critical)==1 && (sig = job.savesig)) \
- { \
-- if (!job.in_critical++ && !vmbusy()) \
-+ if (!asoincint(&job.in_critical) && !vmbusy()) \
- job_reap(sig); \
-- job.in_critical--; \
-+ asodecint(&job.in_critical); \
- } \
- } while(0)
-
diff --git a/ksh-20120801-macro.patch b/ksh-20120801-macro.patch
deleted file mode 100644
index 004a5eb..0000000
--- a/ksh-20120801-macro.patch
+++ /dev/null
@@ -1,178 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/include/io.h.macro
ksh-20120801/src/cmd/ksh93/include/io.h
---- ksh-20120801/src/cmd/ksh93/include/io.h.macro 2012-07-18 16:12:38.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/include/io.h 2013-07-04 16:14:05.809595966 +0200
-@@ -81,6 +81,7 @@ extern void sh_iosave(Shell_t *, int,in
- extern int sh_iovalidfd(Shell_t*, int);
- extern int sh_inuse(Shell_t*, int);
- extern void sh_iounsave(Shell_t*);
-+extern void iounpipe(Shell_t*);
- extern int sh_chkopen(const char*);
- extern int sh_ioaccess(int,int);
- extern int sh_devtofd(const char*);
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.macro
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.macro 2013-07-04 16:14:05.783595751 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2013-07-04 16:15:46.673432991 +0200
-@@ -171,7 +171,7 @@ void sh_subfork(void)
- {
- register struct subshell *sp = subshell_data;
- Shell_t *shp = sp->shp;
-- int curenv = shp->curenv;
-+ int curenv = shp->curenv, comsub=shp->comsub;
- pid_t pid;
- char *trap = shp->st.trapcom[0];
- if(trap)
-@@ -204,7 +204,7 @@ void sh_subfork(void)
- shp->comsub = 0;
- SH_SUBSHELLNOD->nvalue.s = 0;
- sp->subpid=0;
-- shp->st.trapcom[0] = trap;
-+ shp->st.trapcom[0] = (comsub==2?NULL:trap);
- shp->savesig = 0;
- }
- }
-@@ -743,7 +743,6 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- fchdir(shp->pwdfd);
- }
- shp->subshare = sp->subshare;
-- shp->comsub = sp->comsub;
- shp->subdup = sp->subdup;
- #if SHOPT_COSHELL
- shp->coshell = sp->coshell;
-@@ -773,7 +772,12 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- if(nsig>0)
- kill(getpid(),nsig);
- if(sp->subpid)
-+ {
- job_wait(sp->subpid);
-+ if(comsub>1)
-+ iounpipe(shp);
-+ }
-+ shp->comsub = sp->comsub;
- if(comsub && iop && sp->pipefd<0)
- sfseek(iop,(off_t)0,SEEK_SET);
- if(shp->trapnote)
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.macro ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.macro 2013-07-04 16:14:05.800595891 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2013-07-04 16:14:05.810595975 +0200
-@@ -102,11 +102,11 @@ struct funenv
- * temp file.
- */
- static int subpipe[3],subdup,tsetio,usepipe;
--static void iounpipe(Shell_t*);
-+void iounpipe(Shell_t*);
-
--static int iousepipe(Shell_t *shp)
-+int iousepipe(Shell_t *shp)
- {
-- int i;
-+ int fd=sffileno(sfstdout),i,err=errno;
- if(usepipe)
- {
- usepipe++;
-@@ -115,13 +115,18 @@ static int iousepipe(Shell_t *shp)
- if(sh_rpipe(subpipe) < 0)
- return(0);
- usepipe++;
-- fcntl(subpipe[0],F_SETFD,FD_CLOEXEC);
-- subpipe[2] = sh_fcntl(1,F_DUPFD,10);
-- fcntl(subpipe[2],F_SETFD,FD_CLOEXEC);
-+ if(shp->comsub!=1)
-+ {
-+ subpipe[2] = sh_fcntl(subpipe[1],F_DUPFD,10);
-+ sh_close(subpipe[1]);
-+ return(1);
-+ }
-+ subpipe[2] = sh_fcntl(fd,F_dupfd_cloexec,10);
- shp->fdstatus[subpipe[2]] = shp->fdstatus[1];
-- close(1);
-- fcntl(subpipe[1],F_DUPFD,1);
-- shp->fdstatus[1] = shp->fdstatus[subpipe[1]];
-+ while(close(fd)<0 && errno==EINTR)
-+ errno = err;
-+ fcntl(subpipe[1],F_DUPFD,fd);
-+ shp->fdstatus[1] = shp->fdstatus[subpipe[1]]&~IOCLEX;
- sh_close(subpipe[1]);
- if(subdup=shp->subdup) for(i=0; i < 10; i++)
- {
-@@ -135,14 +140,23 @@ static int iousepipe(Shell_t *shp)
- return(1);
- }
-
--static void iounpipe(Shell_t *shp)
-+void iounpipe(Shell_t *shp)
- {
-- int n;
-+ int fd=sffileno(sfstdout),n,err=errno;
- char buff[SF_BUFSIZE];
-- close(1);
-- fcntl(subpipe[2], F_DUPFD, 1);
-- shp->fdstatus[1] = shp->fdstatus[subpipe[2]];
-+ if(!usepipe)
-+ return;
- --usepipe;
-+ if(shp->comsub>1)
-+ {
-+ sh_close(subpipe[2]);
-+ while(read(subpipe[0],buff,sizeof(buff))>0);
-+ goto done;
-+ }
-+ while(close(fd)<0 && errno==EINTR)
-+ errno = err;
-+ fcntl(subpipe[2], F_DUPFD, fd);
-+ shp->fdstatus[1] = shp->fdstatus[subpipe[2]];
- if(subdup) for(n=0; n < 10; n++)
- {
- if(subdup&(1<<n))
-@@ -174,6 +188,7 @@ static void iounpipe(Shell_t *shp)
- else if(errno!=EINTR)
- break;
- }
-+done:
- sh_close(subpipe[0]);
- subpipe[0] = -1;
- tsetio = 0;
-@@ -725,7 +740,7 @@ static void unset_instance(Namval_t *nq,
- }
-
- #if SHOPT_COSHELL
--uintmax_t coused;
-+static uintmax_t coused;
- /*
- * print out function definition
- */
-@@ -1619,10 +1634,14 @@ int sh_exec(register const Shnode_t *t,
- if(shp->subshell)
- {
- sh_subtmpfile(shp);
-- if(shp->comsub==1 && !(shp->fdstatus[1]&IONOSEEK))
-- unpipe=iousepipe(shp);
- if((type&(FAMP|TFORK))==(FAMP|TFORK))
-- sh_subfork();
-+ {
-+ if(shp->comsub && !(shp->fdstatus[1]&IONOSEEK))
-+ {
-+ unpipe = iousepipe(shp);
-+ sh_subfork();
-+ }
-+ }
- }
- no_fork = !ntflag && !(type&(FAMP|FPOU)) && !shp->subshell
&&
- !(shp->st.trapcom[SIGINT] && *shp->st.trapcom[SIGINT]) &&
-@@ -3495,8 +3514,7 @@ static void sh_funct(Shell_t *shp,Namval
- struct funenv fun;
- char *fname = nv_getval(SH_FUNNAMENOD);
- struct Level *lp =(struct Level*)(SH_LEVELNOD->nvfun);
-- int level, pipepid=shp->pipepid, comsub=shp->comsub;
-- shp->comsub = 0;
-+ int level, pipepid=shp->pipepid;
- shp->pipepid = 0;
- sh_stats(STAT_FUNCT);
- if(!lp->hdr.disc)
-@@ -3539,7 +3557,6 @@ static void sh_funct(Shell_t *shp,Namval
- lp->maxlevel = level;
- SH_LEVELNOD->nvalue.s = lp->maxlevel;
- shp->last_root = nv_dict(DOTSHNOD);
-- shp->comsub = comsub;
- #if 0
- nv_putval(SH_FUNNAMENOD,shp->st.funname,NV_NOFREE);
- #else
diff --git a/ksh-20120801-manfix4.patch b/ksh-20120801-manfix4.patch
deleted file mode 100644
index 6355445..0000000
--- a/ksh-20120801-manfix4.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh.1.manfix4 ksh-20120801/src/cmd/ksh93/sh.1
---- ksh-20120801/src/cmd/ksh93/sh.1.manfix4 2014-05-22 12:04:51.593750721 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh.1 2014-05-22 12:05:32.561556452 +0200
-@@ -4147,7 +4147,7 @@ command are ignored if the command is fo
- .B &
- and the
- .B monitor
--option is not active.
-+option is active.
- Otherwise, signals have the values
- inherited by the shell from its parent
- (but see also
diff --git a/ksh-20120801-mb-after-argvar.patch b/ksh-20120801-mb-after-argvar.patch
deleted file mode 100644
index 1b71a57..0000000
--- a/ksh-20120801-mb-after-argvar.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/macro.c.orig
ksh-20120801/src/cmd/ksh93/sh/macro.c
---- ksh-20120801/src/cmd/ksh93/sh/macro.c.orig 2015-08-24 14:29:58.602967855 -0300
-+++ ksh-20120801/src/cmd/ksh93/sh/macro.c 2015-08-24 14:31:13.682850008 -0300
-@@ -1479,7 +1479,10 @@ retry1:
- default:
- goto nosub;
- }
-- c = fcmbget(&LEN);
-+ if(type)
-+ c = fcmbget(&LEN);
-+ else
-+ c = fcget();
- if(type>M_TREE)
- {
- if(c!=RBRACE)
diff --git a/ksh-20120801-memlik.patch b/ksh-20120801-memlik.patch
deleted file mode 100644
index 31f1eb9..0000000
--- a/ksh-20120801-memlik.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/array.c.memlik
ksh-20120801/src/cmd/ksh93/sh/array.c
---- ksh-20120801/src/cmd/ksh93/sh/array.c.memlik 2012-06-07 00:00:42.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/array.c 2013-06-11 16:52:47.557123973 +0200
-@@ -1701,7 +1701,11 @@ void *nv_associative(register Namval_t *
- ap->header.scope = 0;
- }
- else
-- dtclose(ap->header.table);
-+ {
-+ if((ap->header.nelem&ARRAY_MASK)==0 &&
(ap->cur=nv_search("0",ap->header.table,0)))
-+ nv_associative(np,(char*)0,NV_ADELETE);
-+ dtclose(ap->header.table);
-+ }
- return((void*)ap);
- case NV_ANEXT:
- if(!ap->pos)
-diff -up ksh-20120801/src/cmd/ksh93/sh/name.c.memlik
ksh-20120801/src/cmd/ksh93/sh/name.c
---- ksh-20120801/src/cmd/ksh93/sh/name.c.memlik 2012-07-23 18:21:57.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/name.c 2013-06-11 16:19:41.036648218 +0200
-@@ -2465,6 +2465,8 @@ static void table_unset(Shell_t *shp, re
- }
- }
- npnext = (Namval_t*)dtnext(root,np);
-+ if(nv_arrayptr(np))
-+ nv_putsub(np,NIL(char*),ARRAY_SCAN);
- _nv_unset(np,flags);
- nv_delete(np,root,0);
- }
-@@ -3326,7 +3328,7 @@ int nv_rename(register Namval_t *np, int
- shp->last_root = last_root;
- if(flags&NV_MOVE)
- {
-- if(arraynp && !nv_isattr(np,NV_MINIMAL) &&
(mp=(Namval_t*)np->nvenv) && (ap=nv_arrayptr(mp)))
-+ if(arraynp && !nv_isattr(np,NV_MINIMAL) &&
(mp=(Namval_t*)np->nvenv) && (ap=nv_arrayptr(mp)) && !ap->fun)
- ap->nelem++;
- }
- if((nv_arrayptr(nr) && !arraynr) || nv_isvtree(nr))
diff --git a/ksh-20120801-memlik3.patch b/ksh-20120801-memlik3.patch
deleted file mode 100644
index 9df57d2..0000000
--- a/ksh-20120801-memlik3.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/include/name.h.memlik3
ksh-20120801/src/cmd/ksh93/include/name.h
---- ksh-20120801/src/cmd/ksh93/include/name.h.memlik3 2012-05-10 18:33:41.000000000
+0200
-+++ ksh-20120801/src/cmd/ksh93/include/name.h 2014-01-22 14:14:32.774483776 +0100
-@@ -215,7 +215,7 @@ extern Namval_t *nv_mount(Namval_t*, co
- extern Namval_t *nv_arraychild(Namval_t*, Namval_t*, int);
- extern int nv_compare(Dt_t*, Void_t*, Void_t*, Dtdisc_t*);
- extern void nv_outnode(Namval_t*,Sfio_t*, int, int);
--extern int nv_subsaved(Namval_t*);
-+extern int nv_subsaved(Namval_t*,int);
- extern void nv_typename(Namval_t*, Sfio_t*);
- extern void nv_newtype(Namval_t*);
- extern int nv_istable(Namval_t*);
-diff -up ksh-20120801/src/cmd/ksh93/sh/name.c.memlik3
ksh-20120801/src/cmd/ksh93/sh/name.c
---- ksh-20120801/src/cmd/ksh93/sh/name.c.memlik3 2014-01-22 14:14:32.751483987 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/name.c 2014-01-22 14:14:32.775483767 +0100
-@@ -1297,7 +1297,7 @@ void nv_delete(Namval_t* np, Dt_t *root,
- {
- if(dtdelete(root,np))
- {
-- if(!(flags&NV_NOFREE) && ((flags&NV_FUNCTION) || !nv_subsaved(np)))
-+ if(!(flags&NV_NOFREE) && ((flags&NV_FUNCTION) ||
!nv_subsaved(np,flags&NV_TABLE)))
- free((void*)np);
- }
- #if 0
-@@ -2461,14 +2461,14 @@ static void table_unset(Shell_t *shp, re
- {
- _nv_unset(nq,flags);
- npnext = (Namval_t*)dtnext(root,nq);
-- nv_delete(nq,root,0);
-+ nv_delete(nq,root,NV_TABLE);
- }
- }
- npnext = (Namval_t*)dtnext(root,np);
- if(nv_arrayptr(np))
- nv_putsub(np,NIL(char*),ARRAY_SCAN);
- _nv_unset(np,flags);
-- nv_delete(np,root,0);
-+ nv_delete(np,root,NV_TABLE);
- }
- }
-
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.memlik3
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.memlik3 2014-01-22 14:14:32.768483831 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2014-01-22 14:20:50.810236676 +0100
-@@ -218,16 +218,28 @@ void sh_subfork(void)
- }
- }
-
--int nv_subsaved(register Namval_t *np)
-+int nv_subsaved(register Namval_t *np,int table)
- {
- register struct subshell *sp;
-- register struct Link *lp;
-+ register struct Link *lp, *lpprev;
- for(sp = (struct subshell*)subshell_data; sp; sp=sp->prev)
- {
-- for(lp=sp->svar; lp; lp = lp->next)
-+ lpprev = 0;
-+ for(lp=sp->svar; lp; lpprev=lp, lp=lp->next)
- {
- if(lp->node==np)
-+ {
-+ if(table&NV_TABLE)
-+ {
-+ if(lpprev)
-+ lpprev->next = lp->next;
-+ else
-+ sp->svar = lp->next;
-+ free((void*)np);
-+ free((void*)lp);
-+ }
- return(1);
-+ }
- }
- }
- return(0);
diff --git a/ksh-20120801-mlikfiks.patch b/ksh-20120801-mlikfiks.patch
deleted file mode 100644
index fbf016a..0000000
--- a/ksh-20120801-mlikfiks.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/lex.c.mlikfiks
ksh-20120801/src/cmd/ksh93/sh/lex.c
---- ksh-20120801/src/cmd/ksh93/sh/lex.c.mlikfiks 2013-07-22 12:45:30.923170264 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/lex.c 2013-07-22 12:46:25.235556905 +0200
-@@ -2465,7 +2465,7 @@ static int alias_exceptf(Sfio_t *iop,int
- if(dp!=handle)
- sfdisc(iop,dp);
- }
-- else if(type==SF_FINAL)
-+ else if(type==SF_DPOP || type==SF_FINAL)
- free((void*)ap);
- goto done;
- }
-diff -up ksh-20120801/src/cmd/ksh93/sh/path.c.mlikfiks
ksh-20120801/src/cmd/ksh93/sh/path.c
---- ksh-20120801/src/cmd/ksh93/sh/path.c.mlikfiks 2013-07-22 12:47:23.149990016 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/path.c 2013-07-22 12:48:33.363283877 +0200
-@@ -613,6 +613,7 @@ static void funload(Shell_t *shp,int fno
- }
- while((rp=dtnext(shp->fpathdict,rp)) && strcmp(pname,rp->fname)==0);
- sh_close(fno);
-+ free((void*)pname);
- return;
- }
- sh_onstate(SH_NOLOG);
-diff -up ksh-20120801/src/cmd/ksh93/sh/macro.c.aliasfix
ksh-20120801/src/cmd/ksh93/sh/macro.c
---- ksh-20120801/src/cmd/ksh93/sh/macro.c.aliasfix 2013-07-29 15:03:45.841680475 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/macro.c 2013-07-29 15:04:23.871336821 +0200
-@@ -2085,6 +2085,7 @@ static void comsubst(Mac_t *mp,register
- }
- sfputc(stkp,c);
- }
-+ sfputc(stkp,' ');
- c = stktell(stkp);
- str=stkfreeze(stkp,1);
- /* disable verbose and don't save in history file */
diff --git a/ksh-20120801-mtty.patch b/ksh-20120801-mtty.patch
deleted file mode 100644
index d992a88..0000000
--- a/ksh-20120801-mtty.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.mtty ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.mtty 2014-01-22 16:52:06.441608750 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2014-01-22 16:52:06.485608361 +0100
-@@ -3163,7 +3169,7 @@ pid_t _sh_fork(Shell_t *shp,register pid
- * completed. Make parent the job group id.
- */
- if(postid==0)
-- job.curpgid = parent;
-+ job.curpgid = job.jobcontrol?parent:getpid();
- if(job.jobcontrol || (flags&FAMP))
- {
- if(setpgid(parent,job.curpgid)<0 && errno==EPERM)
diff --git a/ksh-20120801-noexeccdfix.patch b/ksh-20120801-noexeccdfix.patch
deleted file mode 100644
index 47128e0..0000000
--- a/ksh-20120801-noexeccdfix.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From b8260293a8ed7849a358291faae7b58f4a05dcc9 Mon Sep 17 00:00:00 2001
-From: Kamil Dudka <kdudka(a)redhat.com>
-Date: Mon, 10 Nov 2014 18:23:34 +0100
-Subject: [PATCH] Resolves: #1160923 - handle failure of fchdir()
-
-... and chdir()
----
- src/cmd/ksh93/bltins/cd_pwd.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/src/cmd/ksh93/bltins/cd_pwd.c b/src/cmd/ksh93/bltins/cd_pwd.c
-index a972da6..c20959c 100644
---- a/src/cmd/ksh93/bltins/cd_pwd.c
-+++ b/src/cmd/ksh93/bltins/cd_pwd.c
-@@ -329,18 +329,20 @@ int b_cd(int argc, char *argv[],Shbltin_t *context)
- if(newdirfd >=0)
- {
- /* chdir for directories on HSM/tapeworms may take minutes */
-- if(fchdir(newdirfd) >= 0)
-+ if((rval=fchdir(newdirfd)) >= 0)
- {
- if(shp->pwdfd >= 0)
- sh_close(shp->pwdfd);
- shp->pwdfd=newdirfd;
- goto success;
- }
-+ else
-+ sh_close(newdirfd);
- }
- #ifndef O_SEARCH
- else
- {
-- if(chdir(dir) >=0)
-+ if((rval=chdir(dir)) >=0)
- {
- if(shp->pwdfd >= 0)
- {
---
-2.1.0
-
diff --git a/ksh-20120801-nohupfork.patch b/ksh-20120801-nohupfork.patch
deleted file mode 100644
index 20cdeb9..0000000
--- a/ksh-20120801-nohupfork.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.nohupfork
ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.nohupfork 2015-08-27 14:25:38.925378019 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2015-08-27 14:30:42.267058087 +0200
-@@ -2067,6 +2067,7 @@ int sh_exec(register const Shnode_t *t,
- {
- sh_exec(t->par.partre,flags);
- shp->st.trapcom[0]=0;
-+ sh_offoption(SH_INTERACTIVE);
- sh_done(shp,0);
- }
- }
diff --git a/ksh-20120801-nomulti.patch b/ksh-20120801-nomulti.patch
deleted file mode 100644
index 5d7e7a4..0000000
--- a/ksh-20120801-nomulti.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/init.c.nomulti
ksh-20120801/src/cmd/ksh93/sh/init.c
---- ksh-20120801/src/cmd/ksh93/sh/init.c.nomulti 2013-10-08 20:46:46.202471042 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/init.c 2013-10-08 20:46:57.912331483 +0200
-@@ -1446,7 +1446,6 @@ Shell_t *sh_init(register int argc,regis
- #endif /* SHOPT_TIMEOUT */
- /* initialize jobs table */
- job_clear();
-- sh_onoption(SH_MULTILINE);
- if(argc>0)
- {
- /* check for restricted shell */
diff --git a/ksh-20120801-nv_open-memcmp.patch b/ksh-20120801-nv_open-memcmp.patch
deleted file mode 100644
index 93b7e15..0000000
--- a/ksh-20120801-nv_open-memcmp.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/name.c b/src/cmd/ksh93/sh/name.c
---- a/src/cmd/ksh93/sh/name.c
-+++ b/src/cmd/ksh93/sh/name.c
-@@ -1425,7 +1425,7 @@ Namval_t *nv_open(const char *name, Dt_t *root, int flags)
- {
- if(xp->root!=root)
- continue;
-- if(*name==*xp->name && xp->namespace==shp->namespace &&
(flags&(NV_ARRAY|NV_NOSCOPE))==xp->flags &&
memcmp(xp->name,name,xp->len)==0 && (name[xp->len]==0 ||
name[xp->len]=='=' || name[xp->len]=='+'))
-+ if(*name==*xp->name && xp->namespace==shp->namespace &&
(flags&(NV_ARRAY|NV_NOSCOPE))==xp->flags &&
strncmp(xp->name,name,xp->len)==0 && (name[xp->len]==0 ||
name[xp->len]=='=' || name[xp->len]=='+'))
- {
- sh_stats(STAT_NVHITS);
- np = xp->np;
diff --git a/ksh-20120801-oldenvinit.patch b/ksh-20120801-oldenvinit.patch
deleted file mode 100644
index 8ee0863..0000000
--- a/ksh-20120801-oldenvinit.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/init.c.fixset
ksh-20120801/src/cmd/ksh93/sh/init.c
---- ksh-20120801/src/cmd/ksh93/sh/init.c.fixset 2014-11-03 15:45:36.510997271 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/init.c 2014-11-03 16:20:44.398917280 +0100
-@@ -2003,8 +2003,91 @@ static Dt_t *inittree(Shell_t *shp,const
- * skip over items that are not name-value pairs
- */
-
-+
- static void env_init(Shell_t *shp)
- {
-+ register char *cp;
-+ register Namval_t *np;
-+ register char **ep=environ;
-+ register char *next=0;
-+#ifdef _ENV_H
-+ shp->env = env_open(environ,3);
-+ env_delete(shp->env,"_");
-+#endif
-+ if(ep)
-+ {
-+ while(cp= *ep++)
-+ {
-+ if(*cp=='A' && cp[1]=='_' && cp[2]=='_'
&& cp[3]=='z' && cp[4]=='=')
-+ next = cp+4;
-+ else if(np=nv_open(cp,shp->var_tree,(NV_EXPORT|NV_IDENT|NV_ASSIGN|NV_NOFAIL)))
-+ {
-+ nv_onattr(np,NV_IMPORT);
-+ np->nvenv = cp;
-+ nv_close(np);
-+ }
-+ else /* swap with front */
-+ {
-+ ep[-1] = environ[shp->nenv];
-+ environ[shp->nenv++] = cp;
-+ }
-+ }
-+ while(cp=next)
-+ {
-+ if(next = strchr(++cp,'='))
-+ *next = 0;
-+ np = nv_search(cp+2,shp->var_tree,NV_ADD);
-+ if(np!=SHLVL && nv_isattr(np,NV_IMPORT|NV_EXPORT))
-+ {
-+ int flag = *(unsigned char*)cp-' ';
-+ int size = *(unsigned char*)(cp+1)-' ';
-+ if((flag&NV_INTEGER) && size==0)
-+ {
-+ /* check for floating*/
-+ char *ep,*val = nv_getval(np);
-+ strtol(val,&ep,10);
-+ if(*ep=='.' || *ep=='e' || *ep=='E')
-+ {
-+ char *lp;
-+ flag |= NV_DOUBLE;
-+ if(*ep=='.')
-+ {
-+ strtol(ep+1,&lp,10);
-+ if(*lp)
-+ ep = lp;
-+ }
-+ if(*ep && *ep!='.')
-+ {
-+ flag |= NV_EXPNOTE;
-+ size = ep-val;
-+ }
-+ else
-+ size = strlen(ep);
-+ size--;
-+ }
-+ }
-+ nv_newattr(np,flag|NV_IMPORT|NV_EXPORT,size);
-+ }
-+ else
-+ cp += 2;
-+ }
-+ }
-+#ifdef _ENV_H
-+ env_delete(shp->env,e_envmarker);
-+#endif
-+ if(nv_isnull(PWDNOD) || nv_isattr(PWDNOD,NV_TAGGED))
-+ {
-+ nv_offattr(PWDNOD,NV_TAGGED);
-+ path_pwd(shp,0);
-+ }
-+ if((cp = nv_getval(SHELLNOD)) && (sh_type(cp)&SH_TYPE_RESTRICTED))
-+ sh_onoption(SH_RESTRICTED); /* restricted shell */
-+ return;
-+}
-+
-+
-+static void env_init_backup(Shell_t *shp)
-+{
- register char *cp;
- register Namval_t *np,*mp;
- register char **ep=environ;
diff --git a/ksh-20120801-parserfix.patch b/ksh-20120801-parserfix.patch
deleted file mode 100644
index 1dc7695..0000000
--- a/ksh-20120801-parserfix.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- ksh_20120801/src/cmd/ksh93/sh/lex.c 2012-06-12 21:05:18.000000000 +0200
-+++ ksh_20120801/src/cmd/ksh93/sh/lex.c 2015-08-18 17:42:06.138076565 +0200
-@@ -1603,7 +1603,14 @@ static int comsub(register Lex_t *lp, in
- if(n==4)
- break;
- if(sh_lexstates[ST_NAME][c])
-+ {
-+ if(c==' ' || c=='\t')
-+ {
-+ n = 0;
-+ continue;
-+ }
- goto skip;
-+ }
- word[n++] = c;
- }
- if(sh_lexstates[ST_NAME][c]==S_BREAK)
---- ksh_20120801/src/cmd/ksh93/tests/subshell.sh 2012-07-25 23:40:29.000000000 +0200
-+++ ksh_20120801/src/cmd/ksh93/tests/subshell.sh 2015-08-18 17:42:06.143076553 +0200
-@@ -617,4 +617,6 @@ do if [[ -e $f ]]
- fi
- done
-
-+$SHELL > /dev/null -c 'echo $(for x in whatever; do case y in *) true;; esac;
done)' || err_exit 'syntax error with case in command substitution'
-+
- exit $((Errors<125?Errors:125))
diff --git a/ksh-20120801-posix-exit.patch b/ksh-20120801-posix-exit.patch
deleted file mode 100644
index a4b44d0..0000000
--- a/ksh-20120801-posix-exit.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/fault.c b/src/cmd/ksh93/sh/fault.c
---- a/src/cmd/ksh93/sh/fault.c
-+++ b/src/cmd/ksh93/sh/fault.c
-@@ -643,7 +643,7 @@ void sh_done(void *ptr, register int sig)
- sfsync((Sfio_t*)sfstdin);
- sfsync((Sfio_t*)shp->outpool);
- sfsync((Sfio_t*)sfstdout);
-- if(savxit&SH_EXITSIG)
-+ if((savxit&SH_EXITMASK) == shp->lastsig)
- sig = savxit&SH_EXITMASK;
- if(sig)
- {
-@@ -668,6 +668,12 @@ void sh_done(void *ptr, register int sig)
- if(sh_isoption(SH_NOEXEC))
- kiaclose((Lex_t*)shp->lex_context);
- #endif /* SHOPT_KIA */
-+
-+ /* Return POSIX exit code if last process exits due to signal */
-+ if (savxit & SH_EXITSIG) {
-+ exit(128 + (savxit&SH_EXITMASK));
-+ }
-+
- exit(savxit&SH_EXITMASK);
- }
diff --git a/ksh-20120801-retfix.patch b/ksh-20120801-retfix.patch
deleted file mode 100644
index 5af1053..0000000
--- a/ksh-20120801-retfix.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.retfix
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.retfix 2014-10-01 17:34:47.720532950 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2014-10-01 17:35:25.850350378 +0200
-@@ -655,7 +655,10 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- job.hack1_waitall=0;
- if(comsub!=1 && shp->spid)
- {
-+ int c = shp->exitval;
- job_wait(shp->spid);
-+ shp->exitval = c;
-+ exitset();
- if(shp->pipepid==shp->spid)
- shp->spid = 0;
- shp->pipepid = 0;
diff --git a/ksh-20120801-rmdirfix.patch b/ksh-20120801-rmdirfix.patch
deleted file mode 100644
index ae9dfd7..0000000
--- a/ksh-20120801-rmdirfix.patch
+++ /dev/null
@@ -1,505 +0,0 @@
-diff -up ksh20120801/src/cmd/ksh93/sh/subshell.c.orig
ksh20120801/src/cmd/ksh93/sh/subshell.c
---- ksh20120801/src/cmd/ksh93/sh/subshell.c.orig 2012-07-17 23:54:21.000000000 +0200
-+++ ksh20120801/src/cmd/ksh93/sh/subshell.c 2012-10-24 15:03:44.436870792 +0200
-@@ -40,14 +40,6 @@
- # define PIPE_BUF 512
- #endif
-
--#ifndef O_SEARCH
--# ifdef O_PATH
--# define O_SEARCH O_PATH
--# else
--# define O_SEARCH 0
--# endif
--#endif
--
- /*
- * Note that the following structure must be the same
- * size as the Dtlink_t structure
-@@ -84,7 +76,7 @@ static struct subshell
- char *pwd; /* present working directory */
- const char *shpwd; /* saved pointer to sh.pwd */
- void *jobs; /* save job info */
-- int pwdfd; /* file descritor for pwd */
-+ int shpwdfd;/* fd for present working directory */
- mode_t mask; /* saved umask */
- short tmpfd; /* saved tmp file descriptor */
- short pipefd; /* read fd if pipe is created */
-@@ -101,7 +93,6 @@ static struct subshell
- int subdup;
- char subshare;
- char comsub;
-- char pwdclose;
- #if SHOPT_COSHELL
- void *coshell;
- #endif /* SHOPT_COSHELL */
-@@ -518,7 +509,6 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- shp->pathinit = 0;
- }
- sp->pathlist = path_dup((Pathcomp_t*)shp->pathlist);
-- sp->pwdfd = -1;
- if(!shp->pwd)
- path_pwd(shp,0);
- sp->bckpid = shp->bckpid;
-@@ -531,39 +521,14 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- shp->subshare = comsub==2 || (comsub==1 && sh_isoption(SH_SUBSHARE));
- if(comsub)
- shp->comsub = comsub;
-+ sp->shpwdfd=-1;
- if(!comsub || !shp->subshare)
- {
-- struct subshell *xp;
- sp->shpwd = shp->pwd;
--#ifdef _lib_fchdir
-- for(xp=sp->prev; xp; xp=xp->prev)
-- {
-- if(xp->pwdfd>0 && strcmp(xp->pwd,shp->pwd)==0)
-- {
-- sp->pwdfd = xp->pwdfd;
-- break;
-- }
-- }
-- if(sp->pwdfd<0)
-- {
-- int n = open(".",O_RDONLY);
-- if(O_SEARCH && errno==EACCES)
-- n = open(".",O_RDONLY);
-- if(n>=0)
-- {
-- sp->pwdfd = n;
-- if(n<10)
-- {
-- sp->pwdfd = sh_fcntl(n,F_DUPFD,10);
-- close(n);
-- }
-- if(sp->pwdfd>0)
-- {
-- fcntl(sp->pwdfd,F_SETFD,FD_CLOEXEC);
-- sp->pwdclose = 1;
-- }
-- }
-- }
-+ sp->shpwdfd=((shp->pwdfd >= 0))?sh_fcntl(shp->pwdfd, F_dupfd_cloexec,
10):-1;
-+#ifdef O_SEARCH
-+ if(sp->shpwdfd<0)
-+ errormsg(SH_DICT,ERROR_system(1), "Can't obtain directory fd.");
- #endif
- sp->pwd = (shp->pwd?strdup(shp->pwd):0);
- sp->mask = shp->mask;
-@@ -741,14 +706,11 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- Namval_t *pwdnod = sh_scoped(shp,PWDNOD);
- if(shp->pwd)
- {
-- if(sp->pwdfd >=0)
-- {
-- if(fchdir(sp->pwdfd)<0)
-- chdir(sp->pwd);
-- }
-- else
-- chdir(sp->pwd);
- shp->pwd=sp->pwd;
-+#ifndef O_SEARCH
-+ if (sp->shpwdfd < 0)
-+ chdir(shp->pwd);
-+#endif
- path_newdir(shp,shp->pathlist);
- }
- if(nv_isattr(pwdnod,NV_NOFREE))
-@@ -762,8 +724,6 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- }
- else
- free((void*)sp->pwd);
-- if(sp->pwdclose)
-- close(sp->pwdfd);
- if(sp->mask!=shp->mask)
- umask(shp->mask=sp->mask);
- if(shp->coutpipe!=sp->coutpipe)
-@@ -775,6 +735,13 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- shp->cpipe[1] = sp->cpipe;
- shp->coutpipe = sp->coutpipe;
- }
-+ if(sp->shpwdfd >=0)
-+ {
-+ if(shp->pwdfd >=0)
-+ sh_close(shp->pwdfd);
-+ shp->pwdfd=sp->shpwdfd;
-+ fchdir(shp->pwdfd);
-+ }
- shp->subshare = sp->subshare;
- shp->comsub = sp->comsub;
- shp->subdup = sp->subdup;
-diff -up ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.orig
ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c
---- ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.orig 2012-08-02 16:50:40.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c 2012-10-24 15:37:46.814469045 +0200
-@@ -38,6 +38,10 @@
- #include "builtins.h"
- #include <ls.h>
-
-+#ifndef EINTR_REPEAT
-+# define EINTR_REPEAT(expr) while((expr) && (errno == EINTR)) errno=0;
-+#endif
-+
- /*
- * Invalidate path name bindings to relative paths
- */
-@@ -49,6 +53,95 @@ static void rehash(register Namval_t *np
- _nv_unset(np,0);
- }
-
-+/*
-+ * Obtain a file handle to the directory "path" relative to directory
-+ * "dir", or open a NFSv4 xattr directory handle for file dir/path.
-+ */
-+int sh_diropenat(Shell_t *shp, int dir, const char *path, bool xattr)
-+{
-+ int fd,shfd;
-+ int savederrno=errno;
-+#ifndef AT_FDCWD
-+ NOT_USED(dir);
-+#endif
-+#ifndef O_XATTR
-+ NOT_USED(xattr);
-+#endif
-+
-+#ifdef O_XATTR
-+ if(xattr)
-+ {
-+ int apfd; /* attribute parent fd */
-+ /* open parent node... */
-+ EINTR_REPEAT((apfd = openat(dir, path, O_RDONLY|O_NONBLOCK|O_cloexec)) < 0);
-+ if(apfd < 0)
-+ return -1;
-+
-+ /* ... and then open a fd to the attribute directory */
-+ EINTR_REPEAT((fd = openat(apfd, e_dot, O_XATTR|O_cloexec)) < 0);
-+
-+ savederrno = errno;
-+ EINTR_REPEAT(close(apfd) < 0);
-+ errno = savederrno;
-+ }
-+ else
-+#endif
-+ {
-+#ifdef AT_FDCWD
-+ /*
-+ * Open directory. First we try without |O_SEARCH| and
-+ * if this fails with EACCESS we try with |O_SEARCH|
-+ * again.
-+ * This is required ...
-+ * - ... because some platforms may require that it can
-+ * only be used for directories while some filesystems
-+ * (e.g. Reiser4 or HSM systems) allow a |fchdir()| into
-+ * files, too)
-+ * - ... to preserve the semantics of "cd", e.g.
-+ * otherwise "cd" would return [No access] instead of
-+ * [Not a directory] for files on filesystems which do
-+ * not allow a "cd" into files.
-+ * - ... to allow that a
-+ * $ redirect {n}</etc ; cd /dev/fd/$n # works on most
-+ * platforms.
-+ */
-+ EINTR_REPEAT((fd = openat(dir, path, O_RDONLY|O_NONBLOCK|O_cloexec)) < 0);
-+# ifdef O_SEARCH
-+ if((fd < 0) && (errno == EACCES))
-+ {
-+ EINTR_REPEAT((fd = openat(dir, path, O_SEARCH|O_cloexec)) < 0)
-+ }
-+# endif
-+#else
-+ /*
-+ * Version of openat() call above for systems without
-+ * openat API. This only works because we basically
-+ * gurantee that |dir| is always the same place as
-+ * |cwd| on such machines (but this won't be the case
-+ * in the future).
-+ */
-+ /*
-+ * This |fchdir()| call is not needed (yet) since
-+ * all consumers do not use |dir| when |AT_FDCWD|
-+ * is not available.
-+ *
-+ * fchdir(dir);
-+ */
-+ EINTR_REPEAT((fd = open(path, O_cloexec)) < 0);
-+#endif
-+ }
-+
-+ if(fd < 0)
-+ return fd;
-+
-+ /* Move fd to a number > 10 and *register* the fd number with the shell */
-+ shfd = sh_fcntl(fd, F_dupfd_cloexec, 10);
-+ savederrno=errno;
-+ sh_close(fd);
-+ errno=savederrno;
-+ return(shfd);
-+}
-+
- int b_cd(int argc, char *argv[],Shbltin_t *context)
- {
- register char *dir;
-@@ -56,18 +149,20 @@ int b_cd(int argc, char *argv[],Shbltin_
- register const char *dp;
- register Shell_t *shp = context->shp;
- int saverrno=0;
-- int rval,flag=0;
-+ int rval;
-+ bool flag=false,xattr=false;
- char *oldpwd;
-+ int newdirfd;
- Namval_t *opwdnod, *pwdnod;
- if(sh_isoption(SH_RESTRICTED))
- errormsg(SH_DICT,ERROR_exit(1),e_restricted+4);
- while((rval = optget(argv,sh_optcd))) switch(rval)
- {
- case 'L':
-- flag = 0;
-+ flag = false;
- break;
- case 'P':
-- flag = 1;
-+ flag = true;
- break;
- case ':':
- errormsg(SH_DICT,2, "%s", opt_info.arg);
-@@ -179,14 +274,72 @@ int b_cd(int argc, char *argv[],Shbltin_
- continue;
- #endif /* SHOPT_FS_3D */
- }
-+ rval = newdirfd = sh_diropenat(shp, shp->pwdfd,
-+ path_relative(shp,stakptr(PATH_OFFSET)), xattr);
-+ if(newdirfd >=0)
-+ {
-+ /* chdir for directories on HSM/tapeworms may take minutes */
-+ if(fchdir(newdirfd) >= 0)
-+ {
-+ if(shp->pwdfd >= 0)
-+ sh_close(shp->pwdfd);
-+ shp->pwdfd=newdirfd;
-+ goto success;
-+ }
-+ }
-+#ifndef O_SEARCH
-+ else
-+ {
- if((rval=chdir(path_relative(shp,stakptr(PATH_OFFSET)))) >= 0)
-- goto success;
-- if(errno!=ENOENT && saverrno==0)
-+ {
-+ if(shp->pwdfd >= 0)
-+ {
-+ sh_close(shp->pwdfd);
-+#ifdef AT_FDCWD
-+ shp->pwdfd = AT_FDCWD;
-+#else
-+ shp->pwdfd = -1;
-+#endif
-+ }
-+ }
-+ }
-+#endif
-+ if(saverrno==0)
- saverrno=errno;
-+ if(newdirfd >=0)
-+ sh_close(newdirfd);
- }
- while(cdpath);
- if(rval<0 && *dir=='/' &&
*(path_relative(shp,stakptr(PATH_OFFSET)))!='/')
-- rval = chdir(dir);
-+ {
-+ rval = newdirfd = sh_diropenat(shp,
-+ shp->pwdfd,
-+ dir, xattr);
-+ if(newdirfd >=0)
-+ {
-+ /* chdir for directories on HSM/tapeworms may take minutes */
-+ if(fchdir(newdirfd) >= 0)
-+ {
-+ if(shp->pwdfd >= 0)
-+ sh_close(shp->pwdfd);
-+ shp->pwdfd=newdirfd;
-+ goto success;
-+ }
-+ }
-+#ifndef O_SEARCH
-+ else
-+ {
-+ if(chdir(dir) >=0)
-+ {
-+ if(shp->pwdfd >= 0)
-+ {
-+ sh_close(shp->pwdfd);
-+ shp->pwdfd=-1;
-+ }
-+ }
-+ }
-+#endif
-+ }
- /* use absolute chdir() if relative chdir() fails */
- if(rval<0)
- {
-@@ -213,7 +366,7 @@ success:
- if(*dir != '/')
- return(0);
- nv_putval(opwdnod,oldpwd,NV_RDONLY);
-- flag = strlen(dir);
-+ flag = (strlen(dir)>0)?true:false;
- /* delete trailing '/' */
- while(--flag>0 && dir[flag]=='/')
- dir[flag] = 0;
-diff -up ksh-20120801/src/cmd/ksh93/include/shell.h.orig
ksh-20120801/src/cmd/ksh93/include/shell.h
---- ksh-20120801/src/cmd/ksh93/include/shell.h.orig 2012-07-17 22:07:40.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/include/shell.h 2012-10-24 15:42:10.756987230 +0200
-@@ -145,6 +145,7 @@ struct Shell_s
- unsigned char trapnote; /* set when trap/signal is pending */
- char shcomp; /* set when runing shcomp */
- short subshell; /* set for virtual subshell */
-+ int pwdfd; /* file descriptor for pwd */
- #ifdef _SH_PRIVATE
- _SH_PRIVATE
- #endif /* _SH_PRIVATE */
-diff -up ksh-20120801/src/cmd/ksh93/sh/init.c.orig ksh-20120801/src/cmd/ksh93/sh/init.c
---- ksh-20120801/src/cmd/ksh93/sh/init.c.orig 2012-05-11 19:19:10.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/init.c 2012-10-24 15:31:59.659485151 +0200
-@@ -1365,6 +1365,18 @@ Shell_t *sh_init(register int argc,regis
- }
- }
- sh_ioinit(shp);
-+#ifdef AT_FDCWD
-+ shp->pwdfd = sh_diropenat(shp, AT_FDCWD, e_dot, false);
-+#else
-+ /* Systems without AT_FDCWD/openat() do not use the |dir| argument */
-+ shp->pwdfd = sh_diropenat(shp, -1, e_dot, false);
-+#endif
-+#ifdef O_SEARCH
-+ /* This should _never_ happen, guranteed by design and goat sacrifice */
-+ if(shp->pwdfd < 0)
-+ errormsg(SH_DICT,ERROR_system(1), "Can't obtain directory
fd.");
-+#endif
-+
- /* initialize signal handling */
- sh_siginit(shp);
- stakinstall(NIL(Stak_t*),nospace);
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.orig ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.orig 2012-07-23 16:49:32.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2012-10-24 15:35:02.209539671 +0200
-@@ -1348,8 +1348,12 @@ int sh_exec(register const Shnode_t *t,
- {
- if(!shp->pwd)
- path_pwd(shp,0);
-- if(shp->pwd)
-- stat(".",&statb);
-+#ifndef O_SEARCH
-+ else if (shp->pwdfd>=0)
-+ fstat(shp->pwdfd,&statb);
-+ else if (shp->pwd)
-+ stat(e_dot,&statb);
-+#endif
- sfsync(NULL);
- share = sfset(sfstdin,SF_SHARE,0);
- sh_onstate(SH_STOPOK);
-@@ -1428,14 +1432,32 @@ int sh_exec(register const Shnode_t *t,
- sh_offstate(SH_NOFORK);
- if(!(nv_isattr(np,BLT_ENV)))
- {
-- if(shp->pwd)
-+#ifdef O_SEARCH
-+ while((fchdir(shp->pwdfd) < 0) && errno==EINTR)
-+ errno = 0;
-+#else
-+ if(shp->pwd || (shp->pwdfd >= 0))
- {
- struct stat stata;
- stat(".",&stata);
- /* restore directory changed */
- if(statb.st_ino!=stata.st_ino || statb.st_dev!=stata.st_dev)
-- chdir(shp->pwd);
-+ {
-+ /* chdir for directories on HSM/tapeworms may take minutes */
-+ int err=errno;
-+ if(shp->pwdfd >= 0)
-+ {
-+ while((fchdir(shp->pwdfd) < 0) && errno==EINTR)
-+ errno = err;
-+ }
-+ else
-+ {
-+ while((chdir(shp->pwd) < 0) && errno==EINTR)
-+ errno = err;
-+ }
-+ }
- }
-+#endif /* O_SEARCH */
- sh_offstate(SH_STOPOK);
- if(share&SF_SHARE)
- sfset(sfstdin,SF_PUBLIC|SF_SHARE,1);
-diff -up ksh-20120801/src/lib/libast/features/common.orig
ksh-20120801/src/lib/libast/features/common
---- ksh-20120801/src/lib/libast/features/common.orig 2011-12-12 20:55:33.000000000 +0100
-+++ ksh-20120801/src/lib/libast/features/common 2012-10-24 15:54:35.433885131 +0200
-@@ -463,6 +463,66 @@ typ uintptr_t stdint.h inttypes.h no{
- typedef unsigned _ast_int4_t uintptr_t;
- #endif
- }end
-+typ _Bool = uint8_t
-+cat{
-+ #if defined(_STDC_C99) || __STDC_VERSION__ >= 199901L
-+ #include <stdbool.h>
-+ #else
-+ #define bool _Bool
-+ #define false 0
-+ #define true 1
-+ #endif
-+}end
-+tst key __thread -lpthread note{ __thread keyword exists and works with -lpthread }end
execute{
-+ #include <pthread.h>
-+
-+ #define INITIAL 1
-+ #define LOOP 100
-+
-+ static __thread int specific = INITIAL;
-+ static int global = 0;
-+
-+ static void* worker(void* arg)
-+ {
-+ int k;
-+ int v;
-+ v = (int)(arg - 0);
-+ for (k = 0; k < LOOP; ++k)
-+ {
-+ specific += v;
-+ usleep(1);
-+ }
-+ if (specific != (INITIAL + LOOP * v))
-+ global = 1;
-+ return 0;
-+ }
-+ int main()
-+ {
-+ pthread_t th[2];
-+
-+ if (pthread_create(&th[0], 0, worker, (void*)0 + 5) ||
-+ pthread_create(&th[1], 0, worker, (void*)0 + 7))
-+ {
-+ NOTE("pthread_create failed");
-+ return 1;
-+ }
-+ pthread_join(th[0], 0);
-+ pthread_join(th[1], 0);
-+ if (global)
-+ {
-+ NOTE("__thread variable not thread specific");
-+ return 1;
-+ }
-+ if (specific != INITIAL)
-+ {
-+ NOTE("main __thread variable changed by another thread");
-+ return 1;
-+ }
-+ return 0;
-+ }
-+}end no{
-+ #define __thread /* __thread keyword does not exist or does not work with -lpthread
*/
-+}end
-
- tst - -DTRY=1 - -DTRY=1 -Dvoid=char - -DTRY=2 - -DTRY=3 - -DTRY=4 output{
- #if _STD_ && _hdr_stdarg
diff --git a/ksh-20120801-roundit.patch b/ksh-20120801-roundit.patch
deleted file mode 100644
index 015bc85..0000000
--- a/ksh-20120801-roundit.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20120801/src/lib/libast/sfio/sfcvt.c.rounditgood
ksh-20120801/src/lib/libast/sfio/sfcvt.c
---- ksh-20120801/src/lib/libast/sfio/sfcvt.c.rounditgood 2014-02-27 16:45:54.630161032
+0100
-+++ ksh-20120801/src/lib/libast/sfio/sfcvt.c 2014-02-27 16:45:54.658161205 +0100
-@@ -491,7 +491,7 @@ int format; /* conversion format */
- *decpt += 1;
- if(!(format&SFFMT_EFORMAT))
- { /* add one more 0 for %f precision */
-- ep[-1] = '0';
-+ if(ep-sp>1) ep[-1] = '0';
- ep += 1;
- }
- }
diff --git a/ksh-20120801-sh_iovalidfd.patch b/ksh-20120801-sh_iovalidfd.patch
deleted file mode 100644
index bdd9154..0000000
--- a/ksh-20120801-sh_iovalidfd.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-diff --git a/src/cmd/ksh93/include/io.h b/src/cmd/ksh93/include/io.h
---- a/src/cmd/ksh93/include/io.h
-+++ b/src/cmd/ksh93/include/io.h
-@@ -79,7 +79,7 @@ extern Sfio_t *sh_iostream(Shell_t*,int);
- extern int sh_redirect(Shell_t*,struct ionod*,int);
- extern void sh_iosave(Shell_t *, int,int,char*);
- extern int safefdnumber(Shell_t* shp, int sfd);
--extern int sh_iovalidfd(Shell_t*, int);
-+extern bool sh_iovalidfd(Shell_t*, int);
- extern int sh_inuse(Shell_t*, int);
- extern void sh_iounsave(Shell_t*);
- extern void iounpipe(Shell_t*);
-diff --git a/src/cmd/ksh93/sh/io.c b/src/cmd/ksh93/sh/io.c
---- a/src/cmd/ksh93/sh/io.c
-+++ b/src/cmd/ksh93/sh/io.c
-@@ -403,38 +403,50 @@ static short filemapsize;
-
- /* ======== input output and file copying ======== */
-
--int sh_iovalidfd(Shell_t *shp, int fd)
-+bool sh_iovalidfd(Shell_t *shp, int fd)
- {
- Sfio_t **sftable = shp->sftable;
- int max,n, **fdptrs = shp->fdptrs;
- unsigned char *fdstatus = shp->fdstatus;
- if(fd<0)
-- return(0);
-+ return(false);
- if(fd < shp->gd->lim.open_max)
-- return(1);
-+ return(true);
- max = strtol(astconf("OPEN_MAX",NiL,NiL),NiL,0);
- if(fd >= max)
- {
- errno = EBADF;
-- return(0);
-+ return(false);
- }
- n = (fd+16)&~0xf;
-- if(n > max)
-- n = max;
-+ if(n++ > max)
-+ n = max+1;
- max = shp->gd->lim.open_max;
-- shp->sftable = (Sfio_t**)calloc((n+1)*(sizeof(int*)+sizeof(Sfio_t*)+1),1);
-- if(max)
-- memcpy(shp->sftable,sftable,max*sizeof(Sfio_t*));
-+ shp->sftable =
(Sfio_t**)calloc((n+1)*(sizeof(int*)+sizeof(Sfio_t*)+sizeof(*fdstatus)),1);
-+
-+ if(sftable)
-+ {
-+ --sftable;
-+ if(max)
-+ memcpy(shp->sftable,sftable,++max*sizeof(Sfio_t*));
-+
-+ }
-+
- shp->fdptrs = (int**)(&shp->sftable[n]);
- if(max)
-- memcpy(shp->fdptrs,fdptrs,max*sizeof(int*));
-+ memcpy(shp->fdptrs,--fdptrs,max*sizeof(int*));
- shp->fdstatus = (unsigned char*)(&shp->fdptrs[n]);
- if(max)
-- memcpy(shp->fdstatus,fdstatus,max);
-+ memcpy(shp->fdstatus,--fdstatus,max);
-+
- if(sftable)
- free((void*)sftable);
-- shp->gd->lim.open_max = n;
-- return(1);
-+
-+ shp->sftable++;
-+ shp->fdptrs++;
-+ shp->fdstatus++;
-+ shp->gd->lim.open_max = n-1;
-+ return(true);
- }
-
- int sh_inuse(Shell_t *shp, int fd)
diff --git a/ksh-20120801-subshell-jobwait.patch b/ksh-20120801-subshell-jobwait.patch
deleted file mode 100644
index 8dac4a1..0000000
--- a/ksh-20120801-subshell-jobwait.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/xec.c b/src/cmd/ksh93/sh/xec.c
---- a/src/cmd/ksh93/sh/xec.c
-+++ b/src/cmd/ksh93/sh/xec.c
-@@ -1647,8 +1647,9 @@ int sh_exec(register const Shnode_t *t, int flags)
- {
- if (!unpipe)
- unpipe = iousepipe(shp);
-- sh_subfork();
- }
-+
-+ sh_subfork();
- }
- }
- no_fork = !ntflag && !(type&(FAMP|FPOU)) && !shp->subshell
&&
diff --git a/ksh-20120801-subshell-leak.patch b/ksh-20120801-subshell-leak.patch
deleted file mode 100644
index 24c7f6b..0000000
--- a/ksh-20120801-subshell-leak.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/path.c b/src/cmd/ksh93/sh/path.c
-index d723987..9965bf5 100644
---- a/src/cmd/ksh93/sh/path.c
-+++ b/src/cmd/ksh93/sh/path.c
-@@ -1791,8 +1791,12 @@ void path_alias(register Namval_t *np,register Pathcomp_t *pp)
- {
- struct stat statb;
- char *sp;
-+ Pathcomp_t *old = 0;
- nv_offattr(np,NV_NOPRINT);
- nv_stack(np,&talias_init);
-+ old = (Pathcomp_t*)np->nvalue.cp;
-+ if (old && (--old->refcount <= 0))
-+ free((void*)old);
- np->nvalue.cp = (char*)pp;
- pp->refcount++;
- nv_setattr(np,NV_TAGGED|NV_NOFREE);
---
-2.9.3
-
diff --git a/ksh-20120801-sufix.patch b/ksh-20120801-sufix.patch
deleted file mode 100644
index b820e1c..0000000
--- a/ksh-20120801-sufix.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/io.c.sufix ksh-20120801/src/cmd/ksh93/sh/io.c
---- ksh-20120801/src/cmd/ksh93/sh/io.c.sufix 2014-04-08 14:30:14.412343555 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/io.c 2014-04-08 14:31:18.403876587 +0200
-@@ -2144,6 +2144,7 @@ static int io_prompt(Shell_t *shp,Sfio_t
- }
- #endif /* TIOCLBIC */
- cp = sh_mactry(shp,nv_getval(sh_scoped(shp,PS1NOD)));
-+ shp->exitval = 0;
- for(;c= *cp;cp++)
- {
- if(c==HIST_CHAR)
diff --git a/ksh-20120801-syntax-error.patch b/ksh-20120801-syntax-error.patch
deleted file mode 100644
index aaeef77..0000000
--- a/ksh-20120801-syntax-error.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/parse.c b/src/cmd/ksh93/sh/parse.c
---- a/src/cmd/ksh93/sh/parse.c
-+++ b/src/cmd/ksh93/sh/parse.c
-@@ -742,7 +742,7 @@ static Shnode_t *funct(Lex_t *lexp)
- register Shnode_t *t;
- register int flag;
- struct slnod *volatile slp=0;
-- Stak_t *savstak;
-+ Stak_t *volatile savstak=0;
- Sfoff_t first, last;
- struct functnod *volatile fp;
- Sfio_t *iop;
diff --git a/ksh-20120801-tabfix.patch b/ksh-20120801-tabfix.patch
deleted file mode 100644
index 962763e..0000000
--- a/ksh-20120801-tabfix.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/edit/emacs.c.tabfix
ksh-20120801/src/cmd/ksh93/edit/emacs.c
---- ksh-20120801/src/cmd/ksh93/edit/emacs.c.tabfix 2012-07-17 22:44:44.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/edit/emacs.c 2013-03-07 15:58:59.902161711 +0100
-@@ -1011,10 +1011,13 @@ static int escape(register Emacs_t* ep,r
- ep->ed->e_tabcount=0;
- else
- {
-+ int oldi = i;
- i=ed_getchar(ep->ed,0);
- ed_ungetchar(ep->ed,i);
-- if(isdigit(i))
-+ if(isdigit(i) && oldi=='=')
- ed_ungetchar(ep->ed,ESC);
-+ else if (isdigit(i) || i=='\t')
-+ ep->ed->e_tabcount=0;
- }
- }
- else
diff --git a/ksh-20120801-tpstl.patch b/ksh-20120801-tpstl.patch
deleted file mode 100644
index 41e17c8..0000000
--- a/ksh-20120801-tpstl.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/init.c.tpstl ksh-20120801/src/cmd/ksh93/sh/init.c
---- ksh-20120801/src/cmd/ksh93/sh/init.c.tpstl 2014-04-03 11:21:25.395547276 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/init.c 2014-04-03 11:26:03.908867208 +0200
-@@ -332,7 +332,7 @@ static Namfun_t *clone_optindex(Namval_t
- /* Trap for restricted variables FPATH, PATH, SHELL, ENV */
- static void put_restricted(register Namval_t* np,const char *val,int flags,Namfun_t
*fp)
- {
-- Shell_t *shp = nv_shell(np);
-+ Shell_t *shp = sh_getinterp();
- int path_scoped = 0, fpath_scoped=0;
- Pathcomp_t *pp;
- char *name = nv_name(np);
diff --git a/ksh-20120801-trapcom.patch b/ksh-20120801-trapcom.patch
deleted file mode 100644
index 91cb1a8..0000000
--- a/ksh-20120801-trapcom.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.orig
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.orig 2015-08-13 15:20:14.022167794 -0300
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2015-08-13 15:21:43.263088168 -0300
-@@ -481,12 +481,12 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- {
- struct subshell sub_data;
- register struct subshell *sp = &sub_data;
-- int jmpval,nsig=0,duped=0;
-+ int jmpval,isig,nsig=0,duped=0;
- long savecurenv = shp->curenv;
- int savejobpgid = job.curpgid;
- int *saveexitval = job.exitval;
- int16_t subshell;
-- char *savsig;
-+ char **savsig;
- Sfio_t *iop=0;
- struct checkpt buff;
- struct sh_scoped savst;
-@@ -561,10 +561,13 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- /* save trap table */
- shp->st.otrapcom = 0;
- shp->st.otrap = savst.trap;
-- if((nsig=shp->st.trapmax*sizeof(char*))>0 || shp->st.trapcom[0])
-+ if((nsig=shp->st.trapmax)>0 || shp->st.trapcom[0])
- {
-- nsig += sizeof(char*);
-- memcpy(savsig=malloc(nsig),(char*)&shp->st.trapcom[0],nsig);
-+ ++nsig;
-+ savsig = malloc(nsig * sizeof(char*));
-+ /* contents of shp->st.trapcom may change */
-+ for (isig = 0; isig < nsig; ++isig)
-+ savsig[isig] = shp->st.trapcom[isig] == Empty ? Empty : (shp->st.trapcom[isig]
? strdup(shp->st.trapcom[isig]) : NULL);
- /* this nonsense needed for $(trap) */
- shp->st.otrapcom = (char**)savsig;
- }
-@@ -732,7 +735,10 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- shp->st.otrap = 0;
- if(nsig)
- {
-- memcpy((char*)&shp->st.trapcom[0],savsig,nsig);
-+ for (isig = 0; isig < nsig; ++isig)
-+ if (shp->st.trapcom[isig] && shp->st.trapcom[isig]!=Empty)
-+ free(shp->st.trapcom[isig]);
-+ memcpy((char*)&shp->st.trapcom[0],savsig,nsig*sizeof(char*));
- free((void*)savsig);
- }
- shp->options = sp->options;
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.orig ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.orig 2015-08-13 15:22:09.821062351 -0300
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2015-08-13 15:28:06.166662530 -0300
-@@ -3383,10 +3383,10 @@ int sh_funscope(int argn, char *argv[],i
- struct dolnod *argsav=0,*saveargfor;
- struct sh_scoped savst, *prevscope = shp->st.self;
- struct argnod *envlist=0;
-- int jmpval;
-+ int isig,jmpval;
- volatile int r = 0;
- int n;
-- char *savstak;
-+ char **savsig;
- struct funenv *fp = 0;
- struct checkpt *buffp = (struct checkpt*)stkalloc(shp->stk,sizeof(struct checkpt));
- Namval_t *nspace = shp->namespace;
-@@ -3435,10 +3435,13 @@ int sh_funscope(int argn, char *argv[],i
- }
- shp->st.cmdname = argv[0];
- /* save trap table */
-- if((nsig=shp->st.trapmax*sizeof(char*))>0 || shp->st.trapcom[0])
-+ if((nsig=shp->st.trapmax)>0 || shp->st.trapcom[0])
- {
-- nsig += sizeof(char*);
-- memcpy(savstak=stakalloc(nsig),(char*)&shp->st.trapcom[0],nsig);
-+ ++nsig;
-+ savsig = malloc(nsig * sizeof(char*));
-+ /* contents of shp->st.trapcom may change */
-+ for (isig = 0; isig < nsig; ++isig)
-+ savsig[isig] = shp->st.trapcom[isig] == Empty ? Empty : (shp->st.trapcom[isig]
? strdup(shp->st.trapcom[isig]) : NULL);
- }
- sh_sigreset(0);
- argsav = sh_argnew(shp,argv,&saveargfor);
-@@ -3502,10 +3505,14 @@ int sh_funscope(int argn, char *argv[],i
- shp->topscope = (Shscope_t*)prevscope;
- nv_getval(sh_scoped(shp,IFSNOD));
- if(nsig)
-- memcpy((char*)&shp->st.trapcom[0],savstak,nsig);
-+ {
-+ for (isig = 0; isig < nsig; ++isig)
-+ if (shp->st.trapcom[isig] && shp->st.trapcom[isig]!=Empty)
-+ free(shp->st.trapcom[isig]);
-+ memcpy((char*)&shp->st.trapcom[0],savsig,nsig*sizeof(char*));
-+ free((void*)savsig);
-+ }
- shp->trapnote=0;
-- if(nsig)
-- stakset(savstak,0);
- shp->options = options;
- shp->last_root = last_root;
- if(jmpval == SH_JMPSUB)
diff --git a/ksh-20120801-typeset.patch b/ksh-20120801-typeset.patch
deleted file mode 100644
index 03b56b8..0000000
--- a/ksh-20120801-typeset.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/src/cmd/ksh93/bltins/typeset.c b/src/cmd/ksh93/bltins/typeset.c
-index 15fcd58..8939011 100644
---- a/src/cmd/ksh93/bltins/typeset.c
-+++ b/src/cmd/ksh93/bltins/typeset.c
-@@ -1442,7 +1442,7 @@ static void print_scan(Sfio_t *file, int flag, Dt_t *root, int
option,struct tda
- tp->scanmask |= (NV_DOUBLE|NV_EXPNOTE);
- if(flag==NV_LTOU || flag==NV_UTOL)
- tp->scanmask |= NV_UTOL|NV_LTOU;
-- namec = nv_scan(root,nullscan,(void*)tp,tp->scanmask,flag);
-+ namec = nv_scan(root,nullscan,(void*)tp,tp->scanmask,flag&~NV_IARRAY);
- argv = tp->argnam = (char**)stkalloc(tp->sh->stk,(namec+1)*sizeof(char*));
- namec = nv_scan(root, pushname, (void*)tp, tp->scanmask, flag&~NV_IARRAY);
- if(mbcoll())
---
-2.9.3
-
diff --git a/ksh-20120801-unset-param.patch b/ksh-20120801-unset-param.patch
deleted file mode 100644
index 7777270..0000000
--- a/ksh-20120801-unset-param.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/macro.c.bz1222025
ksh-20120801/src/cmd/ksh93/sh/macro.c
---- ksh-20120801/src/cmd/ksh93/sh/macro.c.bz1222025 2015-09-15 17:28:47.304722569 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/macro.c 2015-09-17 17:49:46.842891942 +0200
-@@ -1195,6 +1195,13 @@ retry1:
- }
- else
- v = 0;
-+ if(!v && sh_isoption(SH_NOUNSET))
-+ {
-+ d=fcget();
-+ fcseek(-1);
-+ if(!(d && strchr(":+-?=",d)))
-+ errormsg(SH_DICT,ERROR_exit(1),e_notset,ltos(c));
-+ }
- break;
- case S_ALP:
- if(c=='.' && type==0)
diff --git a/ksh-20120801-validate-fd.patch b/ksh-20120801-validate-fd.patch
deleted file mode 100644
index a0bc7d2..0000000
--- a/ksh-20120801-validate-fd.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff --git a/src/cmd/ksh93/sh/xec.c b/src/cmd/ksh93/sh/xec.c
---- a/src/cmd/ksh93/sh/xec.c
-+++ b/src/cmd/ksh93/sh/xec.c
-@@ -122,6 +122,7 @@ int iousepipe(Shell_t *shp)
- return(1);
- }
- subpipe[2] = sh_fcntl(fd,F_dupfd_cloexec,10);
-+ sh_iovalidfd(shp,subpipe[2]);
- shp->fdstatus[subpipe[2]] = shp->fdstatus[1];
- while(close(fd)<0 && errno==EINTR)
- errno = err;
diff --git a/ksh-20120801-xufix.patch b/ksh-20120801-xufix.patch
deleted file mode 100644
index 496e0bf..0000000
--- a/ksh-20120801-xufix.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/bltins/typeset.c.xufix
ksh-20120801/src/cmd/ksh93/bltins/typeset.c
---- ksh-20120801/src/cmd/ksh93/bltins/typeset.c.xufix 2015-02-03 14:47:23.266022137
+0100
-+++ ksh-20120801/src/cmd/ksh93/bltins/typeset.c 2015-02-03 14:47:23.308022046 +0100
-@@ -93,6 +93,8 @@ int b_readonly(int argc,char *argv[],
- memset((void*)&tdata,0,sizeof(tdata));
- tdata.sh = context->shp;
- tdata.aflag = '-';
-+ /* do not change size */
-+ tdata.argnum = -1;
- while((flag = optget(argv,*command=='e'?sh_optexport:sh_optreadonly)))
switch(flag)
- {
- case 'p':
-diff -up ksh-20120801/src/cmd/ksh93/sh/name.c.xufix ksh-20120801/src/cmd/ksh93/sh/name.c
---- ksh-20120801/src/cmd/ksh93/sh/name.c.xufix 2015-02-03 14:47:23.281022105 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/name.c 2015-02-03 14:52:08.768404194 +0100
-@@ -3019,10 +3019,12 @@ void nv_newattr (register Namval_t *np,
- nv_onattr(np,NV_EXPORT);
- sh_envput(shp->env,np);
- }
-- if((n^newatts)==NV_EXPORT)
-+ if((n^newatts)==NV_EXPORT && size==-1)
- return;
- }
- oldsize = nv_size(np);
-+ if (size == -1)
-+ size = oldsize;
- if((size==oldsize|| (n&NV_INTEGER)) && !trans &&
((n^newatts)&~NV_NOCHANGE)==0)
- {
- if(size)
diff --git a/ksh-20130214-fixkill.patch b/ksh-20130214-fixkill.patch
deleted file mode 100644
index 0862880..0000000
--- a/ksh-20130214-fixkill.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up ksh-20130214/src/cmd/ksh93/sh/jobs.c.fixkill
ksh-20130214/src/cmd/ksh93/sh/jobs.c
---- ksh-20130214/src/cmd/ksh93/sh/jobs.c.fixkill 2012-09-26 17:43:04.000000000 +0200
-+++ ksh-20130214/src/cmd/ksh93/sh/jobs.c 2013-02-22 16:38:05.080161740 +0100
-@@ -1104,6 +1104,8 @@ static struct process *job_bystring(regi
-
- int job_kill(register struct process *pw,register int sig)
- {
-+ if(pw==0)
-+ goto error;
- Shell_t *shp = pw->p_shp;
- register pid_t pid;
- register int r;
-@@ -1127,8 +1129,6 @@ int job_kill(register struct process *pw
- #endif /* SIGTSTP */
- job_lock();
- errno = ECHILD;
-- if(pw==0)
-- goto error;
- pid = pw->p_pid;
- #if SHOPT_COSHELL
- if(pw->p_cojob)
diff --git a/ksh-20130613-cdfix4.patch b/ksh-20130613-cdfix4.patch
deleted file mode 100644
index 5b29017..0000000
--- a/ksh-20130613-cdfix4.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix4
ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c
---- ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix4 2014-08-26 15:24:57.276953822
+0200
-+++ ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c 2014-08-26 15:25:34.738770361 +0200
-@@ -143,9 +143,9 @@ int sh_diropenat(Shell_t *shp, int dir,
- }
-
- /* Move fd to a number > 10 and *register* the fd number with the shell */
-- shfd = sh_fcntl(fd, F_dupfd_cloexec, 10);
-+ shfd = fcntl(fd, F_dupfd_cloexec, 10);
- savederrno=errno;
-- sh_close(fd);
-+ close(fd);
- errno=savederrno;
- return(shfd);
- }
diff --git a/ksh-20130628-longer.patch b/ksh-20130628-longer.patch
deleted file mode 100644
index 4761a34..0000000
--- a/ksh-20130628-longer.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/include/defs.h.longer
ksh-20120801/src/cmd/ksh93/include/defs.h
---- ksh-20120801/src/cmd/ksh93/include/defs.h.longer 2012-06-25 20:47:47.000000000 +0200
-+++ ksh-20120801/src/cmd/ksh93/include/defs.h 2013-07-08 17:33:42.238534376 +0200
-@@ -162,8 +162,8 @@ struct shared
- Namval_t *prev_table; /* previous table used in nv_open */ \
- Sfio_t *outpool; /* ouput stream pool */ \
- long timeout; /* read timeout */ \
-- short curenv; /* current subshell number */ \
-- short jobenv; /* subshell number for jobs */ \
-+ long curenv; /* current subshell number */ \
-+ long jobenv; /* subshell number for jobs */ \
- int infd; /* input file descriptor */ \
- short nextprompt; /* next prompt is PS<nextprompt> */ \
- short poolfiles; \
-diff -up ksh-20120801/src/cmd/ksh93/include/jobs.h.longer
ksh-20120801/src/cmd/ksh93/include/jobs.h
---- ksh-20120801/src/cmd/ksh93/include/jobs.h.longer 2011-12-19 13:36:37.000000000 +0100
-+++ ksh-20120801/src/cmd/ksh93/include/jobs.h 2013-07-08 17:32:52.881124147 +0200
-@@ -87,7 +87,7 @@ struct process
- unsigned short p_exit; /* exit value or signal number */
- unsigned short p_exitmin; /* minimum exit value for xargs */
- unsigned short p_flag; /* flags - see below */
-- int p_env; /* subshell environment number */
-+ long p_env; /* subshell environment number */
- #ifdef JOBS
- off_t p_name; /* history file offset for command */
- struct termios p_stty; /* terminal state for job */
-diff -up ksh-20120801/src/cmd/ksh93/sh/jobs.c.longer
ksh-20120801/src/cmd/ksh93/sh/jobs.c
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.longer
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.longer 2013-07-08 17:32:52.874124090 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2013-07-08 17:32:52.882124156 +0200
-@@ -98,7 +98,7 @@ static struct subshell
- #endif /* SHOPT_COSHELL */
- } *subshell_data;
-
--static int subenv;
-+static long subenv;
-
-
- /*
-@@ -171,7 +171,8 @@ void sh_subfork(void)
- {
- register struct subshell *sp = subshell_data;
- Shell_t *shp = sp->shp;
-- int curenv = shp->curenv, comsub=shp->comsub;
-+ long curenv = shp->curenv;
-+ int comsub=shp->comsub;
- pid_t pid;
- char *trap = shp->st.trapcom[0];
- if(trap)
-@@ -461,7 +462,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- struct subshell sub_data;
- register struct subshell *sp = &sub_data;
- int jmpval,nsig=0,duped=0;
-- int savecurenv = shp->curenv;
-+ long savecurenv = shp->curenv;
- int savejobpgid = job.curpgid;
- int *saveexitval = job.exitval;
- int16_t subshell;
diff --git a/ksh-20140301-fikspand.patch b/ksh-20140301-fikspand.patch
deleted file mode 100644
index 9899392..0000000
--- a/ksh-20140301-fikspand.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/expand.c.fikspand
ksh-20120801/src/cmd/ksh93/sh/expand.c
---- ksh-20120801/src/cmd/ksh93/sh/expand.c.fikspand 2010-11-24 05:46:30.000000000 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/expand.c 2014-05-22 12:55:46.252717371 +0200
-@@ -278,6 +278,8 @@ int path_generate(Shell_t *shp,struct ar
- char comma, range=0;
- int first, last, incr, count = 0;
- char tmp[32], end[1];
-+ if(!sh_isoption(SH_BRACEEXPAND))
-+ return path_expand(shp,todo->argval,arghead);
- todo->argchn.ap = 0;
- again:
- apin = ap = todo;
diff --git a/ksh-20140415-hokaido.patch b/ksh-20140415-hokaido.patch
deleted file mode 100644
index 5ff6927..0000000
--- a/ksh-20140415-hokaido.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.hokaido ksh-20120801/src/cmd/ksh93/sh/xec.c
---- ksh-20120801/src/cmd/ksh93/sh/xec.c.hokaido 2014-09-18 14:41:57.696756230 +0200
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2014-09-18 14:43:55.439205247 +0200
-@@ -1633,12 +1633,20 @@ int sh_exec(register const Shnode_t *t,
- #endif /* SHOPT_COSHELL */
- if(shp->subshell)
- {
-+ int comsubsave = shp->comsub;
-+ if(comsubsave==1)
-+ shp->comsub = 2;
- sh_subtmpfile(shp);
-+ shp->comsub = comsubsave;
-+ if(shp->comsub==1 && (!(shp->fdstatus[1]&IONOSEEK)))
-+ unpipe = iousepipe(shp);
-+
- if((type&(FAMP|TFORK))==(FAMP|TFORK))
- {
- if(shp->comsub && !(shp->fdstatus[1]&IONOSEEK))
- {
-- unpipe = iousepipe(shp);
-+ if (!unpipe)
-+ unpipe = iousepipe(shp);
- sh_subfork();
- }
- }
-@@ -2107,7 +2115,11 @@ int sh_exec(register const Shnode_t *t,
- job.curjobid = 0;
- if(shp->subshell)
- {
-+ int comsubsave = shp->comsub;
-+ if(comsubsave==1)
-+ shp->comsub = 2;
- sh_subtmpfile(shp);
-+ shp->comsub = comsubsave;
- if(shp->comsub==1 && !(shp->fdstatus[1]&IONOSEEK))
- iousepipe(shp);
- }
diff --git a/ksh-20140801-arraylen.patch b/ksh-20140801-arraylen.patch
deleted file mode 100644
index 34c9b6b..0000000
--- a/ksh-20140801-arraylen.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- ksh-20120801/src/cmd/ksh93/sh/xec.c 2015-04-02 10:55:26.228017873 -0400
-+++ ksh-20120801/src/cmd/ksh93/sh/xec.c 2015-04-02 10:56:04.099017700 -0400
-@@ -1234,7 +1234,7 @@ int sh_exec(register const Shnode_t *t,
- if((io||argn))
- {
- Shbltin_t *bp=0;
-- static char *argv[1];
-+ static char *argv[2];
- int tflags = 1;
- if(np && nv_isattr(np,BLT_DCL))
- tflags |= 2;
diff --git a/ksh-20140801-diskfull.patch b/ksh-20140801-diskfull.patch
deleted file mode 100644
index 7276363..0000000
--- a/ksh-20140801-diskfull.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/main.c.orig ksh-20120801/src/cmd/ksh93/sh/main.c
---- ksh-20120801/src/cmd/ksh93/sh/main.c.orig 2015-04-29 16:49:11.502958000 -0300
-+++ ksh-20120801/src/cmd/ksh93/sh/main.c 2015-05-08 18:19:55.688776922 -0300
-@@ -423,7 +423,7 @@ static void exfile(register Shell_t *shp
- sfsync(shp->outpool);
- shp->st.execbrk = shp->st.breakcnt = 0;
- /* check for return from profile or env file */
-- if(sh_isstate(SH_PROFILE) && (jmpval==SH_JMPFUN || jmpval==SH_JMPEXIT))
-+ if(sh_isstate(SH_PROFILE) && (jmpval==SH_JMPFUN || jmpval==SH_JMPEXIT ||
jmpval==SH_JMPERREXIT))
- {
- sh_setstate(states);
- goto done;
-@@ -598,7 +598,7 @@ done:
- }
- if(jmpval == SH_JMPSCRIPT)
- siglongjmp(*shp->jmplist,jmpval);
-- else if(jmpval == SH_JMPEXIT)
-+ else if(jmpval == SH_JMPEXIT || jmpval == SH_JMPERREXIT)
- sh_done(shp,0);
- if(fno>0)
- sh_close(fno);
diff --git a/ksh-20140929-safefd.patch b/ksh-20140929-safefd.patch
deleted file mode 100644
index 80db205..0000000
--- a/ksh-20140929-safefd.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/include/io.h.safefd
ksh-20120801/src/cmd/ksh93/include/io.h
---- ksh-20120801/src/cmd/ksh93/include/io.h.safefd 2015-03-03 18:21:40.544732158 +0100
-+++ ksh-20120801/src/cmd/ksh93/include/io.h 2015-03-03 18:22:16.284447849 +0100
-@@ -78,6 +78,7 @@ extern void sh_iorestore(Shell_t*,int,i
- extern Sfio_t *sh_iostream(Shell_t*,int);
- extern int sh_redirect(Shell_t*,struct ionod*,int);
- extern void sh_iosave(Shell_t *, int,int,char*);
-+extern int safefdnumber(Shell_t* shp, int sfd);
- extern int sh_iovalidfd(Shell_t*, int);
- extern int sh_inuse(Shell_t*, int);
- extern void sh_iounsave(Shell_t*);
-diff -up ksh-20120801/src/cmd/ksh93/sh/io.c.safefd ksh-20120801/src/cmd/ksh93/sh/io.c
---- ksh-20120801/src/cmd/ksh93/sh/io.c.safefd 2015-03-03 18:21:40.511732421 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/io.c 2015-03-03 18:21:40.544732158 +0100
-@@ -1724,6 +1724,25 @@ void sh_iosave(Shell_t *shp, register in
- }
- }
-
-+int safefdnumber(Shell_t* shp, int sfd)
-+{
-+ register int fd;
-+
-+ while(1)
-+ {
-+ for(fd=0; fd < shp->topfd; fd++)
-+ {
-+ if (filemap[fd].save_fd==sfd || filemap[fd].orig_fd==sfd || (fcntl(sfd, F_GETFD) !=
-1 || errno != EBADF))
-+ {
-+ sfd++;
-+ continue;
-+ }
-+ }
-+ break;
-+ }
-+ return sfd;
-+}
-+
- /*
- * close all saved file descriptors
- */
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.safefd
ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.safefd 2015-03-03 18:21:40.531732261 +0100
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2015-03-03 18:21:40.544732158 +0100
-@@ -673,7 +673,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- }
- if(iop && sffileno(iop)==1)
- {
-- int fd=sfsetfd(iop,3);
-+ int fd=sfsetfd(iop,safefdnumber(shp,3));
- if(fd<0)
- {
- shp->toomany = 1;
diff --git a/ksh.spec b/ksh.spec
index b591ee4..330bd81 100644
--- a/ksh.spec
+++ b/ksh.spec
@@ -1,321 +1,96 @@
-%global releasedate 20120801
-%global release_date
%{lua:reldate=rpm.expand("%{releasedate}");print(("%s-%s-%s"):format(reldate:sub(0,4),reldate:sub(5,6),reldate:sub(7)))}
-
Name: ksh
Summary: The Original ATT Korn Shell
URL:
http://www.kornshell.com/
License: EPL
-Version: %{releasedate}
-Release: 250%{?dist}
-Source0:
http://www.research.att.com/~gsf/download/tgz/ast-ksh.%{release_date}.tgz
-Source1:
http://www.research.att.com/~gsf/download/tgz/INIT.%{release_date}.tgz
-Source2: kshcomp.conf
-Source3: kshrc.rhs
-Source4: dotkshrc
-
-# expected results of test suite
-Source5: expectedresults.log
-
-# don't use not wanted/needed builtins - Fedora/RHEL specific
-Patch1: ksh-20070328-builtins.patch
-
-# fix regression test suite to be usable during packagebuild - Fedora/RHEL specific
-Patch2: ksh-20100826-fixregr.patch
-
-# fedora/rhel specific, rhbz#619692
-Patch6: ksh-20080202-manfix.patch
-
-# rhbz#702008
-Patch17: ksh-20100202-pathvar.patch
-
-# rhbz#924440
-Patch18: ksh-20100621-fdstatus.patch
-
-# fixes for regressions found in ksh-20120801 rebase
-Patch19: ksh-20120801-rmdirfix.patch
-Patch20: ksh-20120801-cdfix.patch
-Patch21: ksh-20120801-cdfix2.patch
-Patch22: ksh-20120801-tabfix.patch
-Patch23: ksh-20130214-fixkill.patch
-
-# for ksh <= 2013-05-31, rhbz#960034
-Patch24: ksh-20120801-kshmfix.patch
-
-# for ksh <= 2016-06-28, rhbz#921455
-Patch25: ksh-20120801-memlik.patch
-
-# for ksh <= 2013-03-20, rhbz#922851
-Patch26: ksh-20120801-forkbomb.patch
-
-# for ksh <= 2013-04-19, rhbz#913110
-Patch27: ksh-20120801-macro.patch
-
-# not completely upstream yet, rhbz#858263
-Patch29: ksh-20130628-longer.patch
-
-# for ksh <= 2013-07-19, rhbz#982142
-Patch30: ksh-20120801-mlikfiks.patch
-
-# not yet upstream, related to 2012-08-01 rebase
-Patch31: ksh-20120801-covsfix.patch
-
-# rhbz#1007816
-Patch32: ksh-20100621-manfix3.patch
-
-# rhbz#1016611
-Patch33: ksh-20120801-nomulti.patch
-
-# for ksh <= 2014-01-14, rhbz#
-Patch34: ksh-20120801-mtty.patch
-
-# from upstream, rbzh#1048272
-Patch35: ksh-20120801-fd2lost.patch
-
-# sent upstream 2014-01, rhbz#1047507
-Patch36: ksh-20120801-argvfix.patch
-
-# for ksh <= 2014-01-14, rhbz#1048995
-Patch37: ksh-20120801-memlik3.patch
-
-# for ksh <= 2013-04-09, rhbz#960371
-Patch38: ksh-20120801-lexfix.patch
-
-# not yet upstream, for ksh <= 2014-02-26, rhbz#1070328
-Patch39: ksh-20120801-filecomsubst.patch
-
-# for ksh <= 2014-06-25, rhbz#825520,rhbz#1084406
-Patch40: ksh-20120801-crash.patch
-
-# for ksh < 2013-03-19, rhbz#1085385
-Patch41: ksh-20120801-sufix.patch
-
-# sent upstream, rhbz#1099935
-Patch42: ksh-20140301-fikspand.patch
-
-# for ksh < 2014-04-15, rhbz#1070871
-Patch43: ksh-20120801-roundit.patch
-
-# for ksh < 2014-04-15, rhbz#1111120
-Patch44: ksh-20120801-heresub.patch
-
-# not included upstream yet, rhbz#1077090
-Patch45: ksh-20140415-hokaido.patch
-
-# for ksh < 2012-10-04, rhbz#1121960
-Patch46: ksh-20120801-tpstl.patch
-
-# sent upstream, rhbz#1100215
-Patch47: ksh-20120801-manfix4.patch
-
-# not upstream yet, rhbz#1100215
-Patch48: ksh-20120801-fununset.patch
-
-# for ksh < 2014-06-25, rhbz#1109893
-Patch49: ksh-20120801-cdfix3.patch
-
-# sent upstream, rhbz#1116506
-Patch50: ksh-20120801-locking.patch
-
-# for ksh <= 2013-06-13, rhbz#1133585
-Patch51: ksh-20130613-cdfix4.patch
-
-Patch52: ksh-20120801-retfix.patch
-
-# sent upstream, for ksh <= 2014-09-30
-Patch53: ksh-20120801-cdfork.patch
-
-# not upstream yet, for ksh <= 2015-04-03, rhbz#1200534
-Patch54: ksh-20140801-arraylen.patch
-
-# sent upstream, for ksh <= 2014-09-29, rhbz#1212993
-Patch55: ksh-20140801-diskfull.patch
-
-# not upstream yet, rhbz#1192026
-Patch56: ksh-20120801-xufix.patch
-
-# sent upstream, for ksh <= 2014-12-18, rhbz#1192119
-Patch58: ksh-20120801-alarmifs.patch
-
-# not yet upstream, rhbz#1202439
-Patch59: ksh-20140929-safefd.patch
-
-# workaround, for ksh < 2013-05-24, rhbz#1211540
-Patch60: ksh-20120801-trapcom.patch
-
-# not yet upstream, rhbz#1217237
-Patch64: ksh-20120801-nohupfork.patch
-
-# from upstream, for ksh <= 20130409, rhbz#1241014
-Patch65: ksh-20120801-parserfix.patch
+Version: 2020.0.0
+Release: 0.1%{?dist}
+# We are upgrading from ksh-20120801-250, so set epoch.
+Epoch: 1
+Source0:
https://github.com/att/ast/releases/download/%{version}-alpha1/%{name}-%{...
+Source1: kshcomp.conf
+Source2: kshrc.rhs
+Source3: dotkshrc
-# not upstream yet, rhbz#1211538
-Patch66: ksh-20120801-oldenvinit.patch
-
-# from upsteam, for ksh < 2012-10-04, rhbz#1193557
-Patch67: ksh-20120801-emptyarrayinit.patch
-
-# not upstream yet, rhbz#1371630
-Patch68: ksh-20120801-typeset.patch
-
-# not upstream yet, rhbz#1321443
-Patch69: ksh-20120801-dotdoublefree.patch
-
-# not upstream yet, rhbz#1405784
-Patch70: ksh-20120801-subshell-leak.patch
-
-# rhbz#1189297
-Patch71: ksh-20120801-assoc-unset-leak.patch
-
-# rhbz#1222025
-Patch72: ksh-20120801-unset-param.patch
-
-# rhbz#1269088
-Patch73: ksh-20120801-badgcc.patch
-
-# rhbz#1299484
-Patch74: ksh-20120801-mb-after-argvar.patch
-Patch75: ksh-20120801-F_dupfd_cloexec.patch
-
-# rhbz#1441142
-Patch76: ksh-20120801-kia.patch
-
-# rhbz#1417886
-Patch77: ksh-20120801-iso8859.patch
-
-# rhbz#1451057
-Patch78: ksh-20120801-syntax-error.patch
-
-# rhbz#1477082
-Patch79: ksh-20120801-glibc-build-fix.patch
-
-# rhbz#1459000
-Patch80: ksh-20120801-jobwait-sigstop.patch
-
-# rhbz#1462347
-Patch81: ksh-20120801-subshell-jobwait.patch
-
-# rhbz#1471874
-Patch82: ksh-20120801-posix-exit.patch
-
-# rhbz#1464409
-Patch83: ksh-20120801-sh_iovalidfd.patch
-
-# rhbz#1537053
-Patch84: ksh-20120801-validate-fd.patch
-
-# There were couple of places where CCFLAGS variable was not passed while
-# compiling binaries. This patch fixes it. Loosely related to rhbz#1548549.
-Patch85: ksh-20120801-ccflags.patch
-
-Patch86: ksh-20120801-nv_open-memcmp.patch
+Provides: /bin/ksh
-Conflicts: pdksh
-Requires: coreutils, diffutils
-BuildRequires: gcc
-BuildRequires: bison
-# regression test suite uses 'ps' from procps
-BuildRequires: procps
-Requires(post): grep, coreutils, systemd
+BuildRequires: meson
+BuildRequires: gcc
+BuildRequires: glibc-devel
+# This package is require by test cases
+# It should be enabled when we start running test cases in package builds
+# BuildRequires: glibc-langpack-zh
+BuildRequires: ed
+Conflicts: pdksh
+Requires(post): grep, coreutils, systemd-units
Requires(postun): sed
-Provides: /bin/ksh
+Provides: /bin/ksh
%description
-KSH-93 is the most recent version of the KornShell by David Korn of
-AT&T Bell Laboratories.
KornShell is a shell programming language, which is upward compatible
with "sh" (the Bourne Shell).
%prep
-%setup -q -c
-%setup -q -T -D -a 1
-%autopatch -p1
-
-#/dev/fd test does not work because of mock
-sed -i 's|ls /dev/fd|ls /proc/self/fd|' src/cmd/ksh93/features/options
-
-# sh/main.c was not using CCFLAGS
-sed -i '/-c sh\/main.c/s|${mam_cc_FLAGS} |${mam_cc_FLAGS} ${CCFLAGS} |p'
src/cmd/ksh93/Mamfile
-
-# disable register for debugging
-sed -i 1i"#define register" src/lib/libast/include/ast.h
+%autosetup -n %{name}-%{version}-alpha1
%build
-XTRAFLAGS=""
-for f in -Wno-unknown-pragmas -Wno-missing-braces -Wno-unused-result -Wno-return-type
-Wno-int-to-pointer-cast -Wno-parentheses -Wno-unused -Wno-unused-but-set-variable
-Wno-cpp -P
-do
- gcc $f -E - </dev/null >/dev/null 2>&1 &&
XTRAFLAGS="$XTRAFLAGS $f"
-done
-./bin/package
-./bin/package make mamake ||:
-./bin/package make mamake ||:
-export CCFLAGS="$RPM_OPT_FLAGS $RPM_LD_FLAGS -fno-strict-aliasing $XTRAFLAGS"
-export CC=gcc
-./bin/package make -S
-
-#cp lib/package/LICENSES/epl LICENSE
+%meson -Dbuild-api-tests=false
+%meson_build
%install
-mkdir -p %{buildroot}{/bin,%{_bindir},%{_mandir}/man1}
-install -p -m 755 arch/*/bin/ksh %{buildroot}%{_bindir}/ksh
-install -p -m 755 arch/*/bin/shcomp %{buildroot}%{_bindir}/shcomp
-install -p -m 644 arch/*/man/man1/sh.1 %{buildroot}%{_mandir}/man1/ksh.1
-mkdir -p %{buildroot}%{_sysconfdir}/skel
-install -p -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/skel/.kshrc
-install -p -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/kshrc
-install -p -D -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/binfmt.d/kshcomp.conf
-
-%check
-[ -f ./skipcheck -o -f ./../skipcheck ] && exit 0 ||:
-%if 0%{?rhel} > 6
-%ifarch s390
-exit 0
-%endif
-%endif
-
-export SHELL=$(ls $(pwd)/arch/*/bin/ksh)
-cd src/cmd/ksh93/tests/
-ulimit -c unlimited
-if [ ! -e /dev/fd ]
+%meson_install
+# Allow switching between different ksh implementations (for e.g. mksh) through
alternatives.
+mv %{buildroot}/%{_bindir}/ksh %{buildroot}/%{_bindir}/ksh93
+mv %{buildroot}/%{_bindir}/shcomp %{buildroot}/%{_bindir}/shcomp93
+#
http://mesonbuild.com/Release-notes-for-0-49-0.html#manpages-are-no-longe...
+# meson 0.49 does not compress man pages
+if [[ -e %{buildroot}/%{_mandir}/man1/ksh.1.gz ]]
then
- echo "ERROR: /dev/fd does not exist, regression tests skipped"
- exit 0
-fi
-$SHELL ./shtests 2>&1 | tee testresults.log
-ls core.* 2>/dev/null ||:
-exit 0
-sed -e '/begins at/d' -e '/ 0 error/d' -e 's/at [^\[]*\[/\[/'
testresults.log -e '/tests skipped/d' >filteredresults.log
-if ! cmp filteredresults.log %{SOURCE5} >/dev/null || ls core.*
-then
- echo "Regression tests failed"
- diff -Naurp %{SOURCE5} filteredresults.log
- exit -1
+ mv %{buildroot}/%{_mandir}/man1/ksh.1.gz %{buildroot}/%{_mandir}/man1/ksh93.1.gz
+else
+ mv %{buildroot}/%{_mandir}/man1/ksh.1 %{buildroot}/%{_mandir}/man1/ksh93.1
fi
+install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/binfmt.d/kshcomp.conf
+install -p -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/kshrc
+install -p -D -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/skel/.kshrc
+
%post
-if [ ! -f /etc/shells ]; then
- echo "/bin/ksh" > /etc/shells
- echo "/usr/bin/ksh" >> /etc/shells
-else
- if ! grep -q '^/bin/ksh$' /etc/shells ; then
- echo "/bin/ksh" >> /etc/shells
- fi
- if ! grep -q '^/usr/bin/ksh$' /etc/shells ; then
- echo "/usr/bin/ksh" >> /etc/shells
+for s in /bin/ksh /usr/bin/ksh
+do
+ if [ ! -f /etc/shells ]; then
+ echo "$s" > /etc/shells
+ else
+ if ! grep -q '^'"$s"'$' /etc/shells ; then
+ echo "$s" >> /etc/shells
fi
-fi
+ fi
+done
/bin/systemctl try-restart systemd-binfmt.service >/dev/null 2>&1 || :
-%postun
-if [ ! -f /bin/ksh ]; then
- sed -i '/^\/bin\/ksh$/ d' /etc/shells
-fi
-if [ ! -f /usr/bin/ksh ]; then
- sed -i '/^\/usr\/bin\/ksh$/ d' /etc/shells
+# Suppress any error encountered while upgrading from ksh-20120801-250
+%{_sbindir}/alternatives --install /bin/ksh ksh \
+ /bin/ksh93 50 \
+ --slave %{_mandir}/man1/ksh.1.gz ksh-man \
+ %{_mandir}/man1/ksh93.1.gz \
+ --slave /bin/shcomp shcomp93 \
+ /bin/shcomp93 2>/dev/null
+
+%preun
+# Do not remove ksh from alternatives on upgrades
+if [ $1 -eq 0 ]; then
+ %{_sbindir}/alternatives --remove ksh /bin/ksh93
fi
-%verifyscript
+%postun
+for s in /bin/ksh /usr/bin/ksh
+do
+ if [ ! -f $s ]; then
+ sed -i '\|^'"$s"'$|d' /etc/shells
+ fi
+done
+
echo -n "Looking for ksh in /etc/shells... "
if ! grep '^/bin/ksh$' /etc/shells > /dev/null; then
echo "missing"
@@ -324,17 +99,26 @@ else
echo "found"
fi
+# ksh-20120801-250 did not use alternatives, so while upgrading ensure that
+# alternatives are set correctly
+%triggerpostun -- ksh < 1:2020.0.0-0.1
+%{_sbindir}/alternatives --auto ksh
+
%files
%doc src/cmd/ksh93/COMPATIBILITY src/cmd/ksh93/RELEASE src/cmd/ksh93/TYPES
# LICENSE file is missing, temporarily?
-%{_bindir}/ksh
-%{_bindir}/shcomp
+%{_bindir}/ksh93
+%{_bindir}/shcomp93
%{_mandir}/man1/*
%config(noreplace) %{_sysconfdir}/skel/.kshrc
%config(noreplace) %{_sysconfdir}/kshrc
%config(noreplace) %{_sysconfdir}/binfmt.d/kshcomp.conf
%changelog
+* Wed Apr 17 2019 Siteshwar Vashisht <svashisht(a)redhat.com> - 2020.0.0-0.1
+- Rebase to 2020.0.0-alpha1
+ Resolves: #1700777
+
* Fri Feb 01 2019 Fedora Release Engineering <releng(a)fedoraproject.org> -
20120801-250
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
diff --git a/sources b/sources
index 935961b..9fd6ceb 100644
--- a/sources
+++ b/sources
@@ -1,2 +1 @@
-3a6e2d01b1b049bdef968dc5a24c1ea7 ast-ksh.2012-08-01.tgz
-af699318bea7398f0f413b839bfcd762 INIT.2012-08-01.tgz
+SHA512 (ksh-2020.0.0-alpha1.tar.gz) =
56c805bebe963dee7c27ba0357e26957fd8439f42c26f290ab32488ddde99f4b824e403c5dc097194eaf600e7379a010b1be4bf1e70bee76402e84909b38d981