<pre style='margin:0'>
Ken (kencu) pushed a commit to branch tigerfix
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/e9cf5ab3f5d740f206eb0d764ff4e4cc892532e5">https://github.com/macports/macports-legacy-support/commit/e9cf5ab3f5d740f206eb0d764ff4e4cc892532e5</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit e9cf5ab3f5d740f206eb0d764ff4e4cc892532e5
</span>Author: kencu <ken.cunningham.webuse@gmail.com>
AuthorDate: Wed Mar 27 21:05:47 2019 -0600

<span style='display:block; white-space:pre;color:#404040;'>    fixes for the issue with tiger and fstatat64
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    clean up header usage in atcalls.c
</span><span style='display:block; white-space:pre;color:#404040;'>    move renameat to stdio.h
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    restrict fstatat64 to 10.5+ as 10.4 does not support
</span><span style='display:block; white-space:pre;color:#404040;'>    the underlying 64 bit inode type
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Given that this is very low-level functionality, I'm not sure
</span><span style='display:block; white-space:pre;color:#404040;'>    this function can be replaced on Tiger. It might be possible to
</span><span style='display:block; white-space:pre;color:#404040;'>    have a "sham" function that calls fstat instead to support code that
</span><span style='display:block; white-space:pre;color:#404040;'>    calls it, but we'd have to replace the stat64 struct and deal with the
</span><span style='display:block; white-space:pre;color:#404040;'>    32 vs 64 bit inode type issue -- may be impossible
</span>---
 README.md             |  2 +-
 include/stdio.h       | 27 +++++++++++++++++++++++++
 include/sys/stat.h    |  6 +++++-
 include/sys/stdio.h   | 55 ---------------------------------------------------
 src/atcalls.c         | 51 +++++------------------------------------------
 test/test_fstatat64.c |  7 +++++--
 6 files changed, 43 insertions(+), 105 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 4071efd..84b2110 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;'>@@ -100,7 +100,7 @@ Wrapped headers are:
</span>   </tr>
   <tr>
     <td rowspan="2"><code>sys/stat.h</code></td>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    <td>Adds <code>fchmodat</code>, <code>fstatat</code>, <code>fstatat64</code> (if required),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <td>Adds <code>fchmodat</code>, <code>fstatat</code>, <code>fstatat64</code> (if required, and on 10.5+),
</span>         and <code>mkdirat</code> functions</td>
     <td>OSX10.9</td>
   </tr>
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/stdio.h b/include/stdio.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 30bc0fd..0fc5a72 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/stdio.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/stdio.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -52,4 +52,31 @@ extern "C" {
</span> #endif
 #endif /*  __MP_LEGACY_SUPPORT_GETLINE__ */
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* renameat */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MP_LEGACY_SUPPORT_ATCALLS__
</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;'>+ * [XSI] The ssize_t and size_t types shall be defined as described
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * in <sys/types.h>.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef _SIZE_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _SIZE_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef __darwin_size_t            size_t;
</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;'>+#ifndef    _SSIZE_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define    _SSIZE_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef    __darwin_ssize_t        ssize_t;
</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;'>+#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  extern int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MP_LEGACY_SUPPORT_ATCALLS__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #endif /* _MACPORTS_STDIO_H_ */
<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 0e86529..8bdcb6f 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;'>@@ -31,9 +31,13 @@ extern "C" {
</span> #endif
   extern int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
   extern int fstatat(int dirfd, const char *pathname, struct stat *buf, int flags);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !__DARWIN_ONLY_64_BIT_INO_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* 64bit inode types appeared only on 10.5, and currently can't be replaced on Tiger */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* due to lack of kernel support for the underlying syscalls */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !__DARWIN_ONLY_64_BIT_INO_T && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
</span>   extern int fstatat64(int dirfd, const char *pathname, struct stat64 *buf, int flags);
 #endif
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>   extern int mkdirat(int dirfd, const char *pathname, mode_t mode);
 #ifdef __cplusplus
 }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/sys/stdio.h b/include/sys/stdio.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 65db78a..0000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/sys/stdio.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,55 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2010 Chris Jones <jonesc@macports.org>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2018 Ken Cunningham <kencu@macports.org>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _MACPORTS_SYSSTDIO_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _MACPORTS_SYSSTDIO_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* MP support header */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "MacportsLegacySupport.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Include the primary system sys/stdio.h */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include_next <sys/stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* renameat */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if __MP_LEGACY_SUPPORT_ATCALLS__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * [XSI] The ssize_t and size_t types shall be defined as described
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * in <sys/types.h>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _SIZE_T
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _SIZE_T
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef __darwin_size_t            size_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef    _SSIZE_T
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define    _SSIZE_T
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef    __darwin_ssize_t        ssize_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  extern int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* __MP_LEGACY_SUPPORT_ATCALLS__ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _MACPORTS_SYSSTDIO_H_ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/atcalls.c b/src/atcalls.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 6c010f7..1ba4746 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/atcalls.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/atcalls.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,6 +44,7 @@
</span> #include <sys/mount.h>
 #include <sys/ucred.h>
 #include <sys/shm.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/unistd.h>
