<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/7a4a117ee948021334981b05abee66313ff26abb">https://github.com/macports/macports-legacy-support/commit/7a4a117ee948021334981b05abee66313ff26abb</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 7a4a117ee948021334981b05abee66313ff26abb
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Tue Jan 14 14:28:04 2025 -0800
<span style='display:block; white-space:pre;color:#404040;'> test_stat: Remove 10.4 Rosetta exception.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Almost a revert of commit ba45d6c, but with conflicts fixed.
</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;'> Without fix, fails on 10.4 Rosetta and passes on all others.
</span><span style='display:block; white-space:pre;color:#404040;'> With fix, passes on all platforms, including 10.4 Rosetta.
</span>---
test/test_stat.c | 68 +++++++++++++++-----------------------------------------
1 file changed, 18 insertions(+), 50 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_stat.c b/test/test_stat.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 68242d3..8f1bafa 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_stat.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_stat.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -26,17 +26,12 @@
</span> #include <sys/fcntl.h>
#include <sys/param.h>
#include <sys/stat.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/sysctl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/types.h>
</span>
/* Make sure we always have a "struct stat64" */
#if !__MPLS_HAVE_STAT64
struct stat64 __DARWIN_STRUCT_STAT64;
#endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/* sysctl to check whether we're running natively (not Rosetta) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SYSCTL_NATIVE "sysctl.proc_native"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> /* Structure accommodating both struct stat sizes, with padding for check */
typedef struct safe_stat_s {
struct stat_s {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -59,25 +54,6 @@ static const char *source = __FILE__;
</span> static const char *source_link = __FILE__ "_link";
static char dir[MAXPATHLEN], rel_base[MAXPATHLEN], rel_link[MAXPATHLEN];
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * 10.4 Rosetta is unable to handle fstatx_np(), so we need to check.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><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><span style='display:block; white-space:pre;background:#ffe0e0;'>- && defined(__ppc__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-arch_ok(void)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int val = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t vsiz = sizeof(val);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (sysctlbyname(SYSCTL_NATIVE, &val, &vsiz, NULL, 0) < 0) return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return val;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else /* not possibly 10.4 Rosetta */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int arch_ok(void) { return 1;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> static void
stat_init(int ino64)
{
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -480,19 +456,15 @@ main(int argc, char *argv[])
</span> check_copy(0, 0);
(void) fclose(fp);
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (arch_ok()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (verbose) printf(" testing 'fstatx_np'\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Use fopen() to steer clear of open()/close() variant issues. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert((fp = fopen(source_link, "r")) != NULL && "open of source failed");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- stat_init(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- stat_err = fstatx_np(fileno(fp), &stat_buf.s.s, fsec);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (check_err("fstatx_np")) return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert(S_ISREG(get_mode(0)) && "fstat expected regular file");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- check_copy(0, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (void) fclose(fp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (verbose) printf(" avoiding 'fstatx_np' due to Rosetta bug\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (verbose) printf(" testing 'fstatx_np'\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Use fopen() to steer clear of open()/close() variant issues. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ assert((fp = fopen(source_link, "r")) != NULL && "open of source failed");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stat_init(0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stat_err = fstatx_np(fileno(fp), &stat_buf.s.s, fsec);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (check_err("fstatx_np")) return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ assert(S_ISREG(get_mode(0)) && "fstat expected regular file");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ check_copy(0, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (void) fclose(fp);
</span>
#if __MPLS_HAVE_STAT64
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -527,19 +499,15 @@ main(int argc, char *argv[])
</span> check_copy(1, 0);
(void) fclose(fp);
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (arch_ok()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (verbose) printf(" testing 'fstatx64_np'\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Use fopen() to steer clear of open()/close() variant issues. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert((fp = fopen(source_link, "r")) != NULL && "open of source failed");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- stat_init(1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- stat_err = fstatx64_np(fileno(fp), &stat_buf.s64.s, fsec);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (check_err("fstatx64_np")) return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert(S_ISREG(get_mode(1)) && "fstatx64_np expected regular file");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- check_copy(1, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (void) fclose(fp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (verbose) printf(" avoiding 'fstatx64_np' due to Rosetta bug\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (verbose) printf(" testing 'fstatx64_np'\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Use fopen() to steer clear of open()/close() variant issues. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ assert((fp = fopen(source_link, "r")) != NULL && "open of source failed");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stat_init(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stat_err = fstatx64_np(fileno(fp), &stat_buf.s64.s, fsec);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (check_err("fstatx64_np")) return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ assert(S_ISREG(get_mode(1)) && "fstatx64_np expected regular file");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ check_copy(1, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (void) fclose(fp);
</span>
#endif /* __MPLS_HAVE_STAT64 */
</pre><pre style='margin:0'>
</pre>