Ken Thomases : ntdll: For Darwin/Mac OS X, use legacy getdirentries if 64-bit inodes enabled.

Alexandre Julliard julliard at winehq.org
Mon Aug 3 11:14:29 CDT 2009


Module: wine
Branch: master
Commit: 028b763f2f51e78084129975e6333271dd2f861c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=028b763f2f51e78084129975e6333271dd2f861c

Author: Ken Thomases <ken at codeweavers.com>
Date:   Fri Jul 31 16:25:48 2009 -0500

ntdll: For Darwin/Mac OS X, use legacy getdirentries if 64-bit inodes enabled.

Fixes building on Snow Leopard.

---

 dlls/ntdll/directory.c |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index bccfba6..0cd531e 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -1274,6 +1274,30 @@ done:
 
 #elif defined HAVE_GETDIRENTRIES
 
+#if _DARWIN_FEATURE_64_BIT_INODE
+
+/* Darwin doesn't provide a version of getdirentries with support for 64-bit
+ * inodes.  When 64-bit inodes are enabled, the getdirentries symbol is mapped
+ * to _getdirentries_is_not_available_when_64_bit_inodes_are_in_effect so that
+ * we get link errors if we try to use it.  We still need getdirentries, but we
+ * don't need it to support 64-bit inodes.  So, we use the legacy getdirentries
+ * with 32-bit inodes.  We have to be careful to use a corresponding dirent
+ * structure, too.
+ */
+int darwin_legacy_getdirentries(int, char *, int, long *) __asm("_getdirentries");
+#define getdirentries darwin_legacy_getdirentries
+
+struct darwin_legacy_dirent {
+    __uint32_t d_ino;
+    __uint16_t d_reclen;
+    __uint8_t  d_type;
+    __uint8_t  d_namlen;
+    char d_name[__DARWIN_MAXNAMLEN + 1];
+};
+#define dirent darwin_legacy_dirent
+
+#endif
+
 /***********************************************************************
  *           wine_getdirentries
  *
@@ -1438,6 +1462,12 @@ done:
     if (data != local_buffer) RtlFreeHeap( GetProcessHeap(), 0, data );
     return res;
 }
+
+#if _DARWIN_FEATURE_64_BIT_INODE
+#undef getdirentries
+#undef dirent
+#endif
+
 #endif  /* HAVE_GETDIRENTRIES */
 
 




More information about the wine-cvs mailing list