<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/ad455c929ae71266ed30fa74dee3dc96cb80cca3">https://github.com/macports/macports-legacy-support/commit/ad455c929ae71266ed30fa74dee3dc96cb80cca3</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 ad455c9  src: split out shared functionality (and such to come) in atcalls.c, best_fchdir.c and fdopendir.c to common-priv.h.
</span>ad455c9 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit ad455c929ae71266ed30fa74dee3dc96cb80cca3
</span>Author: Mihai Moldovan <ionic@ionic.de>
AuthorDate: Sat Jan 30 04:08:40 2021 +0100

<span style='display:block; white-space:pre;color:#404040;'>    src: split out shared functionality (and such to come) in atcalls.c, best_fchdir.c and fdopendir.c to common-priv.h.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The benefit might not be directly visible yet, but we'll use more common
</span><span style='display:block; white-space:pre;color:#404040;'>    functionality later on.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Additionally, I noticed that the functions __pthread_fchdir() and
</span><span style='display:block; white-space:pre;color:#404040;'>    best_fchdir() were exactly the same, so consolidate that, too.
</span>---
 include/MacportsLegacySupport.h |  6 ++++
 src/atcalls.c                   | 43 +----------------------
 src/best_fchdir.c               | 10 +++---
 src/common-priv.h               | 77 +++++++++++++++++++++++++++++++++++++++++
 src/fdopendir.c                 |  5 ++-
 5 files changed, 90 insertions(+), 51 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/MacportsLegacySupport.h b/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 39bf099..7589497 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -144,4 +144,10 @@
