Merge "Fix struct stat to match POSIX 2008."
diff --git a/libc/include/sys/stat.h b/libc/include/sys/stat.h
index 4900e84..7085ed9 100644
--- a/libc/include/sys/stat.h
+++ b/libc/include/sys/stat.h
@@ -52,12 +52,9 @@
int st_blksize; \
int __pad2; \
long st_blocks; \
- long st_atime; \
- unsigned long st_atime_nsec; \
- long st_mtime; \
- unsigned long st_mtime_nsec; \
- long st_ctime; \
- unsigned long st_ctime_nsec; \
+ struct timespec st_atim; \
+ struct timespec st_mtim; \
+ struct timespec st_ctim; \
unsigned int __unused4; \
unsigned int __unused5; \
@@ -73,12 +70,9 @@
unsigned int st_rdev; \
unsigned int __pad1[3]; \
long long st_size; \
- unsigned int st_atime; \
- unsigned int st_atime_nsec; \
- unsigned int st_mtime; \
- unsigned int st_mtime_nsec; \
- unsigned int st_ctime; \
- unsigned int st_ctime_nsec; \
+ struct timespec st_atim; \
+ struct timespec st_mtim; \
+ struct timespec st_ctim; \
unsigned int st_blksize; \
unsigned int __pad2; \
unsigned long long st_blocks; \
@@ -96,12 +90,9 @@
long st_size; \
long st_blksize; \
long st_blocks; \
- unsigned long st_atime; \
- unsigned long st_atime_nsec; \
- unsigned long st_mtime; \
- unsigned long st_mtime_nsec; \
- unsigned long st_ctime; \
- unsigned long st_ctime_nsec; \
+ struct timespec st_atim; \
+ struct timespec st_mtim; \
+ struct timespec st_ctim; \
long __pad3[3]; \
#else
@@ -118,12 +109,9 @@
long long st_size; \
unsigned long st_blksize; \
unsigned long long st_blocks; \
- unsigned long st_atime; \
- unsigned long st_atime_nsec; \
- unsigned long st_mtime; \
- unsigned long st_mtime_nsec; \
- unsigned long st_ctime; \
- unsigned long st_ctime_nsec; \
+ struct timespec st_atim; \
+ struct timespec st_mtim; \
+ struct timespec st_ctim; \
unsigned long long st_ino; \
#endif
@@ -133,9 +121,18 @@
#undef __STAT64_BODY
-#define st_atimensec st_atime_nsec
-#define st_mtimensec st_mtime_nsec
-#define st_ctimensec st_ctime_nsec
+/* Compatibility with older versions of POSIX. */
+#define st_atime st_atim.tv_sec
+#define st_mtime st_mtim.tv_sec
+#define st_ctime st_ctim.tv_sec
+/* Compatibility with glibc. */
+#define st_atimensec st_atim.tv_nsec
+#define st_mtimensec st_mtim.tv_nsec
+#define st_ctimensec st_ctim.tv_nsec
+/* Compatibility with the kernel and older versions of bionic. */
+#define st_atime_nsec st_atim.tv_nsec
+#define st_mtime_nsec st_mtim.tv_nsec
+#define st_ctime_nsec st_ctim.tv_nsec
#ifdef __USE_BSD
/* Permission macros provided by glibc for compatibility with BSDs. */