mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	This is clever, but it confuses downstream detection in at least zstd and GNOME's glib. zstd has preprocessor tests for the 'st_mtime' macro, which is not provided by the path using the anonymous union; glib checks for the presence of 'st_mtimensec' in struct stat but then tries to access that field in struct statx (which might be a bug on its own). Checked with a build for alpha-linux-gnu.
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Definition of `struct stat' used in the kernel.  */
 | 
						|
struct kernel_stat
 | 
						|
  {
 | 
						|
    unsigned int st_dev;
 | 
						|
    unsigned int st_ino;
 | 
						|
    unsigned int st_mode;
 | 
						|
    unsigned int st_nlink;
 | 
						|
    unsigned int st_uid;
 | 
						|
    unsigned int st_gid;
 | 
						|
    unsigned int st_rdev;
 | 
						|
    long int st_size;
 | 
						|
    unsigned long int st_atime_sec;
 | 
						|
    unsigned long int st_mtime_sec;
 | 
						|
    unsigned long int st_ctime_sec;
 | 
						|
    unsigned int st_blksize;
 | 
						|
    int st_blocks;
 | 
						|
    unsigned int st_flags;
 | 
						|
    unsigned int st_gen;
 | 
						|
  };
 | 
						|
 | 
						|
/* Definition of `struct stat64' used in the kernel.  */
 | 
						|
struct kernel_stat64
 | 
						|
  {
 | 
						|
    unsigned long   st_dev;
 | 
						|
    unsigned long   st_ino;
 | 
						|
    unsigned long   st_rdev;
 | 
						|
    long            st_size;
 | 
						|
    unsigned long   st_blocks;
 | 
						|
 | 
						|
    unsigned int    st_mode;
 | 
						|
    unsigned int    st_uid;
 | 
						|
    unsigned int    st_gid;
 | 
						|
    unsigned int    st_blksize;
 | 
						|
    unsigned int    st_nlink;
 | 
						|
    unsigned int    __pad0;
 | 
						|
 | 
						|
    unsigned long   st_atime_sec;
 | 
						|
    unsigned long   st_atimensec;
 | 
						|
    unsigned long   st_mtime_sec;
 | 
						|
    unsigned long   st_mtimensec;
 | 
						|
    unsigned long   st_ctime_sec;
 | 
						|
    unsigned long   st_ctimensec;
 | 
						|
    long            __glibc_reserved[3];
 | 
						|
  };
 | 
						|
 | 
						|
/* Definition of `struct stat' used by glibc 2.0.  */
 | 
						|
struct glibc2_stat
 | 
						|
  {
 | 
						|
    __dev_t st_dev;
 | 
						|
    __ino_t st_ino;
 | 
						|
    __mode_t st_mode;
 | 
						|
    __nlink_t st_nlink;
 | 
						|
    __uid_t st_uid;
 | 
						|
    __gid_t st_gid;
 | 
						|
    __dev_t st_rdev;
 | 
						|
    __off_t st_size;
 | 
						|
    __time_t st_atime_sec;
 | 
						|
    __time_t st_mtime_sec;
 | 
						|
    __time_t st_ctime_sec;
 | 
						|
    unsigned int st_blksize;
 | 
						|
    int st_blocks;
 | 
						|
    unsigned int st_flags;
 | 
						|
    unsigned int st_gen;
 | 
						|
  };
 | 
						|
 | 
						|
/* Definition of `struct stat' used by glibc 2.1.  */
 | 
						|
struct glibc21_stat
 | 
						|
  {
 | 
						|
    __dev_t st_dev;
 | 
						|
    __ino64_t st_ino;
 | 
						|
    __mode_t st_mode;
 | 
						|
    __nlink_t st_nlink;
 | 
						|
    __uid_t st_uid;
 | 
						|
    __gid_t st_gid;
 | 
						|
    __dev_t st_rdev;
 | 
						|
    __off_t st_size;
 | 
						|
    __time_t st_atime_sec;
 | 
						|
    __time_t st_mtime_sec;
 | 
						|
    __time_t st_ctime_sec;
 | 
						|
    __blkcnt64_t st_blocks;
 | 
						|
    __blksize_t st_blksize;
 | 
						|
    unsigned int st_flags;
 | 
						|
    unsigned int st_gen;
 | 
						|
    int __pad3;
 | 
						|
    long __glibc_reserved[4];
 | 
						|
  };
 | 
						|
 | 
						|
#define STAT_IS_KERNEL_STAT 0
 | 
						|
#define STAT64_IS_KERNEL_STAT64 1
 | 
						|
#define XSTAT_IS_XSTAT64 1
 | 
						|
#define STATFS_IS_STATFS64 0
 |