|  | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | 
|  | #ifndef _ASM_X86_STAT_H | 
|  | #define _ASM_X86_STAT_H | 
|  |  | 
|  | #include <asm/posix_types.h> | 
|  |  | 
|  | #define STAT_HAVE_NSEC 1 | 
|  |  | 
|  | #ifdef __i386__ | 
|  | struct stat { | 
|  | unsigned long  st_dev; | 
|  | unsigned long  st_ino; | 
|  | unsigned short st_mode; | 
|  | unsigned short st_nlink; | 
|  | unsigned short st_uid; | 
|  | unsigned short st_gid; | 
|  | unsigned long  st_rdev; | 
|  | unsigned long  st_size; | 
|  | unsigned long  st_blksize; | 
|  | unsigned long  st_blocks; | 
|  | unsigned long  st_atime; | 
|  | unsigned long  st_atime_nsec; | 
|  | unsigned long  st_mtime; | 
|  | unsigned long  st_mtime_nsec; | 
|  | unsigned long  st_ctime; | 
|  | unsigned long  st_ctime_nsec; | 
|  | unsigned long  __unused4; | 
|  | unsigned long  __unused5; | 
|  | }; | 
|  |  | 
|  | /* We don't need to memset the whole thing just to initialize the padding */ | 
|  | #define INIT_STRUCT_STAT_PADDING(st) do {	\ | 
|  | st.__unused4 = 0;			\ | 
|  | st.__unused5 = 0;			\ | 
|  | } while (0) | 
|  |  | 
|  | #define STAT64_HAS_BROKEN_ST_INO	1 | 
|  |  | 
|  | /* This matches struct stat64 in glibc2.1, hence the absolutely | 
|  | * insane amounts of padding around dev_t's. | 
|  | */ | 
|  | struct stat64 { | 
|  | unsigned long long	st_dev; | 
|  | unsigned char	__pad0[4]; | 
|  |  | 
|  | unsigned long	__st_ino; | 
|  |  | 
|  | unsigned int	st_mode; | 
|  | unsigned int	st_nlink; | 
|  |  | 
|  | unsigned long	st_uid; | 
|  | unsigned long	st_gid; | 
|  |  | 
|  | unsigned long long	st_rdev; | 
|  | unsigned char	__pad3[4]; | 
|  |  | 
|  | long long	st_size; | 
|  | unsigned long	st_blksize; | 
|  |  | 
|  | /* Number 512-byte blocks allocated. */ | 
|  | unsigned long long	st_blocks; | 
|  |  | 
|  | unsigned long	st_atime; | 
|  | unsigned long	st_atime_nsec; | 
|  |  | 
|  | unsigned long	st_mtime; | 
|  | unsigned int	st_mtime_nsec; | 
|  |  | 
|  | unsigned long	st_ctime; | 
|  | unsigned long	st_ctime_nsec; | 
|  |  | 
|  | unsigned long long	st_ino; | 
|  | }; | 
|  |  | 
|  | /* We don't need to memset the whole thing just to initialize the padding */ | 
|  | #define INIT_STRUCT_STAT64_PADDING(st) do {		\ | 
|  | memset(&st.__pad0, 0, sizeof(st.__pad0));	\ | 
|  | memset(&st.__pad3, 0, sizeof(st.__pad3));	\ | 
|  | } while (0) | 
|  |  | 
|  | #else /* __i386__ */ | 
|  |  | 
|  | struct stat { | 
|  | __kernel_ulong_t	st_dev; | 
|  | __kernel_ulong_t	st_ino; | 
|  | __kernel_ulong_t	st_nlink; | 
|  |  | 
|  | unsigned int		st_mode; | 
|  | unsigned int		st_uid; | 
|  | unsigned int		st_gid; | 
|  | unsigned int		__pad0; | 
|  | __kernel_ulong_t	st_rdev; | 
|  | __kernel_long_t		st_size; | 
|  | __kernel_long_t		st_blksize; | 
|  | __kernel_long_t		st_blocks;	/* Number 512-byte blocks allocated. */ | 
|  |  | 
|  | __kernel_ulong_t	st_atime; | 
|  | __kernel_ulong_t	st_atime_nsec; | 
|  | __kernel_ulong_t	st_mtime; | 
|  | __kernel_ulong_t	st_mtime_nsec; | 
|  | __kernel_ulong_t	st_ctime; | 
|  | __kernel_ulong_t	st_ctime_nsec; | 
|  | __kernel_long_t		__unused[3]; | 
|  | }; | 
|  |  | 
|  | /* We don't need to memset the whole thing just to initialize the padding */ | 
|  | #define INIT_STRUCT_STAT_PADDING(st) do {	\ | 
|  | st.__pad0 = 0;				\ | 
|  | st.__unused[0] = 0;			\ | 
|  | st.__unused[1] = 0;			\ | 
|  | st.__unused[2] = 0;			\ | 
|  | } while (0) | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /* for 32bit emulation and 32 bit kernels */ | 
|  | struct __old_kernel_stat { | 
|  | unsigned short st_dev; | 
|  | unsigned short st_ino; | 
|  | unsigned short st_mode; | 
|  | unsigned short st_nlink; | 
|  | unsigned short st_uid; | 
|  | unsigned short st_gid; | 
|  | unsigned short st_rdev; | 
|  | #ifdef __i386__ | 
|  | unsigned long  st_size; | 
|  | unsigned long  st_atime; | 
|  | unsigned long  st_mtime; | 
|  | unsigned long  st_ctime; | 
|  | #else | 
|  | unsigned int  st_size; | 
|  | unsigned int  st_atime; | 
|  | unsigned int  st_mtime; | 
|  | unsigned int  st_ctime; | 
|  | #endif | 
|  | }; | 
|  |  | 
|  | #endif /* _ASM_X86_STAT_H */ |