- 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 */
+ 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
+};