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

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/c9e27644de1860151544d9d15fce83816c9f36a1">https://github.com/macports/macports-legacy-support/commit/c9e27644de1860151544d9d15fce83816c9f36a1</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit c9e27644de1860151544d9d15fce83816c9f36a1
</span>Author: Christian Cornelssen <ccorn@1tein.de>
AuthorDate: Sat Feb 2 16:16:26 2019 +0100

<span style='display:block; white-space:pre;color:#404040;'>    Use asm symbol declarations for wrappers
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The idea is taken from Apple's own declaration of `realpath`:
</span><span style='display:block; white-space:pre;color:#404040;'>    It boils down to
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>        extern char *realpath(const char * __restrict, char * __restrict)
</span><span style='display:block; white-space:pre;color:#404040;'>                     asm("_linker_symbol_for_realpath");
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This means that we do not need to use macros for renaming symbols
</span><span style='display:block; white-space:pre;color:#404040;'>    (except for temporarily moving the original declaration out of the way).
</span><span style='display:block; white-space:pre;color:#404040;'>    The compiler does that for us where necessary (and only there).
</span><span style='display:block; white-space:pre;color:#404040;'>    This preserves source-level API compatibility.
</span><span style='display:block; white-space:pre;color:#404040;'>    Take a look at test/test_{realpath,sysconf}.c for the scenarios tested.
</span>---
 include/MacportsLegacySupport.h                    | 27 +++++-------
 .../MacportsLegacyWrappers/sysconf_support.h       | 20 ++++-----
 .../MacportsLegacyWrappers/wrapper_macros.h        | 27 +++++++-----
 include/stdlib.h                                   | 12 ++---
 include/unistd.h                                   | 20 +++------
 src/macports_legacy_realpath.c                     |  6 +--
 src/macports_legacy_sysconf.c                      | 19 +++-----
 test/test_realpath.c                               | 51 +++++++++++++++++++++-
 test/test_sysconf.c                                | 48 +++++++++++++++++---
 9 files changed, 148 insertions(+), 82 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 fe83e64..2eaa2e6 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;'>@@ -20,6 +20,7 @@
</span> #define _MACPORTS_LEGACYSUPPORTDEFS_H_
 
 #include "AvailabilityMacros.h"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "MacportsLegacyWrappers/wrapper_macros.h"
</span> 
 /* defines for when legacy support is required for various functions */
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -59,26 +60,20 @@
</span> /* posix_memalign */
 #define __MP_LEGACY_SUPPORT_POSIX_MEMALIGN__  (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/*  realpath() wrap */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               && !defined(__DISABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               && !defined(__DISABLE_ALL_MACPORTS_FUNCTION_WRAPPING__)  )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define __MP_LEGACY_SUPPORT_REALPATH_WRAP__ 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define __MP_LEGACY_SUPPORT_REALPATH_WRAP__ 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*  realpath() wrap availability */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_SUPPORT_REALPATH_WRAP__   (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*  realpath() wrap status */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __ENABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__  (!__DISABLE_MP_LEGACY_SUPPORT_FUNCTION_WRAPPING__  && !__DISABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__ && __MP_LEGACY_SUPPORT_REALPATH_WRAP__)
</span> 
 /* lsmod */
 #define __MP_LEGACY_SUPPORT_LSMOD__           (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/*  sysconf() wrap */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               && !defined(__DISABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               && !defined(__DISABLE_ALL_MACPORTS_FUNCTION_WRAPPING__) )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define __MP_LEGACY_SUPPORT_SYSCONF_WRAP__ 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define __MP_LEGACY_SUPPORT_SYSCONF_WRAP__ 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*  sysconf() wrap availability */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*  sysconf() wrap status */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __ENABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__  (!__DISABLE_MP_LEGACY_SUPPORT_FUNCTION_WRAPPING__  && !__DISABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__ && __MP_LEGACY_SUPPORT_SYSCONF_WRAP__)
</span>  
 /* arc4random */
 #define __MP_LEGACY_SUPPORT_ARC4RANDOM__      (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_realpath.c b/include/MacportsLegacyWrappers/sysconf_support.h
