<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/85d0b362f0d892c0811e711638da6cd42ac5eb61">https://github.com/macports/macports-legacy-support/commit/85d0b362f0d892c0811e711638da6cd42ac5eb61</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 85d0b362f0d892c0811e711638da6cd42ac5eb61
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Tue Mar 4 13:32:52 2025 -0800
<span style='display:block; white-space:pre;color:#404040;'> Allow disabling CMSG fixes.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This provides the flag _MACPORTS_LEGACY_DISABLE_CMSG_FIXES, which
</span><span style='display:block; white-space:pre;color:#404040;'> disables all CMSG-related fixes, restoring the normal misbehavior.
</span><span style='display:block; white-space:pre;color:#404040;'> This is on the off-chance that some code may rely on the misbehavior.
</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;'> Passes tests where expected, and fails where expected.
</span>---
include/sys/socket.h | 38 +++++++++++++++++++++++++++++++++++++-
src/packet.c | 30 +++++++++++++++++++++++++++++-
2 files changed, 66 insertions(+), 2 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/sys/socket.h b/include/sys/socket.h
</span><span style='display:block; white-space:pre;color:#808080;'>index be7792e..2780681 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/sys/socket.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/sys/socket.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -26,12 +26,46 @@
</span> /* Include the primary system sys/socket.h */
#include_next <sys/socket.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * There's a tiny chance that some client may expect the misbehaviors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * of CMSG_DATA and/or packet timestamps, so we make it possible to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * disable our fixes. Since this is extremely unlikely, disabling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * is not the default. Defining _MACPORTS_LEGACY_DISABLE_CMSG_FIXES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * nonzero causes this disabling. This both avoids the fix for the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * CMSG_DATA definition, and (if appropriate) defines 'recvmsg' as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * a macro pointing to a dummy wrapper function. Note that the latter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * behavior is based on the library OS version, not the SDK version.
</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;'>+#if defined(_MACPORTS_LEGACY_DISABLE_CMSG_FIXES) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && _MACPORTS_LEGACY_DISABLE_CMSG_FIXES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* On 10.4 we may get here with __DARWIN_ALIAS_C undefined. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* If so, fix that temporarily. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_ALIAS_C
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_DARWIN_C_UNDEF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_ALIAS_C(x)
</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 __MPLS_LIB_CMSG_ROSETTA_FIX__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define recvmsg __mpls_standard_recvmsg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ssize_t recvmsg(int, struct msghdr *, int) __DARWIN_ALIAS_C(recvmsg);
</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;'>+/* Now undo the temporary hack. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef __MPLS_DARWIN_C_UNDEF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef __DARWIN_ALIAS_C
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef __MPLS_DARWIN_C_UNDEF
</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;'>+#else /* !_MACPORTS_LEGACY_DISABLE_CMSG_FIXES */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /*
* OSX prior to 10.6 defines CMSG_DATA without properly considering 64-bit
* builds, due to bad alignment assumptions, though it happens to work in
* the 10.4 case and only actually fails in the 10.5 64-bit case.
*
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * In those OS versions we substitute a version of the definition from 10.6.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * In that OS version we substitute a version of the definition from 10.6.
</span> */
#if __MPLS_SDK_CMSG_DATA_FIX__
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,4 +82,6 @@
</span>
#endif /* __MPLS_SDK_CMSG_DATA_FIX__ */
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* !_MACPORTS_LEGACY_DISABLE_CMSG_FIXES */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #endif /* _MACPORTS_SYS_SOCKET_H_ */
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/packet.c b/src/packet.c
</span><span style='display:block; white-space:pre;color:#808080;'>index bc6828c..79c1707 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/packet.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/packet.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -222,4 +222,32 @@ ssize_t recvmsg##sfx(int socket, struct msghdr *message, int flags) \
</span> ALL_VARIANTS
#undef VARIANT_ENT
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* __MPLS_LIB_CMSG_ROSETTA_FIX__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Dummy wrapper for avoiding fixes */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static ssize_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+recvmsg_dummy(int socket, struct msghdr *message, int flags, fv_type_t fvtype)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return (*sys_recvmsg(fvtype))(socket, message, flags);
</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;'>+#define VARIANT_ENT(name,sfx) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ssize_t __mpls_standard_recvmsg##sfx( \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int socket, struct msghdr *message, int flags) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { return recvmsg_dummy(socket, message, flags, fv_##name); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ALL_VARIANTS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef VARIANT_ENT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#elif __MPLS_TARGET_OSVER < 1050 /* 10.4 with no fixes */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* If we're not applying the fix on 10.4, provide dummy wrappers */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct msghdr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ssize_t recvmsg(int socket, struct msghdr *message, int flags);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define VARIANT_ENT(name,sfx) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ssize_t recvmsg##sfx(int socket, struct msghdr *message, int flags) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { return recvmsg(socket, message, flags); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+MOST_VARIANTS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef VARIANT_ENT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* 10.4 with no fixes */
</span></pre><pre style='margin:0'>
</pre>