<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/12a4dca86937f7d072f8ed64fd7df91b60619a41">https://github.com/macports/macports-legacy-support/commit/12a4dca86937f7d072f8ed64fd7df91b60619a41</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 12a4dca86937f7d072f8ed64fd7df91b60619a41
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Sun Apr 7 00:09:18 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    Add stpncpy() support
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Imports Apple's stpncpy.c verbatim from Libc-825.24.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Removes 'restrict' qualifiers for pre-C99 compatibility.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes whitespace; adds modification notice and proper build
</span><span style='display:block; white-space:pre;color:#404040;'>    conditional.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Updates the legacy-support headers.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Updates the README.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/69571
</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;'>    Tested on 10.4-10.5 ppc, 10.4-10.6 i386, 10.5-10.6 ppc (i386 Rosetta),
</span><span style='display:block; white-space:pre;color:#404040;'>    10.5-12.x x86_64, 11.x-14.x arm64.
</span><span style='display:block; white-space:pre;color:#404040;'>    Passes all tests, including newly added stpncpy() tests.
</span>---
 README.md                       |  2 +-
 include/MacportsLegacySupport.h |  3 ++
 include/string.h                |  7 +++++
 src/stpncpy.c                   | 64 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 75 insertions(+), 1 deletion(-)

<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 88f5856..9551e8b 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;'>@@ -86,7 +86,7 @@ Wrapped headers and replaced functions are:
</span>   </tr>
   <tr>
     <td><code>string.h</code></td>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    <td>Adds <code>strnlen</code>, <code>strndup</code> and <code>memmem</code> functions</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>Adds <code>stpncpy</code>, <code>strnlen</code>, <code>strndup</code> and <code>memmem</code> functions</td>
</span>     <td>OSX10.6</td>
   </tr>
   <tr>
<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 8c37004..f1bc4cc 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;'>@@ -69,6 +69,9 @@
</span> /* CMSG_DATA definition in <sys/socket.h> */
 #define __MP_LEGACY_SUPPORT_CMSG_DATA_FIX__  (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060)
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* stpncpy */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MP_LEGACY_SUPPORT_STPNCPY__         (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* strnlen */
 #define __MP_LEGACY_SUPPORT_STRNLEN__         (__APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/string.h b/include/string.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 6b8ed78..68b88b6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/string.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/string.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -24,6 +24,13 @@
</span> /* Include the primary system string.h */
 #include_next <string.h>
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* stpncpy */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MP_LEGACY_SUPPORT_STPNCPY__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__MP__BEGIN_DECLS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern char *stpncpy(char *dst, const char *src, size_t n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__MP__END_DECLS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* strnlen */
 #if __MP_LEGACY_SUPPORT_STRNLEN__
 __MP__BEGIN_DECLS
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/stpncpy.c b/src/stpncpy.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..4f6375c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/stpncpy.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,64 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2011 Apple, Inc. All rights reserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * @APPLE_LICENSE_HEADER_START@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This file contains Original Code and/or Modifications of Original Code
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * as defined in and that are subject to the Apple Public Source License
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Version 2.0 (the 'License'). You may not use this file except in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * compliance with the License. Please obtain a copy of the License at
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * http://www.opensource.apple.com/apsl/ and read it before using this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The Original Code and all software distributed under the License are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Please see the License for the specific language governing rights and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * limitations under the License.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * @APPLE_LICENSE_HEADER_END@
</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;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * NOTICE: This file was modified in April 2024 to allow
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * for use as a supporting file for MacPorts legacy support library. This notice
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 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><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The code is almost verbatim from Apple except for the removal of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 'restrict' qualifiers for compatibility with pre-C99 compilers.
</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;'>+#if __MP_LEGACY_SUPPORT_STPNCPY__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <string.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+char *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+stpncpy(char * dst, const char * src, size_t maxlen) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    const size_t srclen = strnlen(src, maxlen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (srclen < maxlen) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  The stpncpy() and strncpy() functions copy at most maxlen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  characters from src into dst.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        memcpy(dst, src, srclen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  If src is less than maxlen characters long, the remainder
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  of dst is filled with '\0' characters.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        memset(dst+srclen, 0, maxlen-srclen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  The stpcpy() and stpncpy() functions return a pointer to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  terminating '\0' character of dst.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return dst+srclen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  The stpncpy() and strncpy() functions copy at most maxlen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  characters from src into dst.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        memcpy(dst, src, maxlen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  If stpncpy() does not terminate dst with a NUL character, it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  instead returns a pointer to src[maxlen] (which does not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        //  necessarily refer to a valid memory location.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return dst+maxlen;
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_STPNCPY__ */
</span></pre><pre style='margin:0'>

</pre>