<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>