+ struct user64_timespec st_atimespec; /* time of last access */
+ struct user64_timespec st_mtimespec; /* time of last data modification */
+ struct user64_timespec st_ctimespec; /* time of last status change */
+ struct user64_timespec st_birthtimespec; /* time of file creation(birth) */
+#else
+ user64_time_t st_atime; /* [XSI] Time of last access */
+ user64_long_t st_atimensec; /* nsec of last access */
+ user64_time_t st_mtime; /* [XSI] Last data modification time */
+ user64_long_t st_mtimensec; /* last data modification nsec */
+ user64_time_t st_ctime; /* [XSI] Time of last status change */
+ user64_long_t st_ctimensec; /* nsec of last status change */
+ user64_time_t st_birthtime; /* File creation time(birth) */
+ user64_long_t st_birthtimensec; /* nsec of File creation time */
+#endif
+ off_t st_size; /* [XSI] file size, in bytes */
+ blkcnt_t st_blocks; /* [XSI] blocks allocated for file */
+ blksize_t st_blksize; /* [XSI] optimal blocksize for I/O */
+ __uint32_t st_flags; /* user defined flags for file */
+ __uint32_t st_gen; /* file generation number */
+ __uint32_t st_lspare; /* RESERVED: DO NOT USE! */
+ __int64_t st_qspare[2]; /* RESERVED: DO NOT USE! */
+};
+
+struct user32_stat64 {
+ dev_t st_dev; /* [XSI] ID of device containing file */
+ mode_t st_mode; /* [XSI] Mode of file (see below) */
+ nlink_t st_nlink; /* [XSI] Number of hard links */
+ ino64_t st_ino; /* [XSI] File serial number */
+ uid_t st_uid; /* [XSI] User ID of the file */
+ gid_t st_gid; /* [XSI] Group ID of the file */
+ dev_t st_rdev; /* [XSI] Device ID */
+#ifndef _POSIX_C_SOURCE
+ struct user32_timespec st_atimespec; /* time of last access */
+ struct user32_timespec st_mtimespec; /* time of last data modification */
+ struct user32_timespec st_ctimespec; /* time of last status change */
+ struct user32_timespec st_birthtimespec; /* time of file creation(birth) */
+#else
+ user32_time_t st_atime; /* [XSI] Time of last access */
+ user32_long_t st_atimensec; /* nsec of last access */
+ user32_time_t st_mtime; /* [XSI] Last data modification time */
+ user32_long_t st_mtimensec; /* last data modification nsec */
+ user32_time_t st_ctime; /* [XSI] Time of last status change */
+ user32_long_t st_ctimensec; /* nsec of last status change */
+ user32_time_t st_birthtime; /* File creation time(birth) */
+ user32_long_t st_birthtimensec; /* nsec of File creation time */
+#endif
+ off_t st_size; /* [XSI] file size, in bytes */
+ blkcnt_t st_blocks; /* [XSI] blocks allocated for file */
+ blksize_t st_blksize; /* [XSI] optimal blocksize for I/O */
+ __uint32_t st_flags; /* user defined flags for file */
+ __uint32_t st_gen; /* file generation number */
+ __uint32_t st_lspare; /* RESERVED: DO NOT USE! */
+ __int64_t st_qspare[2]; /* RESERVED: DO NOT USE! */
+#if defined(__x86_64__)
+/*
+ * This packing is required to ensure symmetry between userspace and kernelspace
+ * when the kernel is 64-bit and the user application is 32-bit. All currently
+ * supported ARM slices (arm64/armv7k/arm64_32) contain the same struct
+ * alignment ABI so this packing isn't needed for ARM.
+ */
+} __attribute__((packed, aligned(4)));
+#else
+};
+#endif
+
+extern void munge_user64_stat64(struct stat64 *sbp, struct user64_stat64 *usbp);
+extern void munge_user32_stat64(struct stat64 *sbp, struct user32_stat64 *usbp);
+
+#endif /* BSD_KERNEL_PRIVATE */
+
+#endif /* KERNEL */
+
+
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)