</span> 
 #include <assert.h>
 #include <dlfcn.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -57,51 +58,6 @@
</span> #include <string.h>
 
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Descriptor value for the current working directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define AT_FDCWD   -2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Flags for the at functions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define AT_EACCESS             0x0010      /* Use effective ids in access check */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define AT_SYMLINK_NOFOLLOW        0x0020  /* Act on the symlink itself not the target */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define AT_SYMLINK_FOLLOW  0x0040  /* Act on target of symlink */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define AT_REMOVEDIR               0x0080  /* Path refers to directory */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* <sys/unistd.h> */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int getattrlistat(int dirfd, const char *pathname, struct attrlist *a,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                  void *buf, size_t size, unsigned long flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ssize_t readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int faccessat(int dirfd, const char *pathname, int mode, int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int fchownat(int dirfd, const char *pathname, uid_t owner, gid_t group, int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int linkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int symlinkat(const char *oldpath, int newdirfd, const char *newpath);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int unlinkat(int dirfd, const char *pathname, int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* #include <sys/stat.h> */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int fstatat(int dirfd, const char *pathname, struct stat *buf, int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !__DARWIN_ONLY_64_BIT_INO_T
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int fstatat64(int dirfd, const char *pathname, struct stat64 *buf, int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int mkdirat(int dirfd, const char *pathname, mode_t mode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* #include <sys/fcntl.h> */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int openat(int dirfd, const char *pathname, int flags, ...);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* #include <sys/stdio.h> */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> /* this is some apple internal magic */
 #include <sys/syscall.h>
 #include <fcntl.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -240,7 +196,10 @@ int fstatat(int dirfd, const char *pathname, struct stat *buf, int flags)
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !__DARWIN_ONLY_64_BIT_INO_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* 64bit inode types appeared only on 10.5, and currently can't be replaced on Tiger */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* due to lack of kernel support for the underlying syscalls */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !__DARWIN_ONLY_64_BIT_INO_T && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
</span> int fstatat64(int dirfd, const char *pathname, struct stat64 *buf, int flags)
 {
     ERR_ON(EINVAL, flags & ~AT_SYMLINK_NOFOLLOW);
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_fstatat64.c b/test/test_fstatat64.c
</span><span style='display:block; white-space:pre;color:#808080;'>index b185017..01d737d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_fstatat64.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_fstatat64.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -24,8 +24,11 @@
</span> #include <errno.h>
 #include <fcntl.h>
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#define FEEDBACK 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> int main (int argc, char **argv) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !__DARWIN_ONLY_64_BIT_INO_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !__DARWIN_ONLY_64_BIT_INO_T && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
</span>   int saved_errno = errno;
 
   /* Caveat: dirname() and basename() my modify their arguments, so create copies. */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -251,7 +254,7 @@ int main (int argc, char **argv) {
</span>     return (EXIT_FAILURE);
   }
 #else
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  printf ("fstatat64() is not supported on your platform, this test will do nothing.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  printf ("\n\nfstatat64() is not supported on your platform, this test will do nothing.\n\n");
</span> #endif
 
   return (EXIT_SUCCESS);
</pre><pre style='margin:0'>

</pre>