2017-11-01 15:08:43 +01:00
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2008-10-22 22:26:29 -07:00
# ifndef _ASM_X86_STAT_H
# define _ASM_X86_STAT_H
2007-10-23 22:37:24 +02:00
2013-12-16 16:09:51 -08:00
# include <asm/posix_types.h>
2007-10-23 22:37:24 +02:00
# 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 ;
} ;
2012-05-06 18:02:40 -07:00
/* 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 )
2007-10-23 22:37:24 +02:00
# 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 ;
} ;
2012-05-06 18:02:40 -07:00
/* 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 )
2007-10-23 22:37:24 +02:00
# else /* __i386__ */
struct stat {
2013-12-16 16:09:51 -08:00
__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 ] ;
2007-10-23 22:37:24 +02:00
} ;
2012-05-06 18:02:40 -07:00
/* 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 )
2007-10-23 22:37:24 +02:00
# 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 ;
2007-10-11 11:20:03 +02:00
# else
2007-10-23 22:37:24 +02:00
unsigned int st_size ;
unsigned int st_atime ;
unsigned int st_mtime ;
unsigned int st_ctime ;
# endif
} ;
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_STAT_H */