<pre style='margin:0'>
Herby Gillot (herbygillot) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/57d775ae0697f1cd206dd12274d08b98cd103703">https://github.com/macports/macports-ports/commit/57d775ae0697f1cd206dd12274d08b98cd103703</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 57d775ae069 got: re-fix build on macOS <13
</span>57d775ae069 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 57d775ae0697f1cd206dd12274d08b98cd103703
</span>Author: aeiouaeiouaeiouaeiouaeiouaeiou <aeioudev@outlook.com>
AuthorDate: Sun Mar 23 02:28:56 2025 +0300

<span style='display:block; white-space:pre;color:#404040;'>    got: re-fix build on macOS <13
</span>---
 devel/got/Portfile                    |   7 +-
 devel/got/files/patch-vis-compat.diff | 288 +++++++++++++++++++++++++++++++++-
 2 files changed, 290 insertions(+), 5 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/got/Portfile b/devel/got/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index c35603f38d8..8aaa19446a6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/got/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/got/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -40,19 +40,20 @@ if {${os.platform} eq "darwin" && ${os.major} < 22} {
</span> # memset_s() is not available on macOS <10.9, so
 # emulate it with volatile memset().
 if {${os.platform} eq "darwin" && ${os.major} < 13} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    patchfiles          patch-use-volatile-memset.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append   patch-use-volatile-memset.diff
</span> }
 # There is probably a smarter way to do this, see failed attempts at
 # https://trac.macports.org/ticket/69827
 # So, if you, like me, are using LibreSSL, remove the port:libretls line
 # as that is only required for OpenSSL users to supply libtls which is
 # already included with LibreSSL.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_lib         path:lib/libssl.dylib:openssl \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_lib-append  path:lib/libssl.dylib:openssl \
</span>                     port:libretls \
                     port:ncurses \
                     port:ossp-uuid \
                     port:libevent
<span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_build       port:bison \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    port:bison \
</span>                     path:bin/pkg-config:pkgconfig
 livecheck.type      regex
 livecheck.url       https://gameoftrees.org/
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/got/files/patch-vis-compat.diff b/devel/got/files/patch-vis-compat.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index b256a60d43a..e96f785f7dd 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/got/files/patch-vis-compat.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/got/files/patch-vis-compat.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,11 +5,295 @@
</span>  
  if HOST_DARWIN
 -libopenbsd_compat_a_SOURCES += uuid.c bsd-poll.c bsd-poll.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+libopenbsd_compat_a_SOURCES += uuid.c bsd-poll.c bsd-poll.h vis.c vis.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++libopenbsd_compat_a_SOURCES += uuid.c bsd-poll.c bsd-poll.h unvis.c vis.c vis.h
</span>  endif
  
  if !HAVE_GETOPT
 --- /dev/null
