hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* 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 */