1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2#ifndef _ASMARM_STAT_H
3#define _ASMARM_STAT_H
4
5struct __old_kernel_stat {
6	unsigned short st_dev;
7	unsigned short st_ino;
8	unsigned short st_mode;
9	unsigned short st_nlink;
10	unsigned short st_uid;
11	unsigned short st_gid;
12	unsigned short st_rdev;
13	unsigned long  st_size;
14	unsigned long  st_atime;
15	unsigned long  st_mtime;
16	unsigned long  st_ctime;
17};
18
19#define STAT_HAVE_NSEC
20
21struct stat {
22#if defined(__ARMEB__)
23	unsigned short st_dev;
24	unsigned short __pad1;
25#else
26	unsigned long  st_dev;
27#endif
28	unsigned long  st_ino;
29	unsigned short st_mode;
30	unsigned short st_nlink;
31	unsigned short st_uid;
32	unsigned short st_gid;
33#if defined(__ARMEB__)
34	unsigned short st_rdev;
35	unsigned short __pad2;
36#else
37	unsigned long  st_rdev;
38#endif
39	unsigned long  st_size;
40	unsigned long  st_blksize;
41	unsigned long  st_blocks;
42	unsigned long  st_atime;
43	unsigned long  st_atime_nsec;
44	unsigned long  st_mtime;
45	unsigned long  st_mtime_nsec;
46	unsigned long  st_ctime;
47	unsigned long  st_ctime_nsec;
48	unsigned long  __unused4;
49	unsigned long  __unused5;
50};
51
52/* This matches struct stat64 in glibc2.1, hence the absolutely
53 * insane amounts of padding around dev_t's.
54 * Note: The kernel zero's the padded region because glibc might read them
55 * in the hope that the kernel has stretched to using larger sizes.
56 */
57struct stat64 {
58	unsigned long long	st_dev;
59	unsigned char   __pad0[4];
60
61#define STAT64_HAS_BROKEN_ST_INO	1
62	unsigned long	__st_ino;
63	unsigned int	st_mode;
64	unsigned int	st_nlink;
65
66	unsigned long	st_uid;
67	unsigned long	st_gid;
68
69	unsigned long long	st_rdev;
70	unsigned char   __pad3[4];
71
72	long long	st_size;
73	unsigned long	st_blksize;
74	unsigned long long st_blocks;	/* Number 512-byte blocks allocated. */
75
76	unsigned long	st_atime;
77	unsigned long	st_atime_nsec;
78
79	unsigned long	st_mtime;
80	unsigned long	st_mtime_nsec;
81
82	unsigned long	st_ctime;
83	unsigned long	st_ctime_nsec;
84
85	unsigned long long	st_ino;
86};
87
88#endif
89