<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/8292b6c12e52fe9893d828597c9df8bfc32a3c82">https://github.com/macports/macports-legacy-support/commit/8292b6c12e52fe9893d828597c9df8bfc32a3c82</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 8292b6c12e52fe9893d828597c9df8bfc32a3c82
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Thu Nov 14 17:11:49 2024 -0800

<span style='display:block; white-space:pre;color:#404040;'>    sysconf: Speed up _SC_PHYS_PAGES.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    It's a silly waste of time to use the string-lookup version of
</span><span style='display:block; white-space:pre;color:#404040;'>    sysconf() rather than using the numeric version, even though that's
</span><span style='display:block; white-space:pre;color:#404040;'>    what Apple's code does.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Also adds comment explaining 32-bit issues.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Also, since the "i386" bug in Apple's code is really a 32-bit bug, the
</span><span style='display:block; white-space:pre;color:#404040;'>    feature-flag condition is adjusted to be more honest.  This has no
</span><span style='display:block; white-space:pre;color:#404040;'>    actual effect, since i386 is the only supported 32-bit processor in
</span><span style='display:block; white-space:pre;color:#404040;'>    the relevant OS versions.  This removes the only reference to
</span><span style='display:block; white-space:pre;color:#404040;'>    __MPLS_APPLE_I386__, but the definition is retained in case it's
</span><span style='display:block; white-space:pre;color:#404040;'>    useful in the future.
</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 tests on all platforms.
</span>---
 include/MacportsLegacySupport.h |  2 +-
 src/sysconf.c                   | 14 +++++++++++++-
 2 files changed, 14 insertions(+), 2 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 cdb6c50..f13e298 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;'>@@ -262,7 +262,7 @@
</span> 
 #define __MPLS_SDK_SUPPORT_SYSCONF_PHYS_PAGES__   (__MPLS_SDK_MAJOR < 101100)
 #define __MPLS_LIB_SUPPORT_SYSCONF_PHYS_PAGES__   (__MPLS_TARGET_OSVER < 101100 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                                                   || __MPLS_APPLE_I386__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                   || !__MPLS_64BIT)
</span> 
 #define __MPLS_LIB_SUPPORT_SYSCONF_WRAP__ (__MPLS_LIB_SUPPORT_SYSCONF_NPROCESSORS__ \
                                            || __MPLS_LIB_SUPPORT_SYSCONF_PHYS_PAGES__)
<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 8c196ab..74ca089 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;'>@@ -26,6 +26,7 @@
</span> #include <unistd.h>
 #include <dlfcn.h>
 #include <stdlib.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stddef.h>
</span> 
 /*
  * Emulate several commonly used but missing (or broken) selectors from
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -75,10 +76,21 @@ long sysconf(int name) {
</span>         /* the number of pages is the total memory / pagesize */
         uint64_t mem_size;
         size_t len = sizeof(mem_size);
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        int ms_mib[] = {CTL_HW, HW_MEMSIZE};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        size_t ms_miblen = sizeof(ms_mib) / sizeof(ms_mib[0]);
</span>         int pagesize = getpagesize();
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        sysctlbyname("hw.memsize", &mem_size, &len, NULL, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (sysctl(ms_mib, ms_miblen, &mem_size, &len, NULL, 0)) {
</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;'>+         * Note that the 32-bit version of this function is inherently
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         * invalid in any system with >=1TB of RAM.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         * Apple's 32-bit implementation is invalid in any system with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         * >=2GB of RAM, which is why we override any existing Apple
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         * implementation in all 32-bit builds.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         */
</span>         return (long)(mem_size/pagesize);
 
     }
</pre><pre style='margin:0'>

</pre>