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