^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef __ASM_GENERIC_STAT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define __ASM_GENERIC_STAT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Everybody gets this wrong and has to stick with it for all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * eternity. Hopefully, this version gets used by new architectures
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * so they don't fall into the same traps.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * stat64 is copied from powerpc64, with explicit padding added.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * stat is the same structure layout on 64-bit, without the 'long long'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * types.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * By convention, 64 bit architectures use the stat interface, while
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * 32 bit architectures use the stat64 interface. Note that we don't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * provide an __old_kernel_stat here, which new architecture should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * not have to start with.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #include <asm/bitsperlong.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define STAT_HAVE_NSEC 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct stat {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) unsigned long st_dev; /* Device. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) unsigned long st_ino; /* File serial number. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) unsigned int st_mode; /* File mode. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) unsigned int st_nlink; /* Link count. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) unsigned int st_uid; /* User ID of the file's owner. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) unsigned int st_gid; /* Group ID of the file's group. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) unsigned long st_rdev; /* Device number, if device. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) unsigned long __pad1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) long st_size; /* Size of file, in bytes. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) int st_blksize; /* Optimal block size for I/O. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) int __pad2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) long st_blocks; /* Number 512-byte blocks allocated. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) long st_atime; /* Time of last access. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) unsigned long st_atime_nsec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) long st_mtime; /* Time of last modification. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) unsigned long st_mtime_nsec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) long st_ctime; /* Time of last status change. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) unsigned long st_ctime_nsec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) unsigned int __unused4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) unsigned int __unused5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) /* This matches struct stat64 in glibc2.1. Only used for 32 bit. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #if __BITS_PER_LONG != 64 || defined(__ARCH_WANT_STAT64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct stat64 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) unsigned long long st_dev; /* Device. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) unsigned long long st_ino; /* File serial number. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) unsigned int st_mode; /* File mode. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) unsigned int st_nlink; /* Link count. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) unsigned int st_uid; /* User ID of the file's owner. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) unsigned int st_gid; /* Group ID of the file's group. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) unsigned long long st_rdev; /* Device number, if device. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) unsigned long long __pad1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) long long st_size; /* Size of file, in bytes. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) int st_blksize; /* Optimal block size for I/O. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) int __pad2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) long long st_blocks; /* Number 512-byte blocks allocated. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) int st_atime; /* Time of last access. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) unsigned int st_atime_nsec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) int st_mtime; /* Time of last modification. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) unsigned int st_mtime_nsec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) int st_ctime; /* Time of last status change. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) unsigned int st_ctime_nsec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) unsigned int __unused4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) unsigned int __unused5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #endif /* __ASM_GENERIC_STAT_H */