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