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

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/a1e2bb0b1bc62585cd2c5abf09cfea24c28600fe">https://github.com/macports/macports-legacy-support/commit/a1e2bb0b1bc62585cd2c5abf09cfea24c28600fe</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit a1e2bb0b1bc62585cd2c5abf09cfea24c28600fe
</span>Author: Marcus Calhoun-Lopez <mcalhoun@macports.org>
AuthorDate: Tue Mar 26 06:22:11 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    support new symbol names on older systems
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    __bzero does not exist on older system but bzero does.
</span><span style='display:block; white-space:pre;color:#404040;'>    dirfd is macro on older systems but a library symbol on newer ones.
</span><span style='display:block; white-space:pre;color:#404040;'>    fstatat$INODE64 exists on newer systems.
</span><span style='display:block; white-space:pre;color:#404040;'>    Its functionality can replicated by fstatat64.
</span>---
 README.md                            | 15 +++++++++
 include/MacportsLegacySupport.h      |  6 ++++
 src/add_symbols.c                    | 20 ++++++++++++
 src/macports_legacy_symbol_aliases.c | 62 ++++++++++++++++++++++++++++++++++++
 test/test_symbol_aliases.c           | 26 +++++++++++++++
 5 files changed, 129 insertions(+)

<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 b24f079..88f5856 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;'>@@ -221,6 +221,21 @@ Wrapped headers and replaced functions are:
</span>         <code>TARGET_OS_WATCH</code> and <code>TARGET_OS_OSX</code> if needed.</td>
     <td>OSX10.10</td>
   </tr>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+  <tr>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td><code>-</code></td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>Adds <code>__bzero</code> library symbol</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>OSX10.5</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  </tr>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  <tr>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td><code>-</code></td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>Adds <code>_dirfd</code> library symbol</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>OSX10.7</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  </tr>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  <tr>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td><code>-</code></td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>Adds <code>_fstatat$INODE64</code> library symbol</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>OSX10.9</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  </tr>
</span> </table>
 
 For information on building this library outside MacPorts, see BUILDING.txt.
