<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/9bf75129eca3d29bb5ef9967f71af982da69b22b">https://github.com/macports/macports-legacy-support/commit/9bf75129eca3d29bb5ef9967f71af982da69b22b</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 9bf75129eca3d29bb5ef9967f71af982da69b22b
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Wed Jul 2 14:53:36 2025 -0700
<span style='display:block; white-space:pre;color:#404040;'> Make GET_OS_FUNC a common utility.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Moves it from statxx.c to util.h.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Applies it where appropriate.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Also removes unnecessary dlfcn.h include from atcalls.c.
</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;'> Tests pass on all platforms.
</span>---
src/atcalls.c | 1 -
src/fcntl.c | 15 ++-------------
src/pthread_get_stacksize_np.c | 13 ++-----------
src/statxx.c | 14 +-------------
src/sysconf.c | 12 ++----------
src/sysctl.c | 29 +++--------------------------
src/util.h | 12 ++++++++++++
7 files changed, 22 insertions(+), 74 deletions(-)
<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 456c0a2..3522408 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;'>@@ -38,7 +38,6 @@
</span>
#include <assert.h>
#include <dirent.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dlfcn.h>
</span> #include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/fcntl.c b/src/fcntl.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 8cd3b5c..35be4a1 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/fcntl.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/fcntl.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -37,7 +37,6 @@
</span> * bad pointer, so we need to check it explicitly.
*/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dlfcn.h>
</span> #include <errno.h>
#include <fcntl.h>
#include <pthread.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -49,14 +48,11 @@
</span>
#include <sys/param.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "compiler.h"
</span> #include "util.h"
static pthread_mutex_t path_lock = PTHREAD_MUTEX_INITIALIZER;
static char pathbuf[MAXPATHLEN];
<span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (fcntl_fn_t)(int fildes, int cmd, ...);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> int
fcntl(int fildes, int cmd, ...)
{
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -70,15 +66,8 @@ fcntl(int fildes, int cmd, ...)
</span> } arg;
int ret;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- static fcntl_fn_t *os_fcntl = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (MPLS_SLOWPATH(!os_fcntl)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- os_fcntl = dlsym(RTLD_NEXT, "fcntl");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Something's badly broken if this fails */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!os_fcntl) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- abort();
</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:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ GET_OS_FUNC(fcntl)
</span>
va_start(ap, cmd);
switch (cmd) {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pthread_get_stacksize_np.c b/src/pthread_get_stacksize_np.c
</span><span style='display:block; white-space:pre;color:#808080;'>index d374b1c..5463c96 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pthread_get_stacksize_np.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pthread_get_stacksize_np.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,10 +5,9 @@
</span>
#include <pthread.h>
#include <sys/resource.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dlfcn.h>
</span> #include <stdlib.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "compiler.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "util.h"
</span>
#if __MPLS_TARGET_OSVER >= 1090
/* private system call available on OS X Mavericks (version 10.9) and later */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -61,15 +60,7 @@ size_t pthread_get_stacksize_np(pthread_t t) {
</span> }
} else {
/* bug only affects main thread */
<span style='display:block; white-space:pre;background:#ffe0e0;'>- static size_t (*os_pthread_get_stacksize_np)(pthread_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (MPLS_SLOWPATH(!os_pthread_get_stacksize_np)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- os_pthread_get_stacksize_np =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dlsym(RTLD_NEXT, "pthread_get_stacksize_np");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Something's badly broken if this fails */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!os_pthread_get_stacksize_np) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- abort();
</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:#e0ffe0;'>+ GET_OS_FUNC(pthread_get_stacksize_np)
</span> return (*os_pthread_get_stacksize_np)(t);
}
}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/statxx.c b/src/statxx.c
</span><span style='display:block; white-space:pre;color:#808080;'>index b3d79e0..14da674 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/statxx.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/statxx.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -28,32 +28,22 @@
</span> * our implementations are needed. It means that the referenced function
* names are always the "unadorned" versions, except when we explicitly
* add a suffix.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This also makes the dlsym() interface common code.
</span> */
#define _DARWIN_NO_64_BIT_INODE 1
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dlfcn.h>
</span> #include <stddef.h>
#include <stdlib.h>
#include <sys/stat.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "compiler.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "util.h"
</span>
/* Make sure we have "struct stat64" */
#if !__MPLS_HAVE_STAT64
struct stat64 __DARWIN_STRUCT_STAT64;
#endif /* !__MPLS_HAVE_STAT64 */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#define GET_OS_FUNC(name) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static __typeof__(name) *os_##name = NULL; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (MPLS_SLOWPATH(!os_##name)) { \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!(os_##name = dlsym(RTLD_NEXT, #name))) abort(); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> #endif /* __MPLS_LIB_SUPPORT_... */
#if __MPLS_LIB_FIX_TIGER_PPC64__
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -276,8 +266,6 @@ fstatx_np(int fildes, struct stat *buf, filesec_t fsec)
</span>
#include <errno.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "util.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> typedef union stat_buf_u {
struct stat s;
struct stat64 s64;
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/sysconf.c b/src/sysconf.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 2fba95b..224abc6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/sysconf.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/sysconf.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -24,11 +24,10 @@
</span> #include <sys/sysctl.h>
#include <unistd.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dlfcn.h>
</span> #include <stdlib.h>
#include <stddef.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "compiler.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "util.h"
</span>
/*
* Emulate several commonly used but missing (or broken) selectors from
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -36,7 +35,7 @@
</span> */
long sysconf(int name) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- static long (*os_sysconf)(int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ GET_OS_FUNC(sysconf)
</span>
#if __MPLS_LIB_SUPPORT_SYSCONF_NPROCESSORS__
if ( name == _SC_NPROCESSORS_ONLN ) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -99,13 +98,6 @@ long sysconf(int name) {
</span> #endif /* __MPLS_LIB_SUPPORT_SYSCONF_PHYS_PAGES__ */
/* for any other values of "name", call the real sysconf() */
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (MPLS_SLOWPATH(!os_sysconf)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- os_sysconf = dlsym(RTLD_NEXT, "sysconf");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Something's badly broken if this fails */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!os_sysconf) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- abort();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span> return (*os_sysconf)(name);
}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/sysctl.c b/src/sysctl.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 0f012c4..b8f70f6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/sysctl.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/sysctl.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -19,7 +19,6 @@
</span>
#if __MPLS_LIB_FIX_64BIT_BOOTTIME__
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dlfcn.h>
</span> #include <stddef.h>
#include <stdlib.h>
#include <string.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -27,7 +26,7 @@
</span> #include <sys/sysctl.h>
#include <sys/time.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "compiler.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "util.h"
</span>
/*
* Under OS <10.6, the returned struct timeval for boottime is always based on
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -63,24 +62,13 @@ fix_boottime(timeval_t *oldp, size_t *oldlenp, size_t origlen)
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (sysctl_fn_t)(int *name, u_int namelen, void *oldp, size_t *oldlenp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void *newp, size_t newlen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> int
sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,
void *newp, size_t newlen)
{
int ret;
size_t origlen;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- static sysctl_fn_t *os_sysctl = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (MPLS_SLOWPATH(!os_sysctl)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- os_sysctl = dlsym(RTLD_NEXT, "sysctl");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Something's badly broken if this fails */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!os_sysctl) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- abort();
</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:#e0ffe0;'>+ GET_OS_FUNC(sysctl)
</span>
/* Capture originally specified length */
origlen = oldlenp ? *oldlenp : 0;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -103,24 +91,13 @@ sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,
</span> * this item on 10.4.
*/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (sysctlbyname_fn_t)(const char *name, void *oldp, size_t *oldlenp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void *newp, size_t newlen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> int
sysctlbyname(const char *name, void *oldp, size_t *oldlenp,
void *newp, size_t newlen)
{
int ret;
size_t origlen;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- static sysctlbyname_fn_t *os_sysctlbyname = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (MPLS_SLOWPATH(!os_sysctlbyname)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- os_sysctlbyname = dlsym(RTLD_NEXT, "sysctlbyname");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Something's badly broken if this fails */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!os_sysctlbyname) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- abort();
</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:#e0ffe0;'>+ GET_OS_FUNC(sysctlbyname)
</span>
/* Capture originally specified length */
origlen = oldlenp ? *oldlenp : 0;
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/util.h b/src/util.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 1e39ffd..8929547 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/util.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/util.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -19,10 +19,22 @@
</span> /* MP support header */
#include "MacportsLegacySupport.h"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <dlfcn.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "compiler.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #define __MPLS_NEED_CHECK_ACCESS__ \
(__MPLS_LIB_FIX_TIGER_PPC64__ \
|| __MPLS_LIB_SUPPORT_STAT64__)
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Obtain the address of an OS function */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define GET_OS_FUNC(name) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static __typeof__(name) *os_##name = NULL; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (MPLS_SLOWPATH(!os_##name)) { \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!(os_##name = dlsym(RTLD_NEXT, #name))) abort(); \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #if __MPLS_NEED_CHECK_ACCESS__
#include <mach/mach_vm.h>
</pre><pre style='margin:0'>
</pre>