Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 #ifndef _ASM_X86_STAT_H
0003 #define _ASM_X86_STAT_H
0004 
0005 #include <asm/posix_types.h>
0006 
0007 #define STAT_HAVE_NSEC 1
0008 
0009 #ifdef __i386__
0010 struct stat {
0011     unsigned long  st_dev;
0012     unsigned long  st_ino;
0013     unsigned short st_mode;
0014     unsigned short st_nlink;
0015     unsigned short st_uid;
0016     unsigned short st_gid;
0017     unsigned long  st_rdev;
0018     unsigned long  st_size;
0019     unsigned long  st_blksize;
0020     unsigned long  st_blocks;
0021     unsigned long  st_atime;
0022     unsigned long  st_atime_nsec;
0023     unsigned long  st_mtime;
0024     unsigned long  st_mtime_nsec;
0025     unsigned long  st_ctime;
0026     unsigned long  st_ctime_nsec;
0027     unsigned long  __unused4;
0028     unsigned long  __unused5;
0029 };
0030 
0031 /* We don't need to memset the whole thing just to initialize the padding */
0032 #define INIT_STRUCT_STAT_PADDING(st) do {   \
0033     st.__unused4 = 0;           \
0034     st.__unused5 = 0;           \
0035 } while (0)
0036 
0037 #define STAT64_HAS_BROKEN_ST_INO    1
0038 
0039 /* This matches struct stat64 in glibc2.1, hence the absolutely
0040  * insane amounts of padding around dev_t's.
0041  */
0042 struct stat64 {
0043     unsigned long long  st_dev;
0044     unsigned char   __pad0[4];
0045 
0046     unsigned long   __st_ino;
0047 
0048     unsigned int    st_mode;
0049     unsigned int    st_nlink;
0050 
0051     unsigned long   st_uid;
0052     unsigned long   st_gid;
0053 
0054     unsigned long long  st_rdev;
0055     unsigned char   __pad3[4];
0056 
0057     long long   st_size;
0058     unsigned long   st_blksize;
0059 
0060     /* Number 512-byte blocks allocated. */
0061     unsigned long long  st_blocks;
0062 
0063     unsigned long   st_atime;
0064     unsigned long   st_atime_nsec;
0065 
0066     unsigned long   st_mtime;
0067     unsigned int    st_mtime_nsec;
0068 
0069     unsigned long   st_ctime;
0070     unsigned long   st_ctime_nsec;
0071 
0072     unsigned long long  st_ino;
0073 };
0074 
0075 /* We don't need to memset the whole thing just to initialize the padding */
0076 #define INIT_STRUCT_STAT64_PADDING(st) do {     \
0077     memset(&st.__pad0, 0, sizeof(st.__pad0));   \
0078     memset(&st.__pad3, 0, sizeof(st.__pad3));   \
0079 } while (0)
0080 
0081 #else /* __i386__ */
0082 
0083 struct stat {
0084     __kernel_ulong_t    st_dev;
0085     __kernel_ulong_t    st_ino;
0086     __kernel_ulong_t    st_nlink;
0087 
0088     unsigned int        st_mode;
0089     unsigned int        st_uid;
0090     unsigned int        st_gid;
0091     unsigned int        __pad0;
0092     __kernel_ulong_t    st_rdev;
0093     __kernel_long_t     st_size;
0094     __kernel_long_t     st_blksize;
0095     __kernel_long_t     st_blocks;  /* Number 512-byte blocks allocated. */
0096 
0097     __kernel_ulong_t    st_atime;
0098     __kernel_ulong_t    st_atime_nsec;
0099     __kernel_ulong_t    st_mtime;
0100     __kernel_ulong_t    st_mtime_nsec;
0101     __kernel_ulong_t    st_ctime;
0102     __kernel_ulong_t    st_ctime_nsec;
0103     __kernel_long_t     __unused[3];
0104 };
0105 
0106 /* We don't need to memset the whole thing just to initialize the padding */
0107 #define INIT_STRUCT_STAT_PADDING(st) do {   \
0108     st.__pad0 = 0;              \
0109     st.__unused[0] = 0;         \
0110     st.__unused[1] = 0;         \
0111     st.__unused[2] = 0;         \
0112 } while (0)
0113 
0114 #endif
0115 
0116 /* for 32bit emulation and 32 bit kernels */
0117 struct __old_kernel_stat {
0118     unsigned short st_dev;
0119     unsigned short st_ino;
0120     unsigned short st_mode;
0121     unsigned short st_nlink;
0122     unsigned short st_uid;
0123     unsigned short st_gid;
0124     unsigned short st_rdev;
0125 #ifdef __i386__
0126     unsigned long  st_size;
0127     unsigned long  st_atime;
0128     unsigned long  st_mtime;
0129     unsigned long  st_ctime;
0130 #else
0131     unsigned int  st_size;
0132     unsigned int  st_atime;
0133     unsigned int  st_mtime;
0134     unsigned int  st_ctime;
0135 #endif
0136 };
0137 
0138 #endif /* _ASM_X86_STAT_H */