Home | History | Annotate | Download | only in asm
      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2 #ifndef _ASM_X86_STAT_H
      3 #define _ASM_X86_STAT_H
      4 
      5 #include <asm/posix_types.h>
      6 
      7 #define STAT_HAVE_NSEC 1
      8 
      9 #ifdef __i386__
     10 struct stat {
     11 	unsigned long  st_dev;
     12 	unsigned long  st_ino;
     13 	unsigned short st_mode;
     14 	unsigned short st_nlink;
     15 	unsigned short st_uid;
     16 	unsigned short st_gid;
     17 	unsigned long  st_rdev;
     18 	unsigned long  st_size;
     19 	unsigned long  st_blksize;
     20 	unsigned long  st_blocks;
     21 	unsigned long  st_atime;
     22 	unsigned long  st_atime_nsec;
     23 	unsigned long  st_mtime;
     24 	unsigned long  st_mtime_nsec;
     25 	unsigned long  st_ctime;
     26 	unsigned long  st_ctime_nsec;
     27 	unsigned long  __unused4;
     28 	unsigned long  __unused5;
     29 };
     30 
     31 /* We don't need to memset the whole thing just to initialize the padding */
     32 #define INIT_STRUCT_STAT_PADDING(st) do {	\
     33 	st.__unused4 = 0;			\
     34 	st.__unused5 = 0;			\
     35 } while (0)
     36 
     37 #define STAT64_HAS_BROKEN_ST_INO	1
     38 
     39 /* This matches struct stat64 in glibc2.1, hence the absolutely
     40  * insane amounts of padding around dev_t's.
     41  */
     42 struct stat64 {
     43 	unsigned long long	st_dev;
     44 	unsigned char	__pad0[4];
     45 
     46 	unsigned long	__st_ino;
     47 
     48 	unsigned int	st_mode;
     49 	unsigned int	st_nlink;
     50 
     51 	unsigned long	st_uid;
     52 	unsigned long	st_gid;
     53 
     54 	unsigned long long	st_rdev;
     55 	unsigned char	__pad3[4];
     56 
     57 	long long	st_size;
     58 	unsigned long	st_blksize;
     59 
     60 	/* Number 512-byte blocks allocated. */
     61 	unsigned long long	st_blocks;
     62 
     63 	unsigned long	st_atime;
     64 	unsigned long	st_atime_nsec;
     65 
     66 	unsigned long	st_mtime;
     67 	unsigned int	st_mtime_nsec;
     68 
     69 	unsigned long	st_ctime;
     70 	unsigned long	st_ctime_nsec;
     71 
     72 	unsigned long long	st_ino;
     73 };
     74 
     75 /* We don't need to memset the whole thing just to initialize the padding */
     76 #define INIT_STRUCT_STAT64_PADDING(st) do {		\
     77 	memset(&st.__pad0, 0, sizeof(st.__pad0));	\
     78 	memset(&st.__pad3, 0, sizeof(st.__pad3));	\
     79 } while (0)
     80 
     81 #else /* __i386__ */
     82 
     83 struct stat {
     84 	__kernel_ulong_t	st_dev;
     85 	__kernel_ulong_t	st_ino;
     86 	__kernel_ulong_t	st_nlink;
     87 
     88 	unsigned int		st_mode;
     89 	unsigned int		st_uid;
     90 	unsigned int		st_gid;
     91 	unsigned int		__pad0;
     92 	__kernel_ulong_t	st_rdev;
     93 	__kernel_long_t		st_size;
     94 	__kernel_long_t		st_blksize;
     95 	__kernel_long_t		st_blocks;	/* Number 512-byte blocks allocated. */
     96 
     97 	__kernel_ulong_t	st_atime;
     98 	__kernel_ulong_t	st_atime_nsec;
     99 	__kernel_ulong_t	st_mtime;
    100 	__kernel_ulong_t	st_mtime_nsec;
    101 	__kernel_ulong_t	st_ctime;
    102 	__kernel_ulong_t	st_ctime_nsec;
    103 	__kernel_long_t		__unused[3];
    104 };
    105 
    106 /* We don't need to memset the whole thing just to initialize the padding */
    107 #define INIT_STRUCT_STAT_PADDING(st) do {	\
    108 	st.__pad0 = 0;				\
    109 	st.__unused[0] = 0;			\
    110 	st.__unused[1] = 0;			\
    111 	st.__unused[2] = 0;			\
    112 } while (0)
    113 
    114 #endif
    115 
    116 /* for 32bit emulation and 32 bit kernels */
    117 struct __old_kernel_stat {
    118 	unsigned short st_dev;
    119 	unsigned short st_ino;
    120 	unsigned short st_mode;
    121 	unsigned short st_nlink;
    122 	unsigned short st_uid;
    123 	unsigned short st_gid;
    124 	unsigned short st_rdev;
    125 #ifdef __i386__
    126 	unsigned long  st_size;
    127 	unsigned long  st_atime;
    128 	unsigned long  st_mtime;
    129 	unsigned long  st_ctime;
    130 #else
    131 	unsigned int  st_size;
    132 	unsigned int  st_atime;
    133 	unsigned int  st_mtime;
    134 	unsigned int  st_ctime;
    135 #endif
    136 };
    137 
    138 #endif /* _ASM_X86_STAT_H */
    139