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