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

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/bc334c521d2ab159429fba4587d2152297f10cb5">https://github.com/macports/macports-legacy-support/commit/bc334c521d2ab159429fba4587d2152297f10cb5</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit bc334c521d2ab159429fba4587d2152297f10cb5
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Sat Jan 18 17:31:47 2025 -0800

<span style='display:block; white-space:pre;color:#404040;'>    Provide pthread_[f]chdir_np() functions for 10.5+.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This provides both missing prototypes and missing function wrappers
</span><span style='display:block; white-space:pre;color:#404040;'>    for the pthread_[f]chdir_np() functions, which were introduced as
</span><span style='display:block; white-space:pre;color:#404040;'>    syscalls in 10.5, but not provided as functions until 10.12, and
</span><span style='display:block; white-space:pre;color:#404040;'>    not provided as prototypes at all in any SDK.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    At present, no SDK for any OS version provides prototypes for these
</span><span style='display:block; white-space:pre;color:#404040;'>    functions, even when the functions themselves are included in
</span><span style='display:block; white-space:pre;color:#404040;'>    libSystem.  For that reason, we condition the addition of the
</span><span style='display:block; white-space:pre;color:#404040;'>    prototypes on the flag _MACPORTS_LEGACY_PTHREAD_CHDIR.  This is
</span><span style='display:block; white-space:pre;color:#404040;'>    ignored in the 10.4 SDK, since the functions themselves are not
</span><span style='display:block; white-space:pre;color:#404040;'>    available in 10.4.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The missing function wrappers are provided for 10.5-10.11.  For 10.4,
</span><span style='display:block; white-space:pre;color:#404040;'>    dummy functions that always fail are provided, though no SDK
</span><span style='display:block; white-space:pre;color:#404040;'>    declarations are present in the 10.4 SDK, even with the enabling flag.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/71265
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'>    Passes all tests on all platforms, including the new test.
</span>---
 include/MacportsLegacySupport.h |  11 ++++
 include/pthread.h               |  12 ++++-
 src/best_fchdir.c               |  46 -----------------
 src/pthread_chdir.c             | 110 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 131 insertions(+), 48 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 155ea3a..d728dd6 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;'>@@ -332,6 +332,17 @@
</span> #define __MPLS_LIB_FIX_TIGER_ROSETTA__   (__MPLS_TARGET_OSVER < 1050 \
                                           && __MPLS_APPLE_PPC__)
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * pthread_[f]chdir_np(), avail as syscalls but not functions in 10.5-10.11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * No SDK provides prototypes for these functions, so the SDK flag here
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * just indicates that it's plausible.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_SDK_ALLOW_PTHREAD_CHDIR__   (__MPLS_SDK_MAJOR >= 1050)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_LIB_SUPPORT_PTHREAD_CHDIR__ (__MPLS_TARGET_OSVER < 101200 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            && __MPLS_TARGET_OSVER >= 1050)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Also provide dummy (failing) versions for 10.4 and 10.5+ SDK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_LIB_DUMMY_PTHREAD_CHDIR__   (__MPLS_TARGET_OSVER < 1050)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* Compound macros, bundling functionality needed by multiple single features. */
 #define __MPLS_LIB_NEED_BEST_FCHDIR__    (__MPLS_LIB_SUPPORT_ATCALLS__ \
                                           || __MPLS_LIB_SUPPORT_SETATTRLISTAT__)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/pthread.h b/include/pthread.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 6b3ad9e..fc5bca5 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/pthread.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/pthread.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,5 +1,5 @@
</span> /*
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2018
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2025
</span>  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -31,13 +31,21 @@
</span> #define PTHREAD_RWLOCK_INITIALIZER {_PTHREAD_RWLOCK_SIG_init, {0}}
 #endif
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> __MP__BEGIN_DECLS
 
 #if __MPLS_SDK_SUPPORT_PTHREAD_SETNAME_NP__
 int pthread_setname_np(const char *);
 #endif /* __MPLS_SDK_SUPPORT_PTHREAD_SETNAME_NP__ */
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_SDK_ALLOW_PTHREAD_CHDIR__ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    && defined(_MACPORTS_LEGACY_PTHREAD_CHDIR) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    && _MACPORTS_LEGACY_PTHREAD_CHDIR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int pthread_chdir_np(const char* path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int pthread_fchdir_np(int fd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MPLS_SDK_ALLOW_PTHREAD_CHDIR__ && ... */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> __MP__END_DECLS
 
 #endif /* _MACPORTS_PTHREAD_H_ */
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/best_fchdir.c b/src/best_fchdir.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 4327c47..0000000
</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;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,46 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2019
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2023 raf <raf@raf.org>
</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;'>- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SUCH DAMAGE.
</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;'>-/* MP support header */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "MacportsLegacySupport.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __MPLS_LIB_NEED_BEST_FCHDIR__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/syscall.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><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 best_fchdir(int dirfd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __MPLS_TARGET_OSVER >= 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;'>-/* Accept dirfd == -1 (which is meaningful for __pthread_fchdir) but do nothing with it. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if (dirfd == -1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</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;'>-#endif /* __MPLS_LIB_NEED_BEST_FCHDIR__ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pthread_chdir.c b/src/pthread_chdir.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..4986917
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pthread_chdir.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,110 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2025 Frederick H. G. Wright II <fw@fwright.net>
</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;'>+/* 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;'>+#if __MPLS_LIB_SUPPORT_PTHREAD_CHDIR__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The pthread_[f]chdir_np() functions are available as syscalls starting
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * in 10.5, but not as functions until 10.12.  This provides the missing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * function wrappers where needed.
</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 _MACPORTS_LEGACY_PTHREAD_CHDIR 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <pthread.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/syscall.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pthread_chdir_np(const char* path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return syscall(SYS___pthread_chdir, path);
</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
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pthread_fchdir_np(int fd)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return syscall(SYS___pthread_fchdir, fd);
</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;'>+#endif /* __MPLS_LIB_SUPPORT_PTHREAD_CHDIR__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_LIB_DUMMY_PTHREAD_CHDIR__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Dummy versions of the functions, in case the client builds with a 10.5+ SDK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * but runs on 10.4.  There's no truly appropriate choice for errno, so we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * pick ENXIO as one that's somewhat mnemonic and not likely to occur with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the real functions.
</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;'>+#include <errno.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pthread_chdir_np(const char* path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  (void) path;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  errno = ENXIO;
</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;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pthread_fchdir_np(int fd)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  (void) fd;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  errno = ENXIO;
</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;'>+#endif /* __MPLS_LIB_DUMMY_PTHREAD_CHDIR__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_LIB_NEED_BEST_FCHDIR__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Provide a per-thread fchdir() for the ATCALL code if possible, but
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * fall back to the (thread-unsafe) process-level version if not (10.4).
</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 !__MPLS_LIB_DUMMY_PTHREAD_CHDIR__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _MACPORTS_LEGACY_PTHREAD_CHDIR 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <pthread.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+best_fchdir(int dirfd)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return pthread_fchdir_np(dirfd);
</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;'>+#else /* __MPLS_LIB_DUMMY_PTHREAD_CHDIR__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+best_fchdir(int dirfd)
</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;'>+ * Accept dirfd == -1 (return to process cwd in __pthread_fchdir),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * but do nothing with it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (dirfd == -1) return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return fchdir(dirfd);
</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;'>+#endif /* __MPLS_LIB_DUMMY_PTHREAD_CHDIR__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MPLS_LIB_NEED_BEST_FCHDIR__ */
</span></pre><pre style='margin:0'>

</pre>