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