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