<span style='display:block; white-space:pre;background:#e0ffe0;'>++++ compat/unvis.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,281 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*        $OpenBSD: unvis.c,v 1.12 2005/08/08 08:05:34 espie Exp $ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Copyright (c) 1989, 1993
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        The Regents of the University of California.  All rights reserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Redistribution and use in source and binary forms, with or without
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * modification, are permitted provided that the following conditions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * are met:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * 1. Redistributions of source code must retain the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *    notice, this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * 2. Redistributions in binary form must reproduce the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *    notice, this list of conditions and the following disclaimer in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *    documentation and/or other materials provided with the distribution.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * 3. Neither the name of the University nor the names of its contributors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *    may be used to endorse or promote products derived from this software
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *    without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * SUCH DAMAGE.
</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;'>++#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <ctype.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "vis.h"
</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;'>++ * decode driven by state machine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   S_GROUND        0       /* haven't seen escape char */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   S_START         1       /* start decoding special sequence */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   S_META          2       /* metachar started (M) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   S_META1         3       /* metachar more, regular char (-) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   S_CTRL          4       /* control char started (^) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   S_OCTAL2        5       /* octal digit 2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   S_OCTAL3        6       /* octal digit 3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   isoctal(c)      (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7')
</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;'>++ * unvis - decode characters previously encoded by vis
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++unvis(char *cp, char c, int *astate, int flag)
</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 (flag & UNVIS_END) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (*astate == S_OCTAL2 || *astate == S_OCTAL3) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (*astate == S_GROUND ? UNVIS_NOCHAR : UNVIS_SYNBAD);
</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;'>++  switch (*astate) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  case S_GROUND:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *cp = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (c == '\\') {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_START;
</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;'>++          *cp = c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  case S_START:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          switch(c) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\\':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '0': case '1': case '2': case '3':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '4': case '5': case '6': case '7':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = (c - '0');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_OCTAL2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 'M':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = (char) 0200;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_META;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '^':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_CTRL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 'n':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = '\n';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 'r':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = '\r';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 'b':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = '\b';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 'a':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = '\007';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 'v':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = '\v';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 't':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = '\t';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 'f':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = '\f';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 's':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = ' ';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 'E':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = '\033';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\n':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   * hidden newline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_NOCHAR);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '$':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   * hidden marker
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_NOCHAR);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (UNVIS_SYNBAD);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  case S_META:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (c == '-')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_META1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          else if (c == '^')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_CTRL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_SYNBAD);
</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;'>++  case S_META1:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *cp |= c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  case S_CTRL:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (c == '?')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp |= 0177;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp |= c & 037;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (UNVIS_VALID);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  case S_OCTAL2:  /* second possible octal digit */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (isoctal(c)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   * yes - and maybe a third
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = (*cp << 3) + (c - '0');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *astate = S_OCTAL3;
</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;'>++          /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           * no - done with current sequence, push back passed char
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (UNVIS_VALIDPUSH);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  case S_OCTAL3:  /* third possible octal digit */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (isoctal(c)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *cp = (*cp << 3) + (c - '0');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return (UNVIS_VALID);
</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;'>++           * we were done, push back passed char
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (UNVIS_VALIDPUSH);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           * decoder in unknown state - (probably uninitialized)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *astate = S_GROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (UNVIS_SYNBAD);
</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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * strunvis - decode src into dst
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        Number of chars decoded into dst is returned, -1 on error.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        Dst is null terminated.
</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;'>++int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++strunvis(char *dst, const char *src)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *start = dst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int state = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  while ((c = *src++)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  again:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          switch (unvis(dst, c, &state, 0)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case UNVIS_VALID:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  dst++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case UNVIS_VALIDPUSH:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  dst++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto again;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 0:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case UNVIS_NOCHAR:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst = '\0';
</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;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (unvis(dst, c, &state, UNVIS_END) == UNVIS_VALID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          dst++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  *dst = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return (dst - start);
</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;'>++ssize_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++strnunvis(char *dst, const char *src, size_t sz)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char c, p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *start = dst, *end = dst + sz - 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int state = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (sz > 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *end = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  while ((c = *src++)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  again:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          switch (unvis(&p, c, &state, 0)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case UNVIS_VALID:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  if (dst < end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          *dst = p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  dst++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case UNVIS_VALIDPUSH:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  if (dst < end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          *dst = p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  dst++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto again;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case 0:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case UNVIS_NOCHAR:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  if (dst <= end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          *dst = '\0';
</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;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (unvis(&p, c, &state, UNVIS_END) == UNVIS_VALID) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (dst < end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst = p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          dst++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (dst <= end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return (dst - start);
</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;'>+--- /dev/null
</span> +++ compat/vis.c
 @@ -0,0 +1,242 @@
 +/*    $OpenBSD: vis.c,v 1.24 2015/07/20 01:52:28 millert Exp $ */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -49,7 +333,7 @@
</span> +#include <string.h>
 +#include <stdlib.h>
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <vis.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "vis.h"
</span> +
 +#define       isoctal(c)      (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7')
 +#define       isvisible(c,flag)                                               \
</pre><pre style='margin:0'>

</pre>