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
commit 66346e7b07dab65a091832eab2c5e2b73389a78f
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Feb 1 06:05:28 2019 +0000
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/ksh.spec b/ksh.spec
index 2d6ab80..b591ee4 100644
--- a/ksh.spec
+++ b/ksh.spec
@@ -6,7 +6,7 @@ Summary: The Original ATT Korn Shell
URL:
http://www.kornshell.com/
License: EPL
Version: %{releasedate}
-Release: 249%{?dist}
+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
@@ -335,6 +335,9 @@ fi
%config(noreplace) %{_sysconfdir}/binfmt.d/kshcomp.conf
%changelog
+* Fri Feb 01 2019 Fedora Release Engineering <releng(a)fedoraproject.org> -
20120801-250
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
* Sun Oct 14 2018 Peter Robinson <pbrobinson(a)fedoraproject.org> 20120801-249
- chkconfig is no longer needed
commit 4e8c001ae97c7f5144dc48f6788f620b24d9f52e
Author: Peter Robinson <pbrobinson(a)gmail.com>
Date: Sun Oct 14 22:44:09 2018 +0100
chkconfig is no longer needed
diff --git a/ksh.spec b/ksh.spec
index 78db6bf..2d6ab80 100644
--- a/ksh.spec
+++ b/ksh.spec
@@ -6,7 +6,7 @@ Summary: The Original ATT Korn Shell
URL:
http://www.kornshell.com/
License: EPL
Version: %{releasedate}
-Release: 248%{?dist}
+Release: 249%{?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
@@ -210,12 +210,12 @@ Patch85: ksh-20120801-ccflags.patch
Patch86: ksh-20120801-nv_open-memcmp.patch
Conflicts: pdksh
-Requires: coreutils, diffutils, chkconfig
+Requires: coreutils, diffutils
BuildRequires: gcc
BuildRequires: bison
# regression test suite uses 'ps' from procps
BuildRequires: procps
-Requires(post): grep, coreutils, systemd-units
+Requires(post): grep, coreutils, systemd
Requires(postun): sed
Provides: /bin/ksh
@@ -335,6 +335,9 @@ fi
%config(noreplace) %{_sysconfdir}/binfmt.d/kshcomp.conf
%changelog
+* Sun Oct 14 2018 Peter Robinson <pbrobinson(a)fedoraproject.org> 20120801-249
+- chkconfig is no longer needed
+
* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> -
20120801-248
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
commit 82ac4c503a23661f6db658ed463b531e40595eed
Author: Petr plchal <psplicha(a)redhat.com>
Date: Wed Sep 12 09:04:27 2018 +0200
Use FMF filter instead of listing tests manually
There is a new feature in the Standard Test Roles which allows to
use an FMF filter instead of listing all tests manually. This
commit includes all Tier1 and Tier2 tests for respective targets.
diff --git a/tests/tests.yml b/tests/tests.yml
index b551d00..e483864 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -9,10 +9,7 @@
repositories:
- repo: "https://src.fedoraproject.org/tests/shell.git"
dest: "shell"
- tests:
- - shell/func
- - shell/login
- - shell/smoke
+ fmf_filter: "tier: 1, 2 & tags: classic"
environment:
PACKAGES: ksh
SH_BIN: ksh
@@ -30,9 +27,7 @@
repositories:
- repo: "https://src.fedoraproject.org/tests/shell.git"
dest: "shell"
- tests:
- - shell/func
- - shell/smoke
+ fmf_filter: "tier: 1, 2 & tags: container, atomic"
environment:
PACKAGES: ksh
SH_BIN: ksh