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