<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/492b9e1c013c2a15a73f2bc5e14773223a67e85f">https://github.com/macports/macports-legacy-support/commit/492b9e1c013c2a15a73f2bc5e14773223a67e85f</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 492b9e1c013c2a15a73f2bc5e14773223a67e85f
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Thu Nov 28 16:40:47 2024 -0800

<span style='display:block; white-space:pre;color:#404040;'>    Add header support for stat64 with the 10.4 SDK.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This provides support in the headers for the stat64 struct with the
</span><span style='display:block; white-space:pre;color:#404040;'>    10.4 SDK, as follows:
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    MacportsLegacySupport.h adds feature flags for stat64 support on 10.4.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The internal __DARWIN_STRUCT_STAT64 macro is defined.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Symbol versioning macros related to INODE64 are added.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The "struct stat64" definition is provided when appropriate, along
</span><span style='display:block; white-space:pre;color:#404040;'>    with prototypes for the *stat64() functions.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Accommodations are made for the switch from _APPLE_C_SOURCE to
</span><span style='display:block; white-space:pre;color:#404040;'>    _DARWIN_C_SOURCE between the 10.4 and 10.5 SDKs.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    It does not include library support for *stat64() on 10.4, which
</span><span style='display:block; white-space:pre;color:#404040;'>    is left for a separate commit.
</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;'>    Builds and passes tests on all platforms.
</span>---
 README.md                       |  6 ++-
 include/MacportsLegacySupport.h |  4 ++
 include/sys/cdefs.h             | 25 +++++++++++
 include/sys/stat.h              | 92 +++++++++++++++++++++++++++++++++++++----
 4 files changed, 119 insertions(+), 8 deletions(-)

<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 62fbb78..0385ff8 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;'>@@ -173,7 +173,7 @@ Wrapped headers and replaced functions are:
</span>     <td>OSX10.9</td>
   </tr>
   <tr>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    <td rowspan="2"><code>sys/stat.h</code></td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td rowspan="3"><code>sys/stat.h</code></td>
</span>     <td>Adds <code>fchmodat</code>, <code>fstatat</code>, <code>fstatat64</code> (if required, and on 10.5+),
         and <code>mkdirat</code> functions</td>
     <td>OSX10.9</td>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -182,6 +182,10 @@ Wrapped headers and replaced functions are:
</span>     <td>Adds <code>lchmod</code> function</td>
     <td>OSX10.4</td>
   </tr>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+  <tr>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>Adds limited <code>stat64</code> support</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>OSX10.4</td>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  </tr>
</span>   <tr>
     <td><code>sys/random.h</code></td>
     <td>Adds <code>getentropy</code> function</td>
<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 f13e298..d8b4c0c 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;'>@@ -321,6 +321,10 @@
</span> #define __MPLS_SDK_SUPPORT_PTHREAD_SETNAME_NP__   (__MPLS_SDK_MAJOR < 1060)
 #define __MPLS_LIB_SUPPORT_PTHREAD_SETNAME_NP__   (__MPLS_TARGET_OSVER < 1060)
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* *stat() functions for 64-bit-inode variants (missing in 10.4) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_SDK_SUPPORT_STAT64__      (__MPLS_SDK_MAJOR < 1050)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_LIB_SUPPORT_STAT64__      (__MPLS_TARGET_OSVER < 1050)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* Compound macros, bundling functionality needed by multiple single features. */
 #define __MPLS_SDK_NEED_ATCALL_MACROS__  (__MPLS_SDK_SUPPORT_ATCALLS__ \
                                           || __MPLS_SDK_SUPPORT_SETATTRLISTAT__)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 3b0c5fb..e6ce488 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/sys/cdefs.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/sys/cdefs.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -17,6 +17,19 @@
