<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/b170e1e02efaf0920d2d2a9271ea6f3efda56624">https://github.com/macports/macports-legacy-support/commit/b170e1e02efaf0920d2d2a9271ea6f3efda56624</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit b170e1e02efaf0920d2d2a9271ea6f3efda56624
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Sat Jul 5 13:19:07 2025 -0700
<span style='display:block; white-space:pre;color:#404040;'> test_packet: Tolerate expected errors when fixes suppressed.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> When the option to suppress the packet timestamp fixes is used, don't
</span><span style='display:block; white-space:pre;color:#404040;'> treat the expected failures as errors. This allows the 'nofix' tests
</span><span style='display:block; white-space:pre;color:#404040;'> to be included in the automatic tests.
</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;'> Tests pass on all platforms.
</span>---
manual_tests/libtest_packet_nofix.c | 2 -
test/test_packet.c | 127 ++++++++++++++++++++++++++++++------
2 files changed, 107 insertions(+), 22 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/manual_tests/libtest_packet_nofix.c b/manual_tests/libtest_packet_nofix.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 40f2252..8b5c8f3 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/manual_tests/libtest_packet_nofix.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/manual_tests/libtest_packet_nofix.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2,8 +2,6 @@
</span> * Version of test_packet with CMSG fixes disabled.
*
* This provides a way to test the feature for disabling the fixes.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * Since it's only a manual test, we don't bother allowing the known
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * failures to pass.
</span> */
#define _MACPORTS_LEGACY_DISABLE_CMSG_FIXES 1
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_packet.c b/test/test_packet.c
</span><span style='display:block; white-space:pre;color:#808080;'>index d46de5e..6d176ce 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_packet.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_packet.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -38,6 +38,88 @@
</span>
#include <mach/mach_time.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#define SYSCTL_OSVER_CLASS CTL_KERN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define SYSCTL_OSVER_ITEM KERN_OSRELEASE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define TARGET_OSVER __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define TARGET_OSVER 1040
</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;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * If we're disabling the packet timestamp fixes, arrange to let the expected
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * failures through. This allows those tests to be included in the automatic
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * tests.
</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;'>+/* Cases of badness */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts_bad_noallow, /* Not allowable error */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts_bad_tv, /* Bad timestamp value */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts_bad_len, /* Bad timestamp length */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts_bad_padding, /* Unexpected timestamp padding */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} ts_bad_t;
</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;'>+#if TARGET_OSVER < 1060 && (defined(__x86_64__) || defined(__ppc64__))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+allow_error(ts_bad_t errtype)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Bad padding is 10.5 only */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (TARGET_OSVER < 1050 && errtype == ts_bad_padding) return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#elif defined(__ppc__) /* Possibly Rosetta */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* sysctl to check whether we're running natively (non-ppc only) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define SYSCTL_NATIVE "sysctl.proc_native"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+allow_error(ts_bad_t errtype)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int native;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t native_sz = sizeof(native);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (errtype != ts_bad_tv) return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (sysctlbyname(SYSCTL_NATIVE, &native, &native_sz, NULL, 0) < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* If sysctl failed, must be real ppc. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (native) return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else /* Nothing allowable */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+allow_error(ts_bad_t errtype)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (void) errtype;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</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 /* Nothing allowable */
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+allow_error(ts_bad_t errtype)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (void) errtype;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</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 /* !_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;'>+#if TARGET_OSVER < 1050
</span> /*
* If we're building for 10.4 with a later SDK, and testing an alternate
* variant of recvmsg(), we may reference that variant of various other
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -47,8 +129,6 @@
</span> * using the __asm() mechanism to point it to the basic version of the
* function, and then defining a macro to substitute it for the local use.
*/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050
</span>
int __connect(int, const struct sockaddr *, socklen_t) __asm("_connect");
#define connect __connect
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -59,10 +139,7 @@ ssize_t __send(int, const void *, size_t, int) __asm("_send");
</span> int __close(int) __asm("_close");
#define close __close
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* 10.4 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SYSCTL_OSVER_CLASS CTL_KERN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SYSCTL_OSVER_ITEM KERN_OSRELEASE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* TARGET_OSVER < 1050 */
</span>
#define CMSG_DATALEN(cmsg) ((uint8_t *) (cmsg) + (cmsg)->cmsg_len \
- (uint8_t *) CMSG_DATA(cmsg))
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -173,9 +250,7 @@ mach2ns(uint64_t mach_time)
</span> * Rosetta 2.
*/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 110000 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && defined(__x86_64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if TARGET_OSVER >= 110000 && defined(__x86_64__)
</span>
#include <sys/sysctl.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -392,7 +467,7 @@ static int
</span> test_timestamp(const char *name, ts_type_t tstype, int sockopt, int scmtype,
int verbose)
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int ret = 0, rret = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int ret = 0, qret = 0, rret = 0;
</span> const char *tsname = ts_type_names[tstype];
const char *err = NULL;
times_t times;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -467,17 +542,23 @@ test_timestamp(const char *name, ts_type_t tstype, int sockopt, int scmtype,
</span> if (verbose) printf(" cmsg length = %d (%d+%d), level = %d, type = %d\n",
(int) cmsglen, hdrlen, datalen, cmsglvl, cmsgtype);
if (ts_sizes[tstype] && datalen != ts_sizes[tstype]) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- printf(" %s payload length %d != expected sizeof(%s) = %d\n",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- name, datalen, tsname, ts_sizes[tstype]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ qret |= allow_error(ts_bad_len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!qret || verbose) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf(" %s payload length %d != expected sizeof(%s) = %d\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ name, datalen, tsname, ts_sizes[tstype]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!qret) ret = 1;
</span> }
if (hdrlen > (int) sizeof(*cmsg)) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- xdatap = (uint32_t *) (cbuf + sizeof(*cmsg));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- printf(" %s header padding:\n", name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while (xdatap < datap) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- printf(" (%10u)\n", *xdatap++);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ qret |= allow_error(ts_bad_padding);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!qret || verbose) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xdatap = (uint32_t *) (cbuf + sizeof(*cmsg));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf(" %s header padding:\n", name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while (xdatap < datap) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf(" (%10u)\n", *xdatap++);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!qret) ret = 1;
</span> }
if (verbose) {
printf(" %s%spayload longwords:\n", tsname, tsname[0] ? " " : "");
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -505,8 +586,11 @@ test_timestamp(const char *name, ts_type_t tstype, int sockopt, int scmtype,
</span> if (ts_getters[tstype]) {
tsval = (*ts_getters[tstype])(cmsg);
if (!tsval) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- printf(" %s provided invalid %s\n", name, tsname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ qret |= allow_error(tstype == ts_tv ? ts_bad_tv : ts_bad_noallow);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!qret || verbose) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf(" %s provided invalid %s\n", name, tsname);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!qret) ret = 1;
</span> } else {
switch (tstype) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -538,6 +622,9 @@ test_timestamp(const char *name, ts_type_t tstype, int sockopt, int scmtype,
</span> if (rret && !ret) {
printf(" Ignoring errors caused by Rosetta 2 bug\n");
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (qret && !ret && verbose) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf(" Ignoring errors with suppressed fixes\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
return ret;
}
</pre><pre style='margin:0'>
</pre>