</span> #define __MP_LEGACY_SUPPORT_FLSLL__   (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1090)
 
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Compound macros, bundling functionality needed by multiple single features. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_SUPPORT_NEED_ATCALL_MACROS__  (__MP_LEGACY_SUPPORT_ATCALLS__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_SUPPORT_NEED_BEST_FCHDIR__    (__MP_LEGACY_SUPPORT_FDOPENDIR__ || __MP_LEGACY_SUPPORT_ATCALLS__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #endif /* _MACPORTS_LEGACYSUPPORTDEFS_H_ */
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/atcalls.c b/src/atcalls.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 4cb3768..715b6cf 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/atcalls.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/atcalls.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -35,6 +35,7 @@
</span> #include "MacportsLegacySupport.h"
 #if __MP_LEGACY_SUPPORT_ATCALLS__
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "common-priv.h"
</span> 
 #include <sys/attr.h>
 #include <sys/errno.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -62,48 +63,6 @@
</span> #include <sys/syscall.h>
 #include <fcntl.h>
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef SYS___pthread_fchdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define SYS___pthread_fchdir 349
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int __pthread_fchdir(int dirfd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return syscall(SYS___pthread_fchdir, dirfd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Tiger does not have kernel support for __pthread_fchdir, so we have to fall back to fchdir */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* unless we can come up with a per-thread compatible implementation that works on Tiger */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return syscall(SYS_fchdir, dirfd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PROTECT_ERRNO(what)  ({ int __err = (errno); what; errno = __err; })
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define ERR_ON(code, what)   if (what) { errno = (code); return -1; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _ATCALL(fd, p, onerr, what)                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ({  typeof(what) __result;                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int oldCWD = -1;                                        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (fd != AT_FDCWD && p[0] != '/') {                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            oldCWD = open(".", O_RDONLY);                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (__pthread_fchdir(-1) < 0 && oldCWD != -1) {     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                close(oldCWD); oldCWD = -1;                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (__pthread_fchdir(fd) < 0) {                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                PROTECT_ERRNO(__pthread_fchdir(oldCWD));        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (oldCWD != -1) PROTECT_ERRNO(close(oldCWD)); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return onerr;                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }                                                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        __result = (what);                                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (fd != AT_FDCWD && p[0] != '/') {                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PROTECT_ERRNO(__pthread_fchdir(oldCWD));            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (oldCWD != -1) PROTECT_ERRNO(close(oldCWD));     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }                                                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        __result;                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    })
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define ATCALL(fd, p, what)  _ATCALL(fd, p, -1, what)
</span> 
 // buf is a pointer to a buffer of PATH_MAX or larger size
 static int
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/best_fchdir.c b/src/best_fchdir.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 5327221..fc56cfa 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/best_fchdir.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/best_fchdir.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -17,15 +17,13 @@
</span> 
 /* MP support header */
 #include "MacportsLegacySupport.h"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __MP_LEGACY_SUPPORT_FDOPENDIR__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MP_LEGACY_SUPPORT_NEED_BEST_FCHDIR__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "common-priv.h"
</span> 
 #include <unistd.h>
 #include <sys/syscall.h>
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef SYS___pthread_fchdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define SYS___pthread_fchdir 349
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> int best_fchdir(int dirfd)
 {
 #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -37,4 +35,4 @@ int best_fchdir(int dirfd)
</span> #endif
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* __MP_LEGACY_SUPPORT_FDOPENDIR__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_NEED_BEST_FCHDIR__ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/common-priv.h b/src/common-priv.h
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..0ec025c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/common-priv.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,77 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2019-2021 Ken Cunningham kencu@macports.org
</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;'>+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * SUCH DAMAGE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef macports_common_priv_h_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define macports_common_priv_h_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* MP support header */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "MacportsLegacySupport.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Should be generic enough so that we don't need a global feature macro. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/errno.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MP_LEGACY_SUPPORT_NEED_ATCALL_MACROS__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/fcntl.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 <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_NEED_ATCALL_MACROS__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define PROTECT_ERRNO(what)  ({ int __err = (errno); what; errno = __err; })
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define ERR_ON(code, what)   if (what) { errno = (code); return -1; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef SYS___pthread_fchdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# define SYS___pthread_fchdir 349
</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;'>+#if __MP_LEGACY_SUPPORT_NEED_BEST_FCHDIR__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int best_fchdir(int dirfd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_NEED_BEST_FCHDIR__ */
</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 __MP_LEGACY_SUPPORT_NEED_ATCALL_MACROS__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _ATCALL(fd, p, onerr, what)                             \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ({  typeof(what) __result;                                  \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int oldCWD = -1;                                        \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (fd != AT_FDCWD && p[0] != '/') {                    \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            oldCWD = open(".", O_RDONLY);                       \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if (best_fchdir(-1) < 0 && oldCWD != -1) {          \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                close(oldCWD); oldCWD = -1;                     \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }                                                   \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if (best_fchdir(fd) < 0) {                          \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                PROTECT_ERRNO(best_fchdir(oldCWD));             \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if (oldCWD != -1) PROTECT_ERRNO(close(oldCWD)); \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return onerr;                                   \
</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;'>+        __result = (what);                                      \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (fd != AT_FDCWD && p[0] != '/') {                    \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            PROTECT_ERRNO(best_fchdir(oldCWD));                 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if (oldCWD != -1) PROTECT_ERRNO(close(oldCWD));     \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }                                                       \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        __result;                                               \
</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;'>+#define ATCALL(fd, p, what)  _ATCALL(fd, p, -1, what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_NEED_ATCALL_MACROS__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* !defined (macports_common_priv_h_) */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/fdopendir.c b/src/fdopendir.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 8422426..a00de4a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/fdopendir.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/fdopendir.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -20,15 +20,14 @@
</span> #include "MacportsLegacySupport.h"
 #if __MP_LEGACY_SUPPORT_FDOPENDIR__
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "common-priv.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #include <dirent.h>
 #include <sys/errno.h>
 #include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int best_fchdir(int dirfd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PROTECT_ERRNO(what)  ({ int __err = (errno); what; errno = __err; })
</span> 
 /*
  * Implementation behavior largely follows these man page descriptions:
</pre><pre style='margin:0'>

</pre>