</span> #ifndef _MACPORTS_SYS_CDEFS_H_
 #define _MACPORTS_SYS_CDEFS_H_
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Apple renamed _APPLE_C_SOURCE to _DARWIN_C_SOURCE in the 10.5 SDK.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Arrange to accept either.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Do this before processing cdefs.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !defined(_APPLE_C_SOURCE) && defined(_DARWIN_C_SOURCE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _APPLE_C_SOURCE _DARWIN_C_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !defined(_DARWIN_C_SOURCE) && defined(_APPLE_C_SOURCE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _DARWIN_C_SOURCE _APPLE_C_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /*
  * Work around bug in some versions of clang (e.g. Xcode 7.2 clang 7).
  * See: https://bugs.llvm.org/show_bug.cgi?id=23435
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -121,6 +134,18 @@
</span> 
 #endif /* __DARWIN_C_LEVEL undef */
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Provide any needed and missing symbol versioning (10.4) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_SUF_64_BIT_INO_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_64_BIT_INO_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_SUF_64_BIT_INO_T "$INODE64"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_SUF_64_BIT_INO_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_SUF_64_BIT_INO_T undef */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_INODE64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_INODE64(sym) __asm("_" __STRING(sym) __DARWIN_SUF_64_BIT_INO_T)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /*
  * Without help from legacy-support, 64-bit-inode functions are unavailable
  * in 10.4, and the 10.4 SDK has no means to generate references to them.
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/sys/stat.h b/include/sys/stat.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 3a59e22..14054e2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/sys/stat.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/sys/stat.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -26,6 +26,89 @@
</span> /* Include the primary system sys/stat.h */
 #include_next <sys/stat.h>
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_SDK_SUPPORT_STAT64__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* In lieu of 10.5+ sys/_types.h + machine/_types.h: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef unsigned long long __darwin_ino64_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* The following section is a subset of the Apple 10.5 sys/stat.h. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_STRUCT_STAT64_TIMES \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct timespec st_atimespec;           /* time of last access */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct timespec st_mtimespec;           /* time of last data modification */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct timespec st_ctimespec;           /* time of last status change */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct timespec st_birthtimespec;       /* time of file creation(birth) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_STRUCT_STAT64_TIMES \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   time_t          st_atime;               /* [XSI] Time of last access */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   long            st_atimensec;           /* nsec of last access */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   time_t          st_mtime;               /* [XSI] Last data modification time */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   long            st_mtimensec;           /* last data modification nsec */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   time_t          st_ctime;               /* [XSI] Time of last status change */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   long            st_ctimensec;           /* nsec of last status change */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   time_t          st_birthtime;           /*  File creation time(birth)  */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   long            st_birthtimensec;       /* nsec of File creation time */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
</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;'>+ * This structure is used as the second parameter to the fstat64(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * lstat64(), and stat64() functions, and for struct stat when
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * __DARWIN_64_BIT_INO_T is set. __DARWIN_STRUCT_STAT64 is defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * above, depending on whether we use struct timespec or the direct
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * components.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This is simillar to stat except for 64bit inode number
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * number instead of 32bit ino_t and the addition of create(birth) time.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_STRUCT_STAT64 { \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   dev_t           st_dev;                 /* [XSI] ID of device containing file */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   mode_t          st_mode;                /* [XSI] Mode of file (see below) */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   nlink_t         st_nlink;               /* [XSI] Number of hard links */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __darwin_ino64_t st_ino;                /* [XSI] File serial number */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   uid_t           st_uid;                 /* [XSI] User ID of the file */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gid_t           st_gid;                 /* [XSI] Group ID of the file */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   dev_t           st_rdev;                /* [XSI] Device ID */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DARWIN_STRUCT_STAT64_TIMES \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   off_t           st_size;                /* [XSI] file size, in bytes */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   blkcnt_t        st_blocks;              /* [XSI] blocks allocated for file */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   blksize_t       st_blksize;             /* [XSI] optimal blocksize for I/O */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __uint32_t      st_flags;               /* user defined flags for file */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __uint32_t      st_gen;                 /* file generation number */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __int32_t       st_lspare;              /* RESERVED: DO NOT USE! */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __int64_t       st_qspare[2];           /* RESERVED: DO NOT USE! */ \
</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;'>+/* End of first grab from Apple 10.5 sys/stat.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* More from Apple 10.5 sys/stat.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct stat64 __DARWIN_STRUCT_STAT64;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int        fstat64(int, struct stat64 *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int        lstat64(const char *, struct stat64 *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int        stat64(const char *, struct stat64 *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* End of additional grabs from Apple 10.5 sys/stat.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MPLS_SDK_SUPPORT_STAT64__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Set up condition for having "struct stat64" defined by the SDK. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if ((!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     && (!defined(__DARWIN_ONLY_64_BIT_INO_T) || !__DARWIN_ONLY_64_BIT_INO_T))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_HAVE_STAT64 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_HAVE_STAT64 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #if __DARWIN_C_LEVEL >= 200809L
 
 #if __MPLS_SDK_SUPPORT_UTIMENSAT__
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -51,15 +134,10 @@ extern int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
</span> extern int fstatat(int dirfd, const char *pathname,
                    struct stat *buf, int flags);
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * 64bit inode types appeared only on 10.5, and currently can't be replaced
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * on Tiger due to lack of kernel support for the underlying syscalls
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !__DARWIN_ONLY_64_BIT_INO_T && __MPLS_TARGET_OSVER >= 1050
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct stat64;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_HAVE_STAT64
</span> extern int fstatat64(int dirfd, const char *pathname,
                      struct stat64 *buf, int flags);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MPLS_HAVE_STAT64 */
</span> 
 extern int mkdirat(int dirfd, const char *pathname, mode_t mode);
 
</pre><pre style='margin:0'>

</pre>