<pre style='margin:0'>
Ken (kencu) pushed a commit to branch sysconfpages
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/7356a5ad0e7dfccf1d7bb20ae2d3fd79293e4c13">https://github.com/macports/macports-legacy-support/commit/7356a5ad0e7dfccf1d7bb20ae2d3fd79293e4c13</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 7356a5ad0e7dfccf1d7bb20ae2d3fd79293e4c13
</span>Author: ken-cunningham-webuse <ken.cunningham.webuse@gmail.com>
AuthorDate: Wed Sep 25 20:52:14 2019 -0700

<span style='display:block; white-space:pre;color:#404040;'>    sysconf wrapper - add _SC_PHYS_PAGES support
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    needed on macOS10.10 and below
</span><span style='display:block; white-space:pre;color:#404040;'>    reconfigure sysconf wrapper to only include required additional functions
</span><span style='display:block; white-space:pre;color:#404040;'>    as can no longer be all-or-none
</span><span style='display:block; white-space:pre;color:#404040;'>    add test for _SC_PHYS_PAGES
</span><span style='display:block; white-space:pre;color:#404040;'>    update README
</span>---
 README.md                                        |  6 +++++-
 include/MacportsLegacySupport.h                  |  4 ++--
 include/MacportsLegacyWrappers/sysconf_support.h |  7 +++++++
 src/macports_legacy_sysconf.c                    | 19 +++++++++++++++++++
 test/test_sysconf.c                              | 20 +++++++++++++++++++-
 5 files changed, 52 insertions(+), 4 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/README.md b/README.md
</span><span style='display:block; white-space:pre;color:#808080;'>index 6be3d8b..5a63d24 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/README.md
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/README.md
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -114,7 +114,7 @@ Wrapped headers are:
</span>     <td>OSX10.4</td>
   </tr>
   <tr>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    <td rowspan="2"><code>sys/unistd.h</code></td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td rowspan="3"><code>sys/unistd.h</code></td>
</span>     <td>Adds <code>getattrlistat</code>, <code>readlinkat</code>, <code>faccessat</code>,
         <code>fchownat</code>, <code>linkat</code>, <code>symlinkat</code>,
         and <code>unlinkat</code> functions</td>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -125,4 +125,8 @@ Wrapped headers are:
</span>         <code>_SC_NPROCESSORS_ONLN</code></td>
     <td>OSX10.4</td>
   </tr>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+  <tr>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>Wraps <code>sysconf</code> to support <code>_SC_PHYS_PAGES</code></td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>OSX10.10</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  </tr>
</span> </table>
<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 df42d8a..1337a2a 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;'>@@ -90,8 +90,8 @@
</span> /* lsmod does not exist on Tiger */
 #define __MP_LEGACY_SUPPORT_LSMOD__           (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/*  sysconf() is missing functions on Tiger */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define __MP_LEGACY_SUPPORT_SYSCONF_WRAP__    (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*  sysconf() is missing some functions on some systems */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_SUPPORT_SYSCONF_WRAP__    (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101100)