<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 1fa6a66..8c37004 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;'>@@ -192,4 +192,10 @@
</span> /* os_unfair_lock structure and its associated functions */
 #define __MP_LEGACY_SUPPORT_OS_UNFAIR_LOCK__  (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101200)
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* library symbol ___bzero */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_SUPPORT_SYMBOL____bzero__  (__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;'>+/* library symbol _dirfd */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_SUPPORT_SYMBOL__dirfd__  (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1080)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #endif /* _MACPORTS_LEGACYSUPPORTDEFS_H_ */
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/add_symbols.c b/src/add_symbols.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 43373f6..76aa34a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/add_symbols.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/add_symbols.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -61,3 +61,23 @@ extern const char clock_gettime_tmp9 __asm("$ld$add$os10.9$_clock_gettime"); __a
</span> extern const char clock_gettime_tmp10 __asm("$ld$add$os10.10$_clock_gettime"); __attribute__((visibility("default"))) const char clock_gettime_tmp10 = 0;
 extern const char clock_gettime_tmp11 __asm("$ld$add$os10.11$_clock_gettime"); __attribute__((visibility("default"))) const char clock_gettime_tmp11 = 0;
 #endif
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !(__MP_LEGACY_SUPPORT_SYMBOL____bzero__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char __bzero_tmp4 __asm("$ld$add$os10.4$___bzero"); __attribute__((visibility("default"))) const char __bzero_tmp4 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char __bzero_tmp5 __asm("$ld$add$os10.5$___bzero"); __attribute__((visibility("default"))) const char __bzero_tmp5 = 0;
</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;'>+#if !(__MP_LEGACY_SUPPORT_SYMBOL__dirfd__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char dirfd_tmp4 __asm("$ld$add$os10.4$_dirfd"); __attribute__((visibility("default"))) const char dirfd_tmp4 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char dirfd_tmp5 __asm("$ld$add$os10.5$_dirfd"); __attribute__((visibility("default"))) const char dirfd_tmp5 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char dirfd_tmp6 __asm("$ld$add$os10.6$_dirfd"); __attribute__((visibility("default"))) const char dirfd_tmp6 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char dirfd_tmp7 __asm("$ld$add$os10.7$_dirfd"); __attribute__((visibility("default"))) const char dirfd_tmp7 = 0;
</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;'>+#if !(__MP_LEGACY_SUPPORT_ATCALLS__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char fstatat$INODE64_tmp5 __asm("$ld$add$os10.5$_fstatat$INODE64"); __attribute__((visibility("default"))) const char fstatat$INODE64_tmp5 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char fstatat$INODE64_tmp6 __asm("$ld$add$os10.6$_fstatat$INODE64"); __attribute__((visibility("default"))) const char fstatat$INODE64_tmp6 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char fstatat$INODE64_tmp7 __asm("$ld$add$os10.7$_fstatat$INODE64"); __attribute__((visibility("default"))) const char fstatat$INODE64_tmp7 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char fstatat$INODE64_tmp8 __asm("$ld$add$os10.8$_fstatat$INODE64"); __attribute__((visibility("default"))) const char fstatat$INODE64_tmp8 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern const char fstatat$INODE64_tmp9 __asm("$ld$add$os10.9$_fstatat$INODE64"); __attribute__((visibility("default"))) const char fstatat$INODE64_tmp9 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports_legacy_symbol_aliases.c b/src/macports_legacy_symbol_aliases.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..1d9e913
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports_legacy_symbol_aliases.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,62 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2024
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</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;'>+/* MP support header */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "MacportsLegacySupport.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MP_LEGACY_SUPPORT_SYMBOL____bzero__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <strings.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The need for this function is highly limited.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The symbol `__bzero` does not exist prior to 10.6.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+When the Rust stage0 compiler for 10.5 is built on newer machines, it bakes `__bzero` into librustc_driver-xxx.dylib.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This may be due to the fact that on newer machines, the `_bzero` symbol is an indirect reference to another symbol.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+void __bzero(void *s, size_t n) { bzero(s, n); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_SYMBOL_ALIASES__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MP_LEGACY_SUPPORT_SYMBOL__dirfd__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <dirent.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <errno.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The need for this function is highly limited.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Prior to 10.8, `dirfd` was a macro`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The Rust compiler requires `dirfd` to be a library symbol.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef dirfd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __dd_fd dd_fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int dirfd(DIR *dirp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (dirp == NULL || dirp->__dd_fd < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        errno = EINVAL;
</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;'>+    else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return dirp->__dd_fd;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_SYMBOL__dirfd__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MP_LEGACY_SUPPORT_ATCALLS__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The need for this function is highly limited.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The Rust compiler requires `fstatat$INODE64` to be a library symbol.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int fstatat$INODE64(int dirfd, const char *pathname, struct stat64 *buf, int flags) { return fstatat64(dirfd, pathname, buf, flags); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_ATCALLS__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_symbol_aliases.c b/test/test_symbol_aliases.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..5d88b96
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_symbol_aliases.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,26 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <dlfcn.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <assert.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int main()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void (*fptr)();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // void __bzero(void *s, size_t n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fptr = dlsym(RTLD_DEFAULT, "__bzero");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     assert( fptr!=0 && "__bzero symbol does not exist");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // int dirfd(DIR *dirp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fptr = dlsym(RTLD_DEFAULT, "dirfd");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     assert( fptr!=0 && "dirfd symbol does not exist");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if  __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 && !defined(__arm64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // int fstatat$INODE64(int dirfd, const char *pathname, struct stat64 *buf, int flags);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fptr = dlsym(RTLD_DEFAULT, "fstatat$INODE64");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     assert( fptr!=0 && "fstatat$INODE64 symbol does not exist");
</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;'>+     printf("All symbol aliases found\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span></pre><pre style='margin:0'>

</pre>