<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>