<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/71bb5270228ad75683c9df728ea9a78e7c8d587a">https://github.com/macports/macports-ports/commit/71bb5270228ad75683c9df728ea9a78e7c8d587a</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 71bb5270228 got: fix build on macOS <13
</span>71bb5270228 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 71bb5270228ad75683c9df728ea9a78e7c8d587a
</span>Author: aeiouaeiouaeiouaeiouaeiouaeiou <aeioudev@outlook.com>
AuthorDate: Mon Mar 17 07:19:29 2025 +0300

<span style='display:block; white-space:pre;color:#404040;'>    got: fix build on macOS <13
</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/71820
</span>---
 devel/got/Portfile                    |  11 +-
 devel/got/files/patch-vis-compat.diff | 344 ++++++++++++++++++++++++++++++++++
 2 files changed, 354 insertions(+), 1 deletion(-)

<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 a559fa41ec0..33e8695cd0b 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;'>@@ -27,7 +27,16 @@ checksums           rmd160 10049e7f6f987481ee13bdcc9f026fca6c3d7cbb \
</span>                     sha256 22d2dd54e15bc63fa0e55b289b4d587a43db33672414213c2ef718c5332c6a81 \
                     size 1527363
 # error: implicit declaration of function 'stravis' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-platforms           {darwin >= 22}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.macports.org/ticket/71820
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# backport vis.c wrapper from tmux
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# can be removed as soon as it appears in upstream
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.platform} eq "darwin" && ${os.major} < 22} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append   patch-vis-compat.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # these dependencies are necessary to re-detect the headers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    depends_build-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        port:autoconf \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        port:automake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</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;color:#808080;'>diff --git a/devel/got/files/patch-vis-compat.diff b/devel/got/files/patch-vis-compat.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..b256a60d43a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</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;'>@@ -0,0 +1,344 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- compat/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ compat/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -28,7 +28,7 @@ libopenbsd_compat_a_SOURCES += strlcat.c strlcpy.c
</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;'>+ if HOST_DARWIN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-libopenbsd_compat_a_SOURCES += uuid.c bsd-poll.c bsd-poll.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++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;'>+ endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if !HAVE_GETOPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ compat/vis.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,242 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*        $OpenBSD: vis.c,v 1.24 2015/07/20 01:52:28 millert 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 <errno.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <ctype.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <limits.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <string.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <stdlib.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;'>++#define   isoctal(c)      (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   isvisible(c,flag)                                               \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  (((c) == '\\' || (flag & VIS_ALL) == 0) &&                  \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  (((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c)) &&         \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  (((c) != '*' && (c) != '?' && (c) != '[' && (c) != '#') ||      \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          (flag & VIS_GLOB) == 0) && isgraph((u_char)(c))) || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ((flag & VIS_SP) == 0 && (c) == ' ') ||                             \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ((flag & VIS_TAB) == 0 && (c) == '\t') ||                   \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ((flag & VIS_NL) == 0 && (c) == '\n') ||                    \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ((flag & VIS_SAFE) && ((c) == '\b' ||                               \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          (c) == '\007' || (c) == '\r' ||                         \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          isgraph((u_char)(c))))))
</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;'>++ * vis - visually encode characters
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++char *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++vis(char *dst, int c, int flag, int nextc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (isvisible(c, flag)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if ((c == '"' && (flag & VIS_DQ) != 0) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              (c == '\\' && (flag & VIS_NOSLASH) == 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return (dst);
</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 & VIS_CSTYLE) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          switch(c) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\n':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = 'n';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\r':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = 'r';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\b':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = 'b';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\a':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = 'a';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\v':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = 'v';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\t':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = 't';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\f':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = 'f';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case ' ':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = 's';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          case '\0':
</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;'>++                  if (isoctal(nextc)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          *dst++ = '0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          *dst++ = '0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  goto done;
</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 (((c & 0177) == ' ') || (flag & VIS_OCTAL) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      ((flag & VIS_GLOB) && (c == '*' || c == '?' || c == '[' || c == '#'))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = ((u_char)c >> 6 & 07) + '0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = ((u_char)c >> 3 & 07) + '0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = ((u_char)c & 07) + '0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if ((flag & VIS_NOSLASH) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = '\\';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (c & 0200) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          c &= 0177;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = 'M';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (iscntrl((u_char)c)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = '^';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (c == 0177)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = '?';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = c + '@';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = '-';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst++ = c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++done:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  *dst = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return (dst);
</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;'>++ * strvis, strnvis, strvisx - visually encode characters from src into dst
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        Dst must be 4 times the size of src to account for possible
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        expansion.  The length of dst, not including the trailing NULL,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        is returned. 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        Strnvis will write no more than siz-1 bytes (and will NULL terminate).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        The number of bytes needed to fully encode the string is returned.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        Strvisx encodes exactly len bytes from src into dst.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *        This is useful for encoding a block of data.
</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;'>++strvis(char *dst, const char *src, int flag)
</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;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (start = dst; (c = *src);)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          dst = vis(dst, c, flag, *++src);
</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;'>++int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++strnvis(char *dst, const char *src, size_t siz, int flag)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *start, *end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char tbuf[5];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int c, i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  i = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (start = dst, end = start + siz - 1; (c = *src) && dst < end; ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (isvisible(c, flag)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  if ((c == '"' && (flag & VIS_DQ) != 0) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      (c == '\\' && (flag & VIS_NOSLASH) == 0)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          /* need space for the extra '\\' */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          if (dst + 1 >= end) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  i = 2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          }
</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;'>++                  i = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *dst++ = c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  src++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  i = vis(tbuf, c, flag, *++src) - tbuf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  if (dst + i <= end) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          memcpy(dst, tbuf, i);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          dst += i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          src--;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          break;
</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;'>++  if (siz > 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *dst = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (dst + i > end) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          /* adjust return value for truncation */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          while ((c = *src))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  dst += vis(tbuf, c, flag, *++src) - tbuf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</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;'>++int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++stravis(char **outp, const char *src, int flag)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int len, serrno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  buf = calloc(4, strlen(src) + 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (buf == NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  len = strvis(buf, src, flag);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  serrno = errno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  *outp = realloc(buf, len + 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (*outp == NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *outp = buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          errno = serrno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return (len);
</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;'>++strvisx(char *dst, const char *src, size_t len, int flag)
</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;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (start = dst; len > 1; len--) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          c = *src;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          dst = vis(dst, c, flag, *++src);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          dst = vis(dst, *src, flag, '\0');
</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;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ compat/vis.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,85 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*        $OpenBSD: vis.h,v 1.15 2015/07/20 01:52:27 millert Exp $        */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*        $NetBSD: vis.h,v 1.4 1994/10/26 00:56:41 cgd Exp $      */
</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;'>++ * Copyright (c) 1990 The Regents of the University of California.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * 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;'>++ *        @(#)vis.h       5.9 (Berkeley) 4/3/91
</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;'>++#ifndef _VIS_H_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   _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;'>++ * to select alternate encoding format
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_OCTAL       0x01    /* use octal \ddd format */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_CSTYLE      0x02    /* use \[nrft0..] where appropriate */
</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;'>++ * to alter set of characters encoded (default is to encode all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * non-graphic except space, tab, and newline).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_SP          0x04    /* also encode space */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_TAB         0x08    /* also encode tab */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_NL          0x10    /* also encode newline */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_WHITE       (VIS_SP | VIS_TAB | VIS_NL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_SAFE        0x20    /* only encode "unsafe" characters */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_DQ          0x200   /* backslash-escape double quotes */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_ALL         0x400   /* encode all characters */
</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;'>++ * other
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_NOSLASH     0x40    /* inhibit printing '\' */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   VIS_GLOB        0x100   /* encode glob(3) magics and '#' */
</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 return codes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   UNVIS_VALID      1      /* character valid */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   UNVIS_VALIDPUSH  2      /* character valid, push back passed char */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   UNVIS_NOCHAR     3      /* valid sequence, no character produced */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   UNVIS_SYNBAD    -1      /* unrecognized escape sequence */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   UNVIS_ERROR     -2      /* decoder in unknown state (unrecoverable) */
</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 flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define   UNVIS_END       1       /* no more characters */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++char      *vis(char *, int, int, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int       strvis(char *, const char *, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int       stravis(char **, const char *, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int       strnvis(char *, const char *, size_t, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int       strvisx(char *, const char *, size_t, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int       strunvis(char *, const char *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int       unvis(char *, char, int *, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ssize_t strnunvis(char *, const char *, size_t);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* !_VIS_H_ */
</span></pre><pre style='margin:0'>

</pre>