<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/d9ba12fb6fc7688b6e0197e353d544c28fd500e3">https://github.com/macports/macports-ports/commit/d9ba12fb6fc7688b6e0197e353d544c28fd500e3</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 d9ba12fb6fc libarchive: fix build on older systems
</span>d9ba12fb6fc is described below

<span style='display:block; white-space:pre;color:#808000;'>commit d9ba12fb6fc7688b6e0197e353d544c28fd500e3
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Mon Jul 24 17:10:57 2023 +1000

<span style='display:block; white-space:pre;color:#404040;'>    libarchive: fix build on older systems
</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/67815
</span>---
 archivers/libarchive/Portfile                 |  4 +-
 archivers/libarchive/files/bsdunzip-time.diff | 85 +++++++++++++++++++++++++
 archivers/libarchive/files/getline.patch      | 92 +++++++++++++++++++++++++++
 3 files changed, 180 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/archivers/libarchive/Portfile b/archivers/libarchive/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 4744c1bb977..330e41edf91 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/archivers/libarchive/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/archivers/libarchive/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -32,7 +32,9 @@ depends_lib      port:bzip2 port:zlib port:libxml2 port:xz \
</span>                  port:libb2
 
 patchfiles       patch-libarchive__archive_read_support_format_lha.c.diff \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                 fix_pc_file.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 fix_pc_file.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 bsdunzip-time.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 getline.patch
</span> 
 platform darwin 8 {
     patchfiles-append patch-libarchive-3.5-fix-tests-tiger.diff
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/archivers/libarchive/files/bsdunzip-time.diff b/archivers/libarchive/files/bsdunzip-time.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..19199cb84a0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/archivers/libarchive/files/bsdunzip-time.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,85 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/libarchive/libarchive/commit/b55d25506ad63667e394a31bee91b494ad891ceb
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/unzip/bsdunzip.c b/unzip/bsdunzip.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index be18ecfb5..cd8237aa7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- unzip/bsdunzip.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ unzip/bsdunzip.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -72,6 +72,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef HAVE_UNISTD_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_SYS_TIME_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <sys/time.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</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;'>+ #include <archive.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <archive_entry.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -630,9 +636,15 @@ extract_file(struct archive *a, struct archive_entry *e, char **path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int mode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct timespec mtime;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct stat sb;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  struct timespec ts[2];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int fd, check, text;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const char *linkname;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(HAVE_UTIMENSAT) || defined(HAVE_FUTIMENS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  struct timespec ts[2];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  struct timeval times[2];
</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;'>+   mode = archive_entry_mode(e) & 0777;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (mode == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -686,9 +698,18 @@ extract_file(struct archive *a, struct archive_entry *e, char **path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   return;
</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 defined(HAVE_UTIMENSAT) || defined(HAVE_FUTIMENS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ts[0].tv_sec = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ts[0].tv_nsec = UTIME_NOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ts[1] = mtime;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  times[0].tv_sec = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  times[0].tv_usec = -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  times[1].tv_sec = mtime.tv_sec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  times[1].tv_usec = mtime.tv_nsec / 1000;
</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;'>+   /* process symlinks */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   linkname = archive_entry_symlink(e);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -701,8 +722,14 @@ extract_file(struct archive *a, struct archive_entry *e, char **path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   warning("Cannot set mode for '%s'", *path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           /* set access and modification time */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(HAVE_UTIMENSAT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           if (utimensat(AT_FDCWD, *path, ts, AT_SYMLINK_NOFOLLOW) != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   warning("utimensat('%s')", *path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(HAVE_LUTIMES)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          gettimeofday(&times[0], NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (lutimes(*path, times) != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  warning("lutimes('%s')", *path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           return;
</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;'>+@@ -720,8 +747,14 @@ extract_file(struct archive *a, struct archive_entry *e, char **path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   info("\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /* set access and modification time */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(HAVE_FUTIMENS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (futimens(fd, ts) != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           error("futimens('%s')", *path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(HAVE_FUTIMES)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  gettimeofday(&times[0], NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (futimes(fd, times) != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          error("futimes('%s')", *path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (close(fd) != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           error("close('%s')", *path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/archivers/libarchive/files/getline.patch b/archivers/libarchive/files/getline.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..041684d0298
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/archivers/libarchive/files/getline.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,92 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- unzip/bsdunzip.c.orig  2023-07-24 16:33:11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ unzip/bsdunzip.c       2023-07-24 16:54:44
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -460,7 +460,89 @@ static char spinner[] = { '|', '/', '-', '\\' };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static unsigned char buffer[8192];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static char spinner[] = { '|', '/', '-', '\\' };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !defined(__DARWIN_C_LEVEL) || __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Need to provide getline() implementation */
</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) 2011 The NetBSD Foundation, Inc.
</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;'>++ * This code is derived from software contributed to The NetBSD Foundation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * by Christos Zoulas.
</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;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * POSSIBILITY OF 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;'>++ssize_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *ptr, *eptr;
</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 (*buf == NULL || *bufsiz == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *bufsiz = BUFSIZ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if ((*buf = malloc(*bufsiz)) == NULL)
</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;'>++  for (ptr = *buf, eptr = *buf + *bufsiz;;) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          int c = fgetc(fp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (c == -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  if (feof(fp)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          ssize_t diff = (ssize_t)(ptr - *buf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          if (diff != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  *ptr = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  return diff;
</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;'>++                  return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          *ptr++ = c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (c == delimiter) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *ptr = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  return ptr - *buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (ptr + 2 >= eptr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  char *nbuf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  size_t nbufsiz = *bufsiz * 2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  ssize_t d = ptr - *buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  if ((nbuf = realloc(*buf, nbufsiz)) == NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *buf = nbuf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  *bufsiz = nbufsiz;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  eptr = nbuf + nbufsiz;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  ptr = nbuf + 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;'>++}
</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;'>++getline(char **buf, size_t *bufsiz, FILE *fp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return getdelim(buf, bufsiz, '\n', fp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</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;'>+ static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ handle_existing_file(char **path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span></pre><pre style='margin:0'>

</pre>