</span>similarity index 71%
copy from test/test_realpath.c
copy to include/MacportsLegacyWrappers/sysconf_support.h
<span style='display:block; white-space:pre;color:#808080;'>index 603b72a..d67adb1 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_realpath.c
</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;'>@@ -1,6 +1,6 @@
</span> 
 /*
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2019 Christian Cornelssen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2019 Ken Cunningham <kencu@macports.org>
</span>  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -15,15 +15,13 @@
</span>  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* sysconf macros supported by the macports wrapper */
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *p = realpath(".", NULL); /* bus error up to 10.5 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!p) return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    printf("%s\n", p);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    printf("realpath supports NULL pointer\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    free((void*)p);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef _SC_NPROCESSORS_CONF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _SC_NPROCESSORS_CONF 57
</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_NPROCESSORS_ONLN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _SC_NPROCESSORS_ONLN 58
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span> 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_sysconf.c b/include/MacportsLegacyWrappers/wrapper_macros.h
</span>similarity index 52%
copy from test/test_sysconf.c
copy to include/MacportsLegacyWrappers/wrapper_macros.h
<span style='display:block; white-space:pre;color:#808080;'>index 7bb159b..919436b 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/include/MacportsLegacyWrappers/wrapper_macros.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -15,17 +15,22 @@
</span>  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <assert.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef _MACPORTS_LEGACYSUPPORTWRAP_H_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _MACPORTS_LEGACYSUPPORTWRAP_H_
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   long nconf = sysconf(_SC_NPROCESSORS_CONF);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   long nonln = sysconf(_SC_NPROCESSORS_ONLN);
</span><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:#ffe0e0;'>-   assert(nconf > 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   assert(nonln > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* We need support for asm */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !__GNUC__ && !__clang__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef __DISABLE_MP_LEGACY_SUPPORT_FUNCTION_WRAPPING__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DISABLE_MP_LEGACY_SUPPORT_FUNCTION_WRAPPING__ 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !__DISABLE_MP_LEGACY_SUPPORT_FUNCTION_WRAPPING__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Could include Darwin's <sys/cdefs.h> and use __STRING, __CONCAT */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* But for wrappers we require asm, thus GCC/Clang, thus ANSI C, anyway */
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Wrapper support macros */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_WRAPPER(sym) macports_legacy_##sym
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_WRAPPER_ALIAS(sym) asm("_macports_legacy_" #sym)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* !__DISABLE_MP_LEGACY_SUPPORT_FUNCTION_WRAPPING__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* _MACPORTS_LEGACYSUPPORTWRAP_H_ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/stdlib.h b/include/stdlib.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 9260caf..c8ce165 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/stdlib.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/stdlib.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -23,33 +23,33 @@
</span> #include "MacportsLegacySupport.h"
 
 /* realpath wrap */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __MP_LEGACY_SUPPORT_REALPATH_WRAP__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __ENABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__
</span> 
 /* we are going to move the old realpath definition out of the way */
 #undef realpath
 #define realpath(a,b) realpath_macports_original(a,b)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /*__MP_LEGACY_SUPPORT_REALPATH_WRAP__*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /*__ENABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__*/
</span> 
 /* Include the primary system stdlib.h */
 #include_next <stdlib.h>
 
 /* realpath wrap */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __MP_LEGACY_SUPPORT_REALPATH_WRAP__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __ENABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__
</span> 
 /* and now define realpath as our new wrapped function */
 #undef realpath
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#define realpath(a,b) macports_legacy_realpath(a,b)
</span> 
 #ifdef __cplusplus
 extern "C" {
 #endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  extern char * macports_legacy_realpath(const char * __restrict, char * __restrict);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  extern char *realpath(const char * __restrict, char * __restrict)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               __MP_LEGACY_WRAPPER_ALIAS(realpath);
</span> #ifdef __cplusplus
 }
 #endif
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /*__MP_LEGACY_SUPPORT_REALPATH_WRAP__*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /*__ENABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__*/
</span> 
 /* posix_memalign */
 #if __MP_LEGACY_SUPPORT_POSIX_MEMALIGN__
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/unistd.h b/include/unistd.h
</span><span style='display:block; white-space:pre;color:#808080;'>index e06ac82..1fa73b6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/unistd.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/unistd.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2,13 +2,13 @@
</span> #include "MacportsLegacySupport.h"
 
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __MP_LEGACY_SUPPORT_SYSCONF_WRAP__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __ENABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__
</span> 
 /* redefine the original sysconf */
 #undef sysconf
 #define sysconf(a) sysconf_orig(a)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /*__MP_LEGACY_SUPPORT_SYSCONF_WRAP__*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /*__ENABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__*/
</span> 
 
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -16,26 +16,18 @@
</span> 
 
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __MP_LEGACY_SUPPORT_SYSCONF_WRAP__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __ENABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__
</span> 
 /* and now define sysconf as our new wrapped function */
 #undef sysconf
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#define sysconf(a) macports_legacy_sysconf(a)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _SC_NPROCESSORS_CONF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _SC_NPROCESSORS_CONF 57
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _SC_NPROCESSORS_ONLN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _SC_NPROCESSORS_ONLN 58
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "MacportsLegacyWrappers/sysconf_support.h"
</span> 
 #ifdef __cplusplus
 extern "C" {
 #endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>-extern long macports_legacy_sysconf(int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern long sysconf(int) __MP_LEGACY_WRAPPER_ALIAS(sysconf);
</span> #ifdef __cplusplus
 }
 #endif
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /*__MP_LEGACY_SUPPORT_SYSCONF_WRAP__*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __ENABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports_legacy_realpath.c b/src/macports_legacy_realpath.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 7db3400..ba28058 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports_legacy_realpath.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports_legacy_realpath.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -21,14 +21,14 @@
</span> #if __MP_LEGACY_SUPPORT_REALPATH_WRAP__
 
 /* we need this blocker so as to not get caught in our own wrap */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef __MP_LEGACY_SUPPORT_REALPATH_WRAP__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define __DISABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef __DISABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DISABLE_MP_LEGACY_SUPPORT_REALPATH_WRAP__ 1
</span> 
 #include <limits.h>
 #include <stdlib.h>
 
 char *
<span style='display:block; white-space:pre;background:#ffe0e0;'>-macports_legacy_realpath(const char * __restrict stringsearch, char * __restrict buffer)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__MP_LEGACY_WRAPPER(realpath)(const char * __restrict stringsearch, char * __restrict buffer)
</span> {
     if (buffer == NULL) {
         char *myrealpathbuf = malloc(PATH_MAX);
<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 6855915..4bce9c5 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;'>@@ -21,8 +21,8 @@
</span> #if __MP_LEGACY_SUPPORT_SYSCONF_WRAP__
 
 /* we need this blocker so as to not get caught in our own wrap */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef  __MP_LEGACY_SUPPORT_SYSCONF_WRAP__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define __DISABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef __DISABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DISABLE_MP_LEGACY_SUPPORT_SYSCONF_WRAP__ 1
</span> 
 
 #include <sys/types.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,18 +30,11 @@
</span> 
 #include <unistd.h>
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _SC_NPROCESSORS_CONF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _SC_NPROCESSORS_CONF 57
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _SC_NPROCESSORS_ONLN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _SC_NPROCESSORS_ONLN 58
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> /* emulate two commonly used but missing selectors from sysconf() on 10.4 */
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-long macports_legacy_sysconf(int name){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <MacportsLegacyWrappers/sysconf_support.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long __MP_LEGACY_WRAPPER(sysconf)(int name){
</span> 
     if ( name == _SC_NPROCESSORS_ONLN ) {
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -55,7 +48,7 @@ long macports_legacy_sysconf(int name){
</span> 
         if (ret < 0 || count < 1) {
             /* try again with _SC_NPROCESSORS_CONF */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            return macports_legacy_sysconf(_SC_NPROCESSORS_CONF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return __MP_LEGACY_WRAPPER(sysconf)(_SC_NPROCESSORS_CONF);
</span>         } else {
             return (long)count;
         }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_realpath.c b/test/test_realpath.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 603b72a..5f4dcb8 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_realpath.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_realpath.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -15,14 +15,61 @@
</span>  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Deliberately declaring some potentially redefined names
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * before including the associated header file, to test robustness.
</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;'>+/* Wrapper should work not only with calls, but with references as well */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* __restrict not needed here (and remember: nothing included yet) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef char * (*strfunc_t)(const char *, char *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Renaming different objects should not affect functionality */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct { char *realpath; } rpv_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct { strfunc_t realpath; } rpf_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #include <stdlib.h>
 #include <stdio.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <string.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <assert.h>
</span> 
 int main() {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Test with direct function call */
</span>     const char *p = realpath(".", NULL);        /* bus error up to 10.5 */
     if (!p) return 1;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    printf("%s\n", p);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    printf("realpath supports NULL pointer\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("cwd = %s\n", p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("realpath(path, NULL) supported.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Test with name (reference) only */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        strfunc_t f = realpath;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        const char *q = f(".", NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (!q) return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (!strcmp(q, p));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        printf("f = realpath, f(path, NULL) supported.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        free((void*)q);
</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;'>+    /* Test with function macro disabler */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        const char *q = (realpath)(".", NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (!q) return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (!strcmp(q, p));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        printf("(realpath)(path, NULL) supported.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        free((void*)q);
</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;'>+    /* Test with same-named fields */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        rpf_t rpf = { realpath };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   rpv_t rpv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        rpv.realpath = rpf.realpath(".", NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (!rpv.realpath) return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (!strcmp(rpv.realpath, p));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        printf("rpv.realpath = rpf.realpath(path, NULL) supported.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        free((void*)rpv.realpath);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     free((void*)p);
     return 0;
 }
<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 7bb159b..7353e6f 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;'>@@ -15,17 +15,53 @@
</span>  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Deliberately declaring some potentially redefined names
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * before including the associated header file, to test robustness.
</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;'>+/* Wrapper should work not only with calls, but with references as well */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef long (*itol_t)(int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Renaming different objects should not affect functionality */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct { long sysconf; } scv_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct { itol_t sysconf; } scf_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
 
 int main() {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        long nconf = sysconf(_SC_NPROCESSORS_CONF);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   long nonln = sysconf(_SC_NPROCESSORS_ONLN);
</span><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:#ffe0e0;'>-   assert(nconf > 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   assert(nonln > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Test with direct function call */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    long nconf = sysconf(_SC_NPROCESSORS_CONF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    long nonln = sysconf(_SC_NPROCESSORS_ONLN);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("nconf = %ld; nonln = %ld\n", nconf, nonln);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    assert (nconf > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    assert (nonln > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("sysconf(_SC_NPROCESSORS_XXXX) supported.\n");
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Test with name (reference) only */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        itol_t f = sysconf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (f(_SC_NPROCESSORS_CONF) == nconf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (f(_SC_NPROCESSORS_ONLN) == nonln);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        printf("f = sysconf, f(_SC_NPROCESSORS_XXXX) supported.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Test with function macro disabler */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    assert ((sysconf)(_SC_NPROCESSORS_CONF) == nconf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    assert ((sysconf)(_SC_NPROCESSORS_ONLN) == nonln);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("(sysconf)(_SC_NPROCESSORS_XXXX) supported.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Test with same-named fields */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        scf_t scf = { sysconf };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        scv_t scv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        scv.sysconf = scf.sysconf(_SC_NPROCESSORS_CONF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (scv.sysconf == nconf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        scv.sysconf = scf.sysconf(_SC_NPROCESSORS_ONLN);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        assert (scv.sysconf == nonln);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        printf("scv.sysconf = scf.sysconf(_SC_NPROCESSORS_XXXX) supported.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return 0;
</span> }
</pre><pre style='margin:0'>

</pre>