<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/26da6101ccec8a64255108f93e038da973d6c9c9">https://github.com/macports/macports-legacy-support/commit/26da6101ccec8a64255108f93e038da973d6c9c9</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 26da6101ccec8a64255108f93e038da973d6c9c9
</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;'> wrapper now 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;'> add test for _SC_PHYS_PAGES
</span>---
include/MacportsLegacySupport.h | 4 ++--
include/MacportsLegacyWrappers/sysconf_support.h | 7 +++++++
src/macports_legacy_sysconf.c | 19 +++++++++++++++++++
test/test_sysconf.c | 19 ++++++++++++++++++-
4 files changed, 46 insertions(+), 3 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 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..7f90c22 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..89b44f3 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,29 @@ 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;'>+
</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 +62,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 +73,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>