<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/1576254a167e549937776a692ac31ef5dbf1a338">https://github.com/macports/macports-ports/commit/1576254a167e549937776a692ac31ef5dbf1a338</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 1576254a167e549937776a692ac31ef5dbf1a338
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Sun Dec 12 20:17:52 2021 -0600
<span style='display:block; white-space:pre;color:#404040;'> ksh93: Fix build due to memccpy misdetection
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/43392
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Also suppress implicit function declaration errors that cause the build to
</span><span style='display:block; white-space:pre;color:#404040;'> fail with Xcode 12 and later.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Add most remaining patches from Apple's ksh 93u+ build on the theory that
</span><span style='display:block; white-space:pre;color:#404040;'> they must be good for something.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Since we're forcing a rebuild anyway, take the opportunity to refine the
</span><span style='display:block; white-space:pre;color:#404040;'> version number so that "93u+" is included since some users may be looking
</span><span style='display:block; white-space:pre;color:#404040;'> for that.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> No longer deprecated now that development is continuing in the 93u+m fork.
</span>---
shells/ksh93/Portfile | 47 +++++++++++++++++-----
.../ksh93/files/ksh-20120801-subshell-leak.patch | 17 ++++++++
shells/ksh93/files/memccpy.patch | 37 +++++++++++++++++
shells/ksh93/files/src__cmd__ksh93__jobs.c.diff | 29 +++++++++++++
shells/ksh93/files/src__cmd__ksh93__parse.c.diff | 11 +++++
.../ksh93/files/src__cmd__ksh93__sh__array.c.diff | 26 ++++++++++++
.../files/src__lib__libast__comp__omitted.c.diff | 11 +++++
.../files/src__lib__libast__features__common.diff | 31 ++++++++++++++
.../files/src__lib__libast__features__lib.diff | 29 +++++++++++++
.../files/src__lib__libast__sfio__sfvprintf.c.diff | 29 +++++++++++++
10 files changed, 257 insertions(+), 10 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/Portfile b/shells/ksh93/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index c2e4e9ca242..6cd716cafa3 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/shells/ksh93/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,13 +1,14 @@
</span> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup deprecated 1.0
</span> PortGroup github 1.0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-epoch 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+epoch 2
</span> github.setup att ast 2012-08-01
<span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> name ksh93
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 93u+[string map {- {}} ${github.version}]
</span> conflicts ksh ksh-devel pdksh
categories shells
platforms darwin freebsd
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -20,23 +21,51 @@ long_description This is ksh 93u+, the last official version of \
</span> KornShell by David Korn and AT&T Research.
master_sites macports_distfiles
<span style='display:block; white-space:pre;background:#ffe0e0;'>-distfiles ast-ksh.$version.tgz \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- INIT.$version.tgz
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums ast-ksh.$version.tgz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+distfiles ast-ksh.${github.version}.tgz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ INIT.${github.version}.tgz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums ast-ksh.${github.version}.tgz \
</span> rmd160 74bf4735182a6b527e3eb5c5ae6d7854ea72d78b \
sha256 e6192cfa52a6a9fd20618cbaf3fa81f0cc9fd83525500757e83017275e962851 \
size 2053532 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- INIT.$version.tgz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ INIT.${github.version}.tgz \
</span> rmd160 48f1830bc85a26125dd986256d38be435668d445 \
sha256 c40cf57e9b2186271a9c362a560aa4a6e25ba911a8258ab931d2bbdbce44cfe5 \
size 377769
extract.mkdir yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles-append ksh-20120801-cve-2019-14868.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Most of these patchfiles are from Apple's ksh 93u+ build.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append ksh-20120801-cve-2019-14868.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ksh-20120801-subshell-leak.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ memccpy.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src__cmd__ksh93__jobs.c.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src__cmd__ksh93__parse.c.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src__cmd__ksh93__sh__array.c.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src__lib__libast__comp__omitted.c.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src__lib__libast__features__common.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src__lib__libast__features__lib.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src__lib__libast__sfio__sfvprintf.c.diff
</span>
use_configure no
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Apple uses this flag in their ksh 93u+ build. The problem with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# enabling this feature has been fixed in the ksh 93u+m fork.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cflags-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DSHOPT_SPAWN=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Apple uses this flag in their ksh 93u+ build. The ksh 93u+m fork
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# believes it to be a no-op, but keeping it here in case it wasn't a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# no-op back in 93u+.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cflags-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -D_ast_int8_t=int64_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This may be easy to fix with a patch; I haven't investigated. It's
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# already fixed in the ksh 93u+m fork.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# error: implicit declaration of function 'ioctl' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+supported_archs i386 ppc ppc64 x86_64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cflags-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -Wno-error=implicit-function-declaration
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> build.cmd bin/package
build.target make
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -72,6 +101,4 @@ proc ksharch {} {
</span> return [exec env {*}${build.env} ${build.dir}/${build.cmd} host type]
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-deprecated.maximum_osmajor 12
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-deprecated.upstream_support no
</span> livecheck.type none
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/ksh-20120801-subshell-leak.patch b/shells/ksh93/files/ksh-20120801-subshell-leak.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..0bb8983cbaa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/ksh-20120801-subshell-leak.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,17 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/cmd/ksh93/sh/path.c src/cmd/ksh93/sh/path.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d723987..9965bf5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/cmd/ksh93/sh/path.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/cmd/ksh93/sh/path.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1791,8 +1791,12 @@ void path_alias(register Namval_t *np,register Pathcomp_t *pp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct stat statb;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *sp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Pathcomp_t *old = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ nv_offattr(np,NV_NOPRINT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ nv_stack(np,&talias_init);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ old = (Pathcomp_t*)np->nvalue.cp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (old && (--old->refcount <= 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ free((void*)old);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ np->nvalue.cp = (char*)pp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pp->refcount++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ nv_setattr(np,NV_TAGGED|NV_NOFREE);
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/memccpy.patch b/shells/ksh93/files/memccpy.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..81cc19c3ec6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/memccpy.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,37 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Fix detection of memccpy. (Apple's build worked around the broken test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+by setting -D_lib_memccpy in CCFLAGS instead.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/ksh93/ksh/issues/373
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/ksh93/ksh/commit/5d8ae3604ac2dfa2b32056b296f243fff7e5c5d6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/lib/libast/features/lib.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/lib/libast/features/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -446,6 +446,9 @@ tst lib_memcmp string.h note{ standard memcmp interface that works }end execute{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }end
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tst lib_memccpy string.h unistd.h stdlib.h fcntl.h signal.h sys/types.h sys/stat.h sys/mman.h fcntl.h note{ standard memccpy interface that works }end execute{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #ifndef MAP_FAILED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #define MAP_FAILED ((void*)-1) /* introduced in POSIX-1.2017 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if _STD_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void gotcha(int sig)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -490,7 +493,7 @@ tst lib_memccpy string.h unistd.h stdlib.h fcntl.h signal.h sys/types.h sys/stat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m = n * (sizeof(x)-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!(b = mmap((void*)0, m, PROT_READ|PROT_WRITE, MAP_PRIVATE, d, (off_t)0)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((b = mmap((void*)0, m, PROT_READ|PROT_WRITE, MAP_PRIVATE, d, (off_t)0)) == MAP_FAILED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close(d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -544,9 +547,9 @@ tst lib_memccpy string.h unistd.h stdlib.h fcntl.h signal.h sys/types.h sys/stat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ((fd = open("/dev/zero", O_RDWR)) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!(srcbuf = (char*)mmap(NULL, siz, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((srcbuf = (char*)mmap(NULL, siz, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0)) == MAP_FAILED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!mmap(srcbuf + siz, siz, PROT_NONE, MAP_PRIVATE, fd, 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (mmap(srcbuf + siz, siz, PROT_NONE, MAP_PRIVATE, fd, 0) == MAP_FAILED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (i = 0; i < siz; i++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ srcbuf[i] = 'x';
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/src__cmd__ksh93__jobs.c.diff b/shells/ksh93/files/src__cmd__ksh93__jobs.c.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..1e438cae4f5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/src__cmd__ksh93__jobs.c.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,29 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/cmd/ksh93/sh/jobs.c~ 2007-07-03 19:27:28.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/cmd/ksh93/sh/jobs.c 2007-07-03 19:28:02.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -36,7 +36,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "jobs.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "history.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if !defined(WCONTINUED) || !defined(WIFCONTINUED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !defined(WCONTINUED) || !defined(WIFCONTINUED) || defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # undef WCONTINUED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define WCONTINUED 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # undef WIFCONTINUED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1440,7 +1443,7 @@ static struct process *job_unpost(regist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(pw)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return(pw);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* all processes complete, unpost job */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- job_unlink(pwtop);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (pwtop) job_unlink(pwtop);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for(pw=pwtop; pw; pw=pw->p_nxtproc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* save the exit status for background jobs */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1469,7 +1472,7 @@ static struct process *job_unpost(regist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sfprintf(sfstderr,"ksh: job line %4d: free pid=%d critical=%d job=%d\n",__LINE__,getpid(),job.in_critical,pwtop->p_job);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sfsync(sfstderr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* DEBUG */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- job_free((int)pwtop->p_job);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (pwtop) job_free((int)pwtop->p_job);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return((struct process*)0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/src__cmd__ksh93__parse.c.diff b/shells/ksh93/files/src__cmd__ksh93__parse.c.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..378744dd194
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/src__cmd__ksh93__parse.c.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/cmd/ksh93/sh/parse.c~ 2013-10-23 15:28:59.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/cmd/ksh93/sh/parse.c 2013-10-23 15:42:20.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -742,7 +742,7 @@ static Shnode_t *funct(Lex_t *lexp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ register Shnode_t *t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ register int flag;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct slnod *volatile slp=0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- Stak_t *savstak;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Stak_t *volatile savstak;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Sfoff_t first, last;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct functnod *volatile fp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Sfio_t *iop;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/src__cmd__ksh93__sh__array.c.diff b/shells/ksh93/files/src__cmd__ksh93__sh__array.c.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..e1e565cff42
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/src__cmd__ksh93__sh__array.c.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,26 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/cmd/ksh93/sh/array.c~ 2012-06-06 15:00:42.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/cmd/ksh93/sh/array.c 2014-02-08 18:25:11.000000000 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -682,8 +682,10 @@ static void array_putval(Namval_t *np, c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(is_associative(ap))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (*ap->fun)(np, NIL(char*), NV_AFREE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- else if(ap->table)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else if(ap->table) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dtclose(ap->table);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ap->table = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ nv_offattr(np,NV_ARRAY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!mp || mp!=np || is_associative(ap))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1700,8 +1702,10 @@ void *nv_associative(register Namval_t *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dtclose(ap->header.scope);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ap->header.scope = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dtclose(ap->header.table);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ap->header.table = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return((void*)ap);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case NV_ANEXT:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!ap->pos)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/src__lib__libast__comp__omitted.c.diff b/shells/ksh93/files/src__lib__libast__comp__omitted.c.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..b6dddb1aa9b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/src__lib__libast__comp__omitted.c.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/lib/libast/comp/omitted.c.orig 2018-12-04 17:28:01.000000000 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/lib/libast/comp/omitted.c 2018-12-04 17:28:13.000000000 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1091,7 +1091,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * own bsd-like macros
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if !_lib_bzero || defined(bzero)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !_lib_bzero
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef bzero
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/src__lib__libast__features__common.diff b/shells/ksh93/files/src__lib__libast__features__common.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..83670bee169
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/src__lib__libast__features__common.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,31 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/lib/libast/features/common.orig 2010-10-19 00:51:50.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/lib/libast/features/common 2011-06-03 12:01:49.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -256,7 +256,11 @@ tst - -DN=1 - -DN=2 - -DN=3 - -DN=4 - -D
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#ifndef _ast_int%d_t\n", m);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf("#define _ast_int%d_t %s\n", m, int_type[t].name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#endif\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (m > 1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (*int_type[t].swap)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -266,9 +270,13 @@ tst - -DN=1 - -DN=2 - -DN=3 - -DN=4 - -D
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf("#define _ast_intmax_t _ast_int%d_t\n", m);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (m == sizeof(long))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- printf("#define _ast_intmax_long 1\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- printf("#define _ast_intswap %d\n", w);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#if __LITTLE_ENDIAN__\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#define _ast_intswap 7\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#elif __BIG_ENDIAN__\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#define _ast_intswap 0\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#else\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#error Unknown byte sex\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ printf("#endif\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf("\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/src__lib__libast__features__lib.diff b/shells/ksh93/files/src__lib__libast__features__lib.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..16800875fe9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/src__lib__libast__features__lib.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,29 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/lib/libast/features/lib.orig 2004-12-02 16:13:10.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/lib/libast/features/lib 2005-05-25 22:16:41.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -327,6 +328,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int fds[2];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char buf[128];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct pollfd pfd;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static char msg[] = "abcd";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -344,6 +346,18 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (i = 0; i < sizeof(msg); i++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (buf[i] != msg[i])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (pipe(fds) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (write(fds[1], msg, sizeof(msg)) != sizeof(msg))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (recv(fds[0], buf, sizeof(buf), MSG_PEEK) != sizeof(msg))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ pfd.fd = fds[0];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ pfd.events = POLLIN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (poll(&pfd, 1, 0) != 1 || pfd.revents != POLLIN)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }end
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/shells/ksh93/files/src__lib__libast__sfio__sfvprintf.c.diff b/shells/ksh93/files/src__lib__libast__sfio__sfvprintf.c.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..997192ee6bc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/shells/ksh93/files/src__lib__libast__sfio__sfvprintf.c.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,29 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/lib/libast/sfio/sfvprintf.c.orig 2016-09-14 15:24:35.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/lib/libast/sfio/sfvprintf.c 2016-09-13 17:35:16.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -714,9 +714,11 @@ loop_fmt :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef mbwidth
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(wc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { n_w = mbwidth(*wsp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (n_w > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(precis >= 0 && (w+n_w) > precis )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ w += n_w;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -740,10 +742,14 @@ loop_fmt :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ osp = ssp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ n = mbchar(osp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!n)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ n_w = mbwidth(n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (n_w > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(precis >= 0 && (w+n_w) > precis )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ w += n_w;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ssp = osp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ v = ssp - sp;
</span></pre><pre style='margin:0'>
</pre>