File: linux_stat.h

package info (click to toggle)
chromium 138.0.7204.157-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,864 kB
  • sloc: cpp: 34,936,859; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,967; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (236 lines) | stat: -rw-r--r-- 5,830 bytes parent folder | download | duplicates (5)
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_STAT_H_
#define SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_STAT_H_

#include <stdint.h>

#include "build/build_config.h"
#include "sandbox/linux/system_headers/linux_syscalls.h"

#if defined(ARCH_CPU_MIPS_FAMILY)
struct kernel_stat64 {
  unsigned st_dev;
  unsigned __pad0[3];
  unsigned long long st_ino;
  unsigned st_mode;
  unsigned st_nlink;
  unsigned st_uid;
  unsigned st_gid;
  unsigned st_rdev;
  unsigned __pad1[3];
  long long st_size;
  unsigned st_atime_;
  unsigned st_atime_nsec_;
  unsigned st_mtime_;
  unsigned st_mtime_nsec_;
  unsigned st_ctime_;
  unsigned st_ctime_nsec_;
  unsigned st_blksize;
  unsigned __pad2;
  unsigned long long st_blocks;
};
#else
struct kernel_stat64 {
  unsigned long long st_dev;
  unsigned char __pad0[4];
  unsigned __st_ino;
  unsigned st_mode;
  unsigned st_nlink;
  unsigned st_uid;
  unsigned st_gid;
  unsigned long long st_rdev;
  unsigned char __pad3[4];
  long long st_size;
  unsigned st_blksize;
  unsigned long long st_blocks;
  unsigned st_atime_;
  unsigned st_atime_nsec_;
  unsigned st_mtime_;
  unsigned st_mtime_nsec_;
  unsigned st_ctime_;
  unsigned st_ctime_nsec_;
  unsigned long long st_ino;
};
#endif

#if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
struct kernel_stat {
  /* The kernel headers suggest that st_dev and st_rdev should be 32bit
   * quantities encoding 12bit major and 20bit minor numbers in an interleaved
   * format. In reality, we do not see useful data in the top bits. So,
   * we'll leave the padding in here, until we find a better solution.
   */
  unsigned short st_dev;
  short pad1;
  unsigned st_ino;
  unsigned short st_mode;
  unsigned short st_nlink;
  unsigned short st_uid;
  unsigned short st_gid;
  unsigned short st_rdev;
  short pad2;
  unsigned st_size;
  unsigned st_blksize;
  unsigned st_blocks;
  unsigned st_atime_;
  unsigned st_atime_nsec_;
  unsigned st_mtime_;
  unsigned st_mtime_nsec_;
  unsigned st_ctime_;
  unsigned st_ctime_nsec_;
  unsigned __unused4;
  unsigned __unused5;
};
#elif defined(__x86_64__)
struct kernel_stat {
  uint64_t st_dev;
  uint64_t st_ino;
  uint64_t st_nlink;
  unsigned st_mode;
  unsigned st_uid;
  unsigned st_gid;
  unsigned __pad0;
  uint64_t st_rdev;
  int64_t st_size;
  int64_t st_blksize;
  int64_t st_blocks;
  uint64_t st_atime_;
  uint64_t st_atime_nsec_;
  uint64_t st_mtime_;
  uint64_t st_mtime_nsec_;
  uint64_t st_ctime_;
  uint64_t st_ctime_nsec_;
  int64_t __unused4[3];
};
#elif (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_64_BITS))
struct kernel_stat {
  unsigned st_dev;
  unsigned __pad0[3];
  unsigned long st_ino;
  unsigned st_mode;
  unsigned st_nlink;
  unsigned st_uid;
  unsigned st_gid;
  unsigned st_rdev;
  unsigned __pad1[3];
  long st_size;
  unsigned st_atime_;
  unsigned st_atime_nsec_;
  unsigned st_mtime_;
  unsigned st_mtime_nsec_;
  unsigned st_ctime_;
  unsigned st_ctime_nsec_;
  unsigned st_blksize;
  unsigned __pad2;
  unsigned long st_blocks;
};
#elif (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
struct kernel_stat {
  unsigned st_dev;
  int st_pad1[3];
  unsigned st_ino;
  unsigned st_mode;
  unsigned st_nlink;
  unsigned st_uid;
  unsigned st_gid;
  unsigned st_rdev;
  int st_pad2[2];
  long st_size;
  int st_pad3;
  long st_atime_;
  long st_atime_nsec_;
  long st_mtime_;
  long st_mtime_nsec_;
  long st_ctime_;
  long st_ctime_nsec_;
  int st_blksize;
  int st_blocks;
  int st_pad4[14];
};
#elif defined(__aarch64__)
struct kernel_stat {
  unsigned long st_dev;
  unsigned long st_ino;
  unsigned int st_mode;
  unsigned int st_nlink;
  unsigned int st_uid;
  unsigned int st_gid;
  unsigned long st_rdev;
  unsigned long __pad1;
  long st_size;
  int st_blksize;
  int __pad2;
  long st_blocks;
  long st_atime_;
  unsigned long st_atime_nsec_;
  long st_mtime_;
  unsigned long st_mtime_nsec_;
  long st_ctime_;
  unsigned long st_ctime_nsec_;
  unsigned int __unused4;
  unsigned int __unused5;
};
#elif defined(__powerpc64__)
struct kernel_stat {
   unsigned long   st_dev;
   ino_t           st_ino;
   unsigned long   st_nlink;
   mode_t          st_mode;
   uid_t           st_uid;
   gid_t           st_gid;
   unsigned long   st_rdev;
   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;
   unsigned long   __unused6;
};
#endif

#if !defined(AT_EMPTY_PATH)
#define AT_EMPTY_PATH 0x1000
#endif

#if !defined(STATX_BASIC_STATS)
#define STATX_BASIC_STATS 0x000007ffU
#endif

// On 32-bit systems, we default to the 64-bit stat struct like libc
// implementations do. Otherwise we default to the normal stat struct which is
// already 64-bit.
// These defines make it easy to call the right syscall to fill out a 64-bit
// stat struct, which is the default in libc implementations but requires
// different syscall names on 32 and 64-bit platforms.
#if defined(__NR_fstatat64)

namespace sandbox {
using default_stat_struct = struct kernel_stat64;
}  // namespace sandbox

#define __NR_fstatat_default __NR_fstatat64
#define __NR_fstat_default __NR_fstat64

#elif defined(__NR_newfstatat)

namespace sandbox {
using default_stat_struct = struct kernel_stat;
}  // namespace sandbox

#define __NR_fstatat_default __NR_newfstatat
#define __NR_fstat_default __NR_fstat

#else
#error "one of fstatat64 and newfstatat must be defined"
#endif

#endif  // SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_STAT_H_