mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +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
 |