<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e7108b708438f0920eb0fcf43a0acb6f5dbe2dbb">https://github.com/macports/macports-ports/commit/e7108b708438f0920eb0fcf43a0acb6f5dbe2dbb</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 e7108b70843 squashfs-tools: new port
</span>e7108b70843 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit e7108b708438f0920eb0fcf43a0acb6f5dbe2dbb
</span>Author: Quentin Smith <quentin@mit.edu>
AuthorDate: Sun Dec 5 19:37:19 2021 -0500

<span style='display:block; white-space:pre;color:#404040;'>    squashfs-tools: new port
</span>---
 sysutils/squashfs-tools/Portfile           |  40 ++++
 sysutils/squashfs-tools/files/darwin.patch | 295 +++++++++++++++++++++++++++++
 2 files changed, 335 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/squashfs-tools/Portfile b/sysutils/squashfs-tools/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..b999f386195
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/squashfs-tools/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,40 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem          1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        plougher squashfs-tools 4.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  6543c75ac3313dd72aef9d951cdfb0211d299a1c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  e3bc4d23fc8e5f1ede58ea6a438fc3454ffb8dc715a60b6e78b6a10e4dfbc19a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    250518
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories          sysutils
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platforms           darwin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license             GPL-2+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers         {mit.edu:quentin @quentinmit} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    openmaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description         Tools to create and extract Squashfs filesystems
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description Squashfs is a highly compressed read-only filesystem for Linux. \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    It uses zlib compression to compress both files, inodes and directories. \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Inodes in the system are very small and all blocks are packed to minimise \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    data overhead. Block sizes greater than 4K are supported up to a maximum of \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    64K.\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Squashfs is intended for general read-only filesystem use, for archival \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    use (i.e. in cases where a .tar.gz file may be used), and in constrained \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    block device/memory systems (e.g. embedded systems) where low overhead is \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    needed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_lib-append  port:zlib port:xz port:lzo2 port:lz4 port:zstd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+worksrcdir          ${distname}/squashfs-tools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          darwin.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args      -p2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_configure       no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.args          XZ_SUPPORT=1 LZO_SUPPORT=1 LZ4_SUPPORT=1 ZSTD_SUPPORT=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot.destdir    DESTDIR=${destroot} INSTALL_DIR=${prefix}/bin
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/squashfs-tools/files/darwin.patch b/sysutils/squashfs-tools/files/darwin.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9d11851160f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/squashfs-tools/files/darwin.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,295 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/squashfs-tools/Makefile b/squashfs-tools/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5795d0d..bcba141 100755
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/squashfs-tools/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/squashfs-tools/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -153,6 +153,7 @@ REPRODUCIBLE_DEFAULT = 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;'>+ INCLUDEDIR = -I.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++DESTDIR =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ INSTALL_DIR = /usr/local/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MKSQUASHFS_OBJS = mksquashfs.o read_fs.o action.o swap.o pseudo.o compressor.o \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -403,8 +404,8 @@ clean:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .PHONY: install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ install: mksquashfs unsquashfs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  mkdir -p $(INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  cp mksquashfs $(INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  cp unsquashfs $(INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  ln -fs $(INSTALL_DIR)/unsquashfs $(INSTALL_DIR)/sqfscat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  ln -fs $(INSTALL_DIR)/mksquashfs $(INSTALL_DIR)/sqfstar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mkdir -p ${DESTDIR}$(INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  cp mksquashfs ${DESTDIR}$(INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  cp unsquashfs ${DESTDIR}$(INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ln -fs $(INSTALL_DIR)/unsquashfs ${DESTDIR}$(INSTALL_DIR)/sqfscat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ln -fs $(INSTALL_DIR)/mksquashfs ${DESTDIR}$(INSTALL_DIR)/sqfstar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/squashfs-tools/action.c b/squashfs-tools/action.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 75495c6..487c4dd 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/squashfs-tools/action.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/squashfs-tools/action.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2414,9 +2414,12 @@ static char *get_start(char *s, int n)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int subpathname_fn(struct atom *atom, struct action_data *action_data)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  return fnmatch(atom->argv[0], get_start(strdupa(action_data->subpath),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          count_components(atom->argv[0])),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *subpath = strdup(action_data->subpath);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int ret = fnmatch(atom->argv[0],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          get_start(subpath, count_components(atom->argv[0])),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           FNM_PATHNAME|FNM_EXTMATCH) == 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  free(subpath);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return ret;
</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;'>+diff --git a/squashfs-tools/info.c b/squashfs-tools/info.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 216b979..933851f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/squashfs-tools/info.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/squashfs-tools/info.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -141,6 +141,59 @@ void dump_state()
</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;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int sigwaitinfo(const sigset_t *set, siginfo_t *info)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int sig;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int ret = sigwait(set, &sig);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return sig;
</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 sigtimedwait(const sigset_t *set, siginfo_t *info,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const struct timespec *timeout)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  struct itimerval timerval = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          .it_interval = { .tv_sec = 0, .tv_usec = 0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          .it_value = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  .tv_sec = timeout->tv_sec,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  .tv_usec = timeout->tv_nsec / 1000
</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 ret = setitimer(ITIMER_REAL, &timerval, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigset_t mask1 = *set;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigaddset(&mask1, SIGALRM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret = sigwaitinfo(&mask1, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // Clean up the itimer to make sure it's not delivered elsewhere.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  timerclear(&timerval.it_value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  setitimer(ITIMER_REAL, &timerval, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigset_t mask2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigemptyset(&mask2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigpending(&mask2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (sigismember(&mask2, SIGALRM)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          sigemptyset(&mask2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          sigaddset(&mask2, SIGALRM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          int sig;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          sigwait(&mask2, &sig);
</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 (ret < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret == SIGALRM) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return EAGAIN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return ret;
</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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void *info_thrd(void *arg)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   sigset_t sigmask;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index aaa4b00..217a60a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/squashfs-tools/mksquashfs.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/squashfs-tools/mksquashfs.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -35,7 +35,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stddef.h>
</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 <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <sys/sysmacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <fcntl.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 <dirent.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -50,9 +49,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <sys/wait.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 <ctype.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <sys/sysinfo.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#ifndef linux
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef linux
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <sys/sysmacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <sys/sysinfo.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <sys/sysctl.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;'>+@@ -531,7 +532,7 @@ long long read_bytes(int fd, void *buff, long long bytes)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   long long res, count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for(count = 0; count < bytes; count += res) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          int len = (bytes - count) > SSIZE_MAX ? SSIZE_MAX : bytes - count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          ssize_t len = (bytes - count) > SSIZE_MAX ? SSIZE_MAX : bytes - count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           res = read(fd, buff + count, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           if(res < 1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -580,7 +581,7 @@ int write_bytes(int fd, void *buff, long long bytes)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   long long res, count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for(count = 0; count < bytes; count += res) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          int len = (bytes - count) > SSIZE_MAX ? SSIZE_MAX : bytes - count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          ssize_t len = (bytes - count) > SSIZE_MAX ? SSIZE_MAX : bytes - count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           res = write(fd, buff + count, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           if(res == -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5748,6 +5749,7 @@ static int get_physical_memory()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int phys_mem;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if(num_pages == -1 || page_size == -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef linux
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           struct sysinfo sys;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           int res = sysinfo(&sys);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5756,6 +5758,9 @@ static int get_physical_memory()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           num_pages = sys.totalram;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           page_size = sys.mem_unit;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return 0;
</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;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   phys_mem = num_pages * page_size >> 20;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/squashfs-tools/unsquashfs.c b/squashfs-tools/unsquashfs.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7b590bd..87dfa86 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/squashfs-tools/unsquashfs.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/squashfs-tools/unsquashfs.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -32,8 +32,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "stdarg.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "fnmatch_compat.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if linux
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <sys/sysinfo.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <sys/sysmacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <sys/sysctl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</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 <sys/time.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <sys/resource.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/squashfs-tools/unsquashfs_info.c b/squashfs-tools/unsquashfs_info.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e906eaf..1a6eeb7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/squashfs-tools/unsquashfs_info.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/squashfs-tools/unsquashfs_info.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -93,6 +93,59 @@ void dump_state()
</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;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int sigwaitinfo(const sigset_t *set, siginfo_t *info)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int sig;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int ret = sigwait(set, &sig);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return sig;
</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 sigtimedwait(const sigset_t *set, siginfo_t *info,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const struct timespec *timeout)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  struct itimerval timerval = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          .it_interval = { .tv_sec = 0, .tv_usec = 0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          .it_value = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  .tv_sec = timeout->tv_sec,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  .tv_usec = timeout->tv_nsec / 1000
</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 ret = setitimer(ITIMER_REAL, &timerval, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigset_t mask1 = *set;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigaddset(&mask1, SIGALRM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret = sigwaitinfo(&mask1, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // Clean up the itimer to make sure it's not delivered elsewhere.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  timerclear(&timerval.it_value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  setitimer(ITIMER_REAL, &timerval, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigset_t mask2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigemptyset(&mask2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  sigpending(&mask2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (sigismember(&mask2, SIGALRM)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          sigemptyset(&mask2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          sigaddset(&mask2, SIGALRM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          int sig;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          sigwait(&mask2, &sig);
</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 (ret < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret == SIGALRM) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return EAGAIN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return ret;
</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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void *info_thrd(void *arg)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   sigset_t sigmask;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/squashfs-tools/unsquashfs_xattr.c b/squashfs-tools/unsquashfs_xattr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 08145d3..091ded4 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/squashfs-tools/unsquashfs_xattr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/squashfs-tools/unsquashfs_xattr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -34,6 +34,14 @@ extern int user_xattrs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int ignore_errors;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int strict_errors;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int lsetxattr (const char *path, const char *name,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const void *value, size_t size, int flags)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return setxattr(path, name, value, size, 0, flags | XATTR_NOFOLLOW);
</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;'>+ int write_xattr(char *pathname, unsigned int xattr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   unsigned int count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/squashfs-tools/xattr.c b/squashfs-tools/xattr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8cfb8d5..69b1663 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/squashfs-tools/xattr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/squashfs-tools/xattr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -92,6 +92,19 @@ extern struct xattr_list *get_xattr(int, unsigned int *, int *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern struct prefix prefix_table[];
</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;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ssize_t llistxattr (const char *path, char *list, size_t size)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return listxattr(path, list, size, XATTR_NOFOLLOW);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ssize_t lgetxattr (const char *path, const char *name,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  void *value, size_t size)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return getxattr(path, name, value, size, 0, XATTR_NOFOLLOW);
</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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int xattr_get_prefix(struct xattr_list *xattr, char *name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int i;
</span></pre><pre style='margin:0'>

</pre>