<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/49f7a3ac6b3085c642e428e23815060f6785eb35">https://github.com/macports/macports-legacy-support/commit/49f7a3ac6b3085c642e428e23815060f6785eb35</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 49f7a3ac6b3085c642e428e23815060f6785eb35
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Mon Jun 30 21:46:43 2025 -0700
<span style='display:block; white-space:pre;color:#404040;'> statxx: Streamline 10.4 ppc64 fix.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This makes the fix_stat() function able to be directly inserted in the
</span><span style='display:block; white-space:pre;color:#404040;'> return path from the underlying OS function, and does so.
</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>---
src/statxx.c | 47 +++++++++++++++--------------------------------
1 file changed, 15 insertions(+), 32 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/statxx.c b/src/statxx.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 5af1397..7077afb 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/statxx.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/statxx.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -63,16 +63,23 @@ struct stat64 __DARWIN_STRUCT_STAT64;
</span> * values of timestamps. Since sub-second values are not actually supported
* in this OS version, the fix is simply to add wrappers that clear all
* tv_nsec values in the results.
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * We arrange to pass through the result of the underlying *stat*() call,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * for convenience. We only apply the fix in the success case.
</span> */
/* Clear all tv_nsec values in the structure */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fix_stat(struct stat *buf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static __inline__ int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fix_stat(int result, struct stat *buf)
</span> {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (MPLS_SLOWPATH(result)) return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> buf->st_atimespec.tv_nsec = 0;
buf->st_mtimespec.tv_nsec = 0;
buf->st_ctimespec.tv_nsec = 0;
/* Note that the non-ino64 version has no birthtime. */
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span> }
/* Now all the wrapper functions */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -80,34 +87,22 @@ fix_stat(struct stat *buf)
</span> int
stat(const char *path, struct stat *buf)
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int ret;
</span> GET_OS_FUNC(stat)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = (*os_stat)(path, buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!ret) fix_stat(buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return fix_stat((*os_stat)(path, buf), buf);
</span> }
int
lstat(const char *path, struct stat *buf)
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int ret;
</span> GET_OS_FUNC(lstat)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = (*os_lstat)(path, buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!ret) fix_stat(buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return fix_stat((*os_lstat)(path, buf), buf);
</span> }
int
fstat(int fildes, struct stat *buf)
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int ret;
</span> GET_OS_FUNC(fstat)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = (*os_fstat)(fildes, buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!ret) fix_stat(buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return fix_stat((*os_fstat)(fildes, buf), buf);
</span> }
/*
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -118,34 +113,22 @@ fstat(int fildes, struct stat *buf)
</span> int
statx_np(const char *path, struct stat *buf, filesec_t fsec)
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int ret;
</span> GET_OS_FUNC(statx_np)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = (*os_statx_np)(path, buf, fsec);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!ret) fix_stat(buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return fix_stat((*os_statx_np)(path, buf, fsec), buf);
</span> }
int
lstatx_np(const char *path, struct stat *buf, filesec_t fsec)
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int ret;
</span> GET_OS_FUNC(lstatx_np)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = (*os_lstatx_np)(path, buf, fsec);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!ret) fix_stat(buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return fix_stat((*os_lstatx_np)(path, buf, fsec), buf);
</span> }
int
fstatx_np(int fildes, struct stat *buf, filesec_t fsec)
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int ret;
</span> GET_OS_FUNC(fstatx_np)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = (*os_fstatx_np)(fildes, buf, fsec);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!ret) fix_stat(buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return fix_stat((*os_fstatx_np)(fildes, buf, fsec), buf);
</span> }
#endif /* __MPLS_LIB_FIX_TIGER_PPC64__ */
</pre><pre style='margin:0'>
</pre>