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