<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/8f1c06e48f51ccf52e77884707f279ca4e05f9f3">https://github.com/macports/macports-ports/commit/8f1c06e48f51ccf52e77884707f279ca4e05f9f3</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 8f1c06e48f51ccf52e77884707f279ca4e05f9f3
</span>Author: Sergey Fedorov <vital.had@gmail.com>
AuthorDate: Tue Mar 28 02:44:12 2023 +0700

<span style='display:block; white-space:pre;color:#404040;'>    phosg: fixes for older systems and PPC
</span>---
 devel/phosg/Portfile                               |  10 ++
 ...1-Encoding.hh-define-__STDC_FORMAT_MACROS.patch |  20 +++
 .../0002-Image.hh-define-__darwin_ssize_t.patch    |  23 ++++
 ...003-Network.cc-add-missing-cstring-header.patch |  21 ++++
 ...04-CMakeLists-fix-libatomic-for-macOS-ppc.patch |  41 +++++++
 .../0005-Filesystem-replacement-for-fmemopen.patch | 136 +++++++++++++++++++++
 6 files changed, 251 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/phosg/Portfile b/devel/phosg/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index c1aa83ddd64..29ae324fa5d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/phosg/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/phosg/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,6 +30,15 @@ set python_version      [string index ${pyver} 0][string range ${pyver} 2 end]
