<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/4d68e7e705b372f045500ad3953f81b774462339">https://github.com/macports/macports-legacy-support/commit/4d68e7e705b372f045500ad3953f81b774462339</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 4d68e7e705b372f045500ad3953f81b774462339
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Mon Jun 2 20:23:41 2025 -0700

<span style='display:block; white-space:pre;color:#404040;'>    stpncpy_chk: Fix build for mismatched SDK.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The __chk_fail() function is only available in the 10.5 and 10.6
</span><span style='display:block; white-space:pre;color:#404040;'>    libSystem, so building for those OS versions with a 10.7+ SDK gets
</span><span style='display:block; white-space:pre;color:#404040;'>    an undefined symbol.  This changes it to use dlsym() to look up
</span><span style='display:block; white-space:pre;color:#404040;'>    the symbol at runtime (which only happens in the failing case).
</span><span style='display:block; white-space:pre;color:#404040;'>    Weak linking doesn't work without extra hackery.
</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;'>    Now builds with all compatible SDKs, and tests pass.
</span>---
 src/stpncpy_chk.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/stpncpy_chk.c b/src/stpncpy_chk.c
</span><span style='display:block; white-space:pre;color:#808080;'>index d2b0dd4..3e51699 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/stpncpy_chk.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/stpncpy_chk.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -22,9 +22,10 @@
</span>  */
 
 /*
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * NOTICE: This file was modified in May 2024 to allow for use as a supporting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * file for MacPorts legacy support library. This notice is included in support
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of clause 2.2 (b) of the Apple Public License, Version 2.0.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * NOTICE: This file was modified in May 2024, and again in June 2025, to allow
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * for use as a supporting file for MacPorts legacy support library. This
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * notice is included in support of clause 2.2 (b) of the Apple Public License,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Version 2.0.
</span>  *
  * The code is almost verbatim from Apple except for:
  *
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -37,10 +38,16 @@
</span>  *
  * The _FORTIFY_SOURCE definition here in lieu of providing it as a
  * compiler command-line flag (as the Apple build procedure does).
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Making the reference to __chk_fail optional, to handle building
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * with a "mismatched" SDK.  This uses dlsym() instead of weak linking.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The inclusion of OS version conditionals.
</span>  */
 
 /* MP support header */
 #include "MacportsLegacySupport.h"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* Note that the support for this mechanism is absent prior to 10.5 */
 #if __MPLS_LIB_SUPPORT_STPNCPY__ && __MPLS_TARGET_OSVER >= 1050
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,17 +55,19 @@
</span> #undef _FORTIFY_SOURCE
 #define _FORTIFY_SOURCE 0
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <dlfcn.h>
</span> #include <stdlib.h>
 #include <string.h>
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-extern void __chk_fail (void) __attribute__((__noreturn__));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> char *
<span style='display:block; white-space:pre;background:#ffe0e0;'>-__stpncpy_chk (char *dest, const char *src,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          size_t len, size_t dstlen)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__stpncpy_chk (char *dest, const char *src, size_t len, size_t dstlen)
</span> {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  if (__builtin_expect (dstlen < len, 0))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    __chk_fail ();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  void (*chk_fail_p) (void) __attribute__((__noreturn__));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (__builtin_expect (dstlen < len, 0)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if ((chk_fail_p = dlsym(RTLD_NEXT, "__chk_fail"))) (*chk_fail_p)();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    abort();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  }
</span> 
   return stpncpy (dest, src, len);
 }
</pre><pre style='margin:0'>

</pre>