ソースを参照

bits/stat.h: Declare st_mtim if defined(__USE_XOPEN2K8), everywhere

While building software that sets _POSIX_C_SOURCE=200809L and uses
stat.st_mtim for ARM, it was noticed that st_mtim was not defined.

This seems to be because common/bits/stat.h was picked up, which does
not take __USE_XOPEN2K8 as a reason to enable st_mtim and related
fields. This appears to be an oversight, and porting the check from
common-generic/bits/stat.h to other architectures does indeed fix the
build issue.

This patch is based on commit 50bd6d06e ("Fix memory corruption due to
struct stat field").

Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
J. Neuschäfer 1 年間 前
コミット
d0c8c185b4

+ 1 - 1
libc/sysdeps/linux/alpha/bits/stat.h

@@ -40,7 +40,7 @@
 
 
    Use neat tidy anonymous unions and structures when possible.  */
    Use neat tidy anonymous unions and structures when possible.  */
 
 
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
 # if __GNUC_PREREQ(3,3)
 # if __GNUC_PREREQ(3,3)
 #  define __ST_TIME(X)				\
 #  define __ST_TIME(X)				\
 	__extension__ union {			\
 	__extension__ union {			\

+ 2 - 2
libc/sysdeps/linux/common/bits/stat.h

@@ -61,7 +61,7 @@ struct stat
 #else
 #else
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
 #endif
 #endif
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the
@@ -107,7 +107,7 @@ struct stat64
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
 
 
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the

+ 2 - 2
libc/sysdeps/linux/frv/bits/stat.h

@@ -70,7 +70,7 @@ struct stat
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
 #endif
 #endif
 
 
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the
@@ -117,7 +117,7 @@ struct stat64
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
 
 
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the

+ 2 - 2
libc/sysdeps/linux/ia64/bits/stat.h

@@ -38,7 +38,7 @@ struct stat
     int pad0;
     int pad0;
     __dev_t st_rdev;		/* Device number, if device.  */
     __dev_t st_rdev;		/* Device number, if device.  */
     __off_t st_size;		/* Size of file, in bytes.  */
     __off_t st_size;		/* Size of file, in bytes.  */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the
@@ -77,7 +77,7 @@ struct stat64
     int pad0;
     int pad0;
     __dev_t st_rdev;		/* Device number, if device.  */
     __dev_t st_rdev;		/* Device number, if device.  */
     __off_t st_size;		/* Size of file, in bytes.  */
     __off_t st_size;		/* Size of file, in bytes.  */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the

+ 2 - 2
libc/sysdeps/linux/m68k/bits/stat.h

@@ -60,7 +60,7 @@ struct stat
 #else
 #else
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
 #endif
 #endif
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the
@@ -106,7 +106,7 @@ struct stat64
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
 
 
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the

+ 2 - 2
libc/sysdeps/linux/mips/bits/stat.h

@@ -60,7 +60,7 @@ struct stat
     long int st_pad2[2];
     long int st_pad2[2];
     __off64_t st_size;		/* Size of file, in bytes.  */
     __off64_t st_size;		/* Size of file, in bytes.  */
 #endif
 #endif
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the
@@ -103,7 +103,7 @@ struct stat {
     unsigned int st_rdev;	/* Device number, if device.  */
     unsigned int st_rdev;	/* Device number, if device.  */
     int st_pad2[3];
     int st_pad2[3];
     __off_t st_size;		/* Size of file, in bytes.  */
     __off_t st_size;		/* Size of file, in bytes.  */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the

+ 2 - 2
libc/sysdeps/linux/nds32/bits/stat.h

@@ -64,7 +64,7 @@ struct stat
 #else
 #else
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
 #endif
 #endif
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the
@@ -110,7 +110,7 @@ struct stat64
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
 
 
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the

+ 2 - 2
libc/sysdeps/linux/powerpc/bits/stat.h

@@ -59,7 +59,7 @@ struct stat
 # else
 # else
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
 # endif
 # endif
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the
@@ -99,7 +99,7 @@ struct stat64
     __off64_t st_size;			/* Size of file, in bytes.  */
     __off64_t st_size;			/* Size of file, in bytes.  */
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
     __blksize_t st_blksize;		/* Optimal block size for I/O.  */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
     __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
     /* Nanosecond resolution timestamps are stored in a format
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
        whenever possible but the Unix namespace rules do not allow the