</span> 
 /*  sysconf() wrap has bail-out macros in case we want to disable only function wrapping */
 #define __ENABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__  (!__DISABLE_MP_LEGACY_SUPPORT_FUNCTION_WRAPPING__  && \
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/MacportsLegacyWrappers/sysconf_support.h b/include/MacportsLegacyWrappers/sysconf_support.h
</span><span style='display:block; white-space:pre;color:#808080;'>index d67adb1..d66ae7f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/MacportsLegacyWrappers/sysconf_support.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/MacportsLegacyWrappers/sysconf_support.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -19,9 +19,16 @@
</span> 
 #ifndef _SC_NPROCESSORS_CONF
 #define _SC_NPROCESSORS_CONF 57
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __NEED__SC_NPROCESSORS_CONF__ 1
</span> #endif
 
 #ifndef _SC_NPROCESSORS_ONLN
 #define _SC_NPROCESSORS_ONLN 58
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __NEED__SC_NPROCESSORS_ONLN__ 1
</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;'>+#ifndef _SC_PHYS_PAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _SC_PHYS_PAGES 200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __NEED_SC_PHYS_PAGES__ 1
</span> #endif
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports_legacy_sysconf.c b/src/macports_legacy_sysconf.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 4bce9c5..63298b8 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports_legacy_sysconf.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports_legacy_sysconf.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -36,6 +36,7 @@
</span> 
 long __MP_LEGACY_WRAPPER(sysconf)(int name){
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __NEED__SC_NPROCESSORS_ONLN__
</span>     if ( name == _SC_NPROCESSORS_ONLN ) {
 
         int nm[2];
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -53,7 +54,9 @@ long __MP_LEGACY_WRAPPER(sysconf)(int name){
</span>             return (long)count;
         }
     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span> 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __NEED__SC_NPROCESSORS_CONF__
</span>     if ( name == _SC_NPROCESSORS_CONF ) {
 
         int nm[2];
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -68,6 +71,22 @@ long __MP_LEGACY_WRAPPER(sysconf)(int name){
</span>         if (ret < 0 || count < 1) { count = 1; }
         return (long)count;
     }
<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;'>+#if __NEED_SC_PHYS_PAGES__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if ( name == _SC_PHYS_PAGES ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        /* the number of pages is the total memory / pagesize */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        uint64_t mem_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        size_t len = sizeof(mem_size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int pagesize = getpagesize();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sysctlbyname("hw.memsize", &mem_size, &len, NULL, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return (long)(mem_size/pagesize);
</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
</span> 
     /* for any other values of "name", call the real sysconf() */
       return (long)sysconf(name);
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_sysconf.c b/test/test_sysconf.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 7353e6f..cbd3695 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_sysconf.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_sysconf.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -32,20 +32,30 @@ typedef struct { itol_t sysconf; } scf_t;
</span> #include <assert.h>
 
 int main() {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("***sysconf wrapper tests started\n\n");
</span>     /* Test with direct function call */
     long nconf = sysconf(_SC_NPROCESSORS_CONF);
     long nonln = sysconf(_SC_NPROCESSORS_ONLN);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    printf("nconf = %ld; nonln = %ld\n", nconf, nonln);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    long nphyspages = sysconf(_SC_PHYS_PAGES);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("nconf = %ld; nonln = %ld;\n", nconf, nonln);
</span>     assert (nconf > 0);
     assert (nonln > 0);
     printf("sysconf(_SC_NPROCESSORS_XXXX) supported.\n");
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("nphyspages = %ld\n", nphyspages);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    assert (nphyspages > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("sysconf(_SC_PHYS_PAGES) supported.\n\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("Total system memory = %f GB\n", ((double)sysconf(_SC_PHYS_PAGES)) * ((double)sysconf(_SC_PAGESIZE)/(1024*1024*1024)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     /* Test with name (reference) only */
     {
         itol_t f = sysconf;
         assert (f(_SC_NPROCESSORS_CONF) == nconf);
         assert (f(_SC_NPROCESSORS_ONLN) == nonln);
         printf("f = sysconf, f(_SC_NPROCESSORS_XXXX) supported.\n");
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (f(_SC_PHYS_PAGES) == nphyspages);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        printf("f = sysconf, f(_SC_PHYS_PAGES) supported.\n\n");
</span>     }
 
     /* Test with function macro disabler */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -53,6 +63,9 @@ int main() {
</span>     assert ((sysconf)(_SC_NPROCESSORS_ONLN) == nonln);
     printf("(sysconf)(_SC_NPROCESSORS_XXXX) supported.\n");
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    assert ((sysconf)(_SC_PHYS_PAGES) == nphyspages);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("(sysconf)(_SC_PHYS_PAGES) supported.\n\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     /* Test with same-named fields */
     {
         scf_t scf = { sysconf };
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -61,7 +74,12 @@ int main() {
</span>         assert (scv.sysconf == nconf);
         scv.sysconf = scf.sysconf(_SC_NPROCESSORS_ONLN);
         assert (scv.sysconf == nonln);
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        scv.sysconf = scf.sysconf(_SC_PHYS_PAGES);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (scv.sysconf == nphyspages);
</span>         printf("scv.sysconf = scf.sysconf(_SC_NPROCESSORS_XXXX) supported.\n");
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        printf("scv.sysconf = scf.sysconf(_SC_PHYS_PAGES) supported.\n");
</span>     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("***sysconf wrapper tests completed\n\n");
</span>     return 0;
 }
</pre><pre style='margin:0'>

</pre>