10437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef _ASM_X86_STAT_H
20437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define _ASM_X86_STAT_H
30437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
4e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#include <asm/posix_types.h>
5e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
60437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define STAT_HAVE_NSEC 1
70437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
80437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifdef __i386__
90437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferrisstruct stat {
100437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_dev;
110437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_ino;
120437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_mode;
130437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_nlink;
140437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_uid;
150437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_gid;
160437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_rdev;
170437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_size;
180437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_blksize;
190437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_blocks;
200437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_atime;
210437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_atime_nsec;
220437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_mtime;
230437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_mtime_nsec;
240437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_ctime;
250437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_ctime_nsec;
260437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  __unused4;
270437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  __unused5;
280437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris};
290437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
300437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* We don't need to memset the whole thing just to initialize the padding */
310437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define INIT_STRUCT_STAT_PADDING(st) do {	\
320437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	st.__unused4 = 0;			\
330437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	st.__unused5 = 0;			\
340437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris} while (0)
350437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
360437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define STAT64_HAS_BROKEN_ST_INO	1
370437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
380437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* This matches struct stat64 in glibc2.1, hence the absolutely
390437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris * insane amounts of padding around dev_t's.
400437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris */
410437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferrisstruct stat64 {
420437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long long	st_dev;
430437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned char	__pad0[4];
440437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
450437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	__st_ino;
460437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
470437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int	st_mode;
480437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int	st_nlink;
490437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
500437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	st_uid;
510437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	st_gid;
520437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
530437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long long	st_rdev;
540437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned char	__pad3[4];
550437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
560437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long long	st_size;
570437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	st_blksize;
580437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
590437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	/* Number 512-byte blocks allocated. */
600437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long long	st_blocks;
610437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
620437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	st_atime;
630437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	st_atime_nsec;
640437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
650437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	st_mtime;
660437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int	st_mtime_nsec;
670437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
680437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	st_ctime;
690437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long	st_ctime_nsec;
700437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
710437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long long	st_ino;
720437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris};
730437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
740437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* We don't need to memset the whole thing just to initialize the padding */
750437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define INIT_STRUCT_STAT64_PADDING(st) do {		\
760437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	memset(&st.__pad0, 0, sizeof(st.__pad0));	\
770437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	memset(&st.__pad3, 0, sizeof(st.__pad3));	\
780437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris} while (0)
790437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
800437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#else /* __i386__ */
810437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
820437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferrisstruct stat {
83e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_dev;
84e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_ino;
85e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_nlink;
86e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
87e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	unsigned int		st_mode;
88e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	unsigned int		st_uid;
89e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	unsigned int		st_gid;
90e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	unsigned int		__pad0;
91e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_rdev;
92e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_long_t		st_size;
93e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_long_t		st_blksize;
94e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_long_t		st_blocks;	/* Number 512-byte blocks allocated. */
95e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
96e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_atime;
97e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_atime_nsec;
98e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_mtime;
99e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_mtime_nsec;
100e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_ctime;
101e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_ulong_t	st_ctime_nsec;
102e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__kernel_long_t		__unused[3];
1030437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris};
1040437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
1050437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* We don't need to memset the whole thing just to initialize the padding */
1060437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define INIT_STRUCT_STAT_PADDING(st) do {	\
1070437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	st.__pad0 = 0;				\
1080437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	st.__unused[0] = 0;			\
1090437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	st.__unused[1] = 0;			\
1100437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	st.__unused[2] = 0;			\
1110437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris} while (0)
1120437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
1130437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif
1140437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
1150437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* for 32bit emulation and 32 bit kernels */
1160437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferrisstruct __old_kernel_stat {
1170437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_dev;
1180437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_ino;
1190437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_mode;
1200437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_nlink;
1210437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_uid;
1220437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_gid;
1230437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned short st_rdev;
1240437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifdef __i386__
1250437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_size;
1260437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_atime;
1270437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_mtime;
1280437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long  st_ctime;
1290437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#else
1300437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  st_size;
1310437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  st_atime;
1320437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  st_mtime;
1330437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  st_ctime;
1340437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif
1350437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris};
1360437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
1370437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* _ASM_X86_STAT_H */
138