</span> 
 patchfiles              CMakeLists-txt.diff
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/fuzziqersoftware/phosg/pull/23
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.platform} eq "darwin" && ${os.major} < 20} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append   0001-Encoding.hh-define-__STDC_FORMAT_MACROS.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        0002-Image.hh-define-__darwin_ssize_t.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        0003-Network.cc-add-missing-cstring-header.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        0004-CMakeLists-fix-libatomic-for-macOS-ppc.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        0005-Filesystem-replacement-for-fmemopen.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> depends_build-append    port:python${python_version}
 
 configure.args-append   -DPYTHON_EXECUTABLE=${prefix}/bin/python${pyver}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -39,5 +48,6 @@ pre-test {
</span>     append portsandbox_profile " (allow process-exec (literal \"/bin/ps\") (with no-profile))"
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Several tests fail on PPC: https://github.com/fuzziqersoftware/phosg/issues/24
</span> test.run                yes
 test.cmd                ctest
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/phosg/files/0001-Encoding.hh-define-__STDC_FORMAT_MACROS.patch b/devel/phosg/files/0001-Encoding.hh-define-__STDC_FORMAT_MACROS.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..ee5aa612e59
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/phosg/files/0001-Encoding.hh-define-__STDC_FORMAT_MACROS.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From af3d036dbc3c295a05789267db2002dafc170ad3 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 28 Mar 2023 00:46:39 +0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 1/5] Encoding.hh: define __STDC_FORMAT_MACROS
</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;'>+ src/Encoding.hh | 1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 1 insertion(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/Encoding.hh b/src/Encoding.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 41343e9..2c1beee 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/Encoding.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/Encoding.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,5 +1,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #pragma once
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define __STDC_FORMAT_MACROS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stdint.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <inttypes.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/phosg/files/0002-Image.hh-define-__darwin_ssize_t.patch b/devel/phosg/files/0002-Image.hh-define-__darwin_ssize_t.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..6288cb355de
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/phosg/files/0002-Image.hh-define-__darwin_ssize_t.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,23 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From b3fe3a1675100660da408f76f22bddfb1af4d9d8 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 28 Mar 2023 01:04:07 +0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 2/5] Image.hh: define __darwin_ssize_t
</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;'>+ src/Image.hh | 3 +++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 3 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/Image.hh b/src/Image.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 76448cd..8aa9417 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/Image.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/Image.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -9,6 +9,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "Platform.hh"
</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;'>++typedef __darwin_ssize_t ssize_t;
</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;'>+ // an Image represents a drawing canvas. this class is fairly simple; it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // supports reading/writing individual pixels, drawing lines, and saving the
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/phosg/files/0003-Network.cc-add-missing-cstring-header.patch b/devel/phosg/files/0003-Network.cc-add-missing-cstring-header.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..216f357ae97
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/phosg/files/0003-Network.cc-add-missing-cstring-header.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,21 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From adc9ad09c1fc4d2a1c452a0f27ecd9e0518c8649 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 28 Mar 2023 01:07:36 +0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 3/5] Network.cc: add missing cstring header
</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;'>+ src/Network.cc | 1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 1 insertion(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/Network.cc b/src/Network.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2e77df5..841868f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/Network.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/Network.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -21,6 +21,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "Filesystem.hh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "Strings.hh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <cstring>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ using namespace std;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/phosg/files/0004-CMakeLists-fix-libatomic-for-macOS-ppc.patch b/devel/phosg/files/0004-CMakeLists-fix-libatomic-for-macOS-ppc.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..b1eb97b545b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/phosg/files/0004-CMakeLists-fix-libatomic-for-macOS-ppc.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,41 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 83854a38491856c8fbaea9fe8bed04754ea6cafe Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 28 Mar 2023 01:36:33 +0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 4/5] CMakeLists: fix libatomic for macOS ppc
</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;'>+ CMakeLists.txt | 9 ++++++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 6 insertions(+), 3 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/CMakeLists.txt b/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ffe2368..053d92d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -8,10 +8,12 @@ project(phosg)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set(CMAKE_CXX_STANDARD 20)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set(CMAKE_CXX_STANDARD_REQUIRED True)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-if (MSVC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(MSVC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     # Disabled warnings:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     # 4458 = declaration of '%s' hides class member (I use this->x for members)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     add_compile_options(/W4 /WX /wd4458)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++elseif(APPLE AND ${CMAKE_OSX_ARCHITECTURES} MATCHES "ppc|ppc64")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    add_compile_options(-fpermissive -Wall -Wextra -Wno-strict-aliasing -Wno-unused-result -Wno-overflow)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     add_compile_options(-Wall -Wextra -Werror -Wno-strict-aliasing -Wno-unused-result -Wno-overflow)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,10 +33,11 @@ add_library(phosg src/Encoding.cc src/Filesystem.cc src/Hash.cc src/Image.cc src
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ target_link_libraries(phosg pthread z)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # It seems that on some Linux variants (e.g. Raspbian) we also need -latomic,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# but this library does not exist on others (e.g. Ubuntu) nor on macOS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# but this library does not exist on others (e.g. Ubuntu).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Linking to libatomic is also needed on macOS ppc32. Use CMAKE_OSX_ARCHITECTURES to take care of Rosetta case.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ message(STATUS "Target architecture is ${CMAKE_HOST_SYSTEM_PROCESSOR}")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ string(FIND ${CMAKE_HOST_SYSTEM_PROCESSOR} "armv" IS_LINUX_ARMV)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64" OR ${IS_LINUX_ARMV} GREATER_EQUAL 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64" OR ${IS_LINUX_ARMV} GREATER_EQUAL 0 OR ${CMAKE_OSX_ARCHITECTURES} STREQUAL "ppc")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   target_link_libraries(phosg atomic)
</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;color:#808080;'>diff --git a/devel/phosg/files/0005-Filesystem-replacement-for-fmemopen.patch b/devel/phosg/files/0005-Filesystem-replacement-for-fmemopen.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..5ffe34bf51e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/phosg/files/0005-Filesystem-replacement-for-fmemopen.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,136 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 0b9460cc026fe69ece6d6a96740bbc1d31c91d31 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 28 Mar 2023 01:24:42 +0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5/5] Filesystem: replacement for fmemopen
</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;'>+ src/Filesystem.cc | 94 +++++++++++++++++++++++++++++++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/Filesystem.hh | 13 +++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 107 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/Filesystem.cc b/src/Filesystem.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 884128b..36d2764 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/Filesystem.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/Filesystem.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -678,3 +678,97 @@ unordered_map<int, short> Poll::poll(int timeout_ms) {
</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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED < 101300
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// https://github.com/NimbusKit/memorymapping/blob/master/src/fmemopen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <sys/mman.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct fmem {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  size_t pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  size_t size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *buffer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef struct fmem fmem_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int readfn(void *handler, char *buf, int size) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fmem_t *mem = handler;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  size_t available = mem->size - mem->pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (size > available) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    size = available;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  memcpy(buf, mem->buffer + mem->pos, sizeof(char) * size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mem->pos += size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return size;
</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;'>++static int writefn(void *handler, const char *buf, int size) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fmem_t *mem = handler;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  size_t available = mem->size - mem->pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (size > available) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    size = available;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  memcpy(mem->buffer + mem->pos, buf, sizeof(char) * size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mem->pos += size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return size;
</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;'>++static fpos_t seekfn(void *handler, fpos_t offset, int whence) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  size_t pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fmem_t *mem = handler;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  switch (whence) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case SEEK_SET: {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      if (offset >= 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        pos = (size_t)offset;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        pos = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case SEEK_CUR: {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      if (offset >= 0 || (size_t)(-offset) <= mem->pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        pos = mem->pos + (size_t)offset;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        pos = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case SEEK_END: pos = mem->size + (size_t)offset; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    default: return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (pos > mem->size) {
</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;'>++  mem->pos = pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return (fpos_t)pos;
</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;'>++static int closefn(void *handler) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  free(handler);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++FILE *fmemopen(void *buf, size_t size, const char *mode) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // This data is released on fclose.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fmem_t* mem = (fmem_t *) malloc(sizeof(fmem_t));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // Zero-out the structure.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  memset(mem, 0, sizeof(fmem_t));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mem->size = size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mem->buffer = buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // funopen's man page: https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/funopen.3.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return funopen(mem, readfn, writefn, seekfn, closefn);
</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;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/Filesystem.hh b/src/Filesystem.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index fcaf9b8..63ebbf2 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/Filesystem.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/Filesystem.hh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -20,6 +20,19 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <utility>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <vector>
</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;'>++  #include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  #if MAC_OS_X_VERSION_MAX_ALLOWED < 101300
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // https://github.com/NimbusKit/memorymapping/blob/master/src/fmemopen.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    #if defined __cplusplus
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    FILE *fmemopen(void *buf, size_t size, const char *mode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    #ifdef __cplusplus
</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;'>++  #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;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::string basename(const std::string& filename);
</span></pre><pre style='margin:0'>

</pre>