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