* sysdeps/unix/sysv/linux/powerpc/powerpc32/kernel_stat.h: Sync
authorAndreas Jaeger <aj@suse.de>
Tue, 31 Dec 2002 13:24:35 +0000 (13:24 +0000)
committerAndreas Jaeger <aj@suse.de>
Tue, 31 Dec 2002 13:24:35 +0000 (13:24 +0000)
with Linux kernel.
* sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/kernel_stat.h: Likewise.
* sysdeps/unix/sysv/linux/kernel_stat.h
(_HAVE_STAT_NSEC,_HAVE_STAT_NSEC64): New.

* sysdeps/unix/sysv/linux/xstatconv.c (xstat_conv): Readd
__unused[1-3] since they're needed by some platforms.  Handle
_HAVE_STAT_NSEC and _HAVE_STAT_NSEC64.

* sysdeps/unix/sysv/linux/x86_64/bits/stat.h: Add nsec resolution
for structs stat and stat64.
* sysdeps/unix/sysv/linux/ia64/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/s390/bits/stat.h: Likewise.

sysdeps/unix/sysv/linux/hppa/kernel_stat.h
sysdeps/unix/sysv/linux/ia64/bits/stat.h
sysdeps/unix/sysv/linux/powerpc/bits/stat.h
sysdeps/unix/sysv/linux/powerpc/powerpc32/kernel_stat.h
sysdeps/unix/sysv/linux/s390/bits/stat.h
sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h
sysdeps/unix/sysv/linux/sparc/bits/stat.h
sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h
sysdeps/unix/sysv/linux/x86_64/bits/stat.h

index a1fa377..a85c5be 100644 (file)
@@ -1,32 +1,31 @@
 /* definition of "struct stat" from the kernel */
 struct kernel_stat {
        unsigned long   st_dev;         /* dev_t is 32 bits on parisc */
-       unsigned long   st_ino;         /* 32 bits */
-       unsigned short  st_mode;        /* 16 bits */
+       unsigned long   st_ino;         /* 32 bits */
+       unsigned short  st_mode;        /* 16 bits */
        unsigned short  st_nlink;       /* 16 bits */
        unsigned short  st_reserved1;   /* old st_uid */
        unsigned short  st_reserved2;   /* old st_gid */
-       unsigned long   st_rdev;
+       unsigned long   st_rdev;
        unsigned long   st_size;
-       unsigned long   st_atime;
-       unsigned long   st_spare1;
-        unsigned long   st_mtime;
-       unsigned long   st_spare2;
-       unsigned long   st_ctime;
-       unsigned long   st_spare3;
+       struct timespec st_atim;
+       struct timespec st_mtim;
+       struct timespec st_ctim;
        long            st_blksize;
        long            st_blocks;
        unsigned long   __unused1;      /* ACL stuff */
        unsigned long   __unused2;      /* network */
-       unsigned long   __unused3;      /* network */
+       unsigned long   __unused3;      /* network */
        unsigned long   __unused4;      /* cnodes */
        unsigned short  __unused5;      /* netsite */
        short           st_fstype;
-       unsigned long   st_realdev;
+       unsigned long   st_realdev;
        unsigned short  st_basemode;
        unsigned short  st_spareshort;
-       unsigned long   st_uid;
+       unsigned long   st_uid;
        unsigned long   st_gid;
        unsigned long   st_spare4[3];
 };
 
+#define _HAVE_STAT_NSEC
+#define _HAVE_STAT64_NSEC
index 01b03d1..008235b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -39,12 +39,27 @@ struct stat
     int pad0;
     __dev_t st_rdev;           /* Device number, if device.  */
     __off_t st_size;           /* Size of file, in bytes.  */
-    __time_t st_atime;         /* Time of last access.  */
-    long int __reserved0;      /* Reserved for atime.nanoseconds.  */
-    __time_t st_mtime;         /* Time of last modification.  */
-    long int __reserved1;      /* Reserved for mtime.nanoseconds.  */
-    __time_t st_ctime;         /* Time of last status change.  */
-    long int __reserved2;      /* Reserved for ctime.nanoseconds.  */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     __blksize_t st_blksize;    /* Optimal block size for I/O.  */
     __blkcnt_t st_blocks;      /* Nr. 512-byte blocks allocated.  */
     long int __unused[3];
@@ -63,12 +78,27 @@ struct stat64
     int pad0;
     __dev_t st_rdev;           /* Device number, if device.  */
     __off_t st_size;           /* Size of file, in bytes.  */
-    __time_t st_atime;         /* Time of last access.  */
-    long int __reserved0;      /* Reserved for atime.nanoseconds.  */
-    __time_t st_mtime;         /* Time of last modification.  */
-    long int __reserved1;      /* Reserved for mtime.nanoseconds.  */
-    __time_t st_ctime;         /* Time of last status change.  */
-    long int __reserved2;      /* Reserved for ctime.nanoseconds.  */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     __blksize_t st_blksize;    /* Optimal block size for I/O.  */
     __blkcnt64_t st_blocks;    /* Nr. 512-byte blocks allocated.  */
     long int __unused[3];
index c85695e..3cff5c8 100644 (file)
@@ -69,12 +69,27 @@ struct stat
 # else
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
 # endif
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
     __time_t st_atime;                 /* Time of last access.  */
-    unsigned long int __unused1;       /* Reserved for atime.nanoseconds.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
     __time_t st_mtime;                 /* Time of last modification.  */
-    unsigned long int __unused2;       /* Reserved for mtime.nanoseconds.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
     __time_t st_ctime;                 /* Time of last status change.  */
-    unsigned long int __unused3;       /* Reserved for ctime.nanoseconds.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     unsigned long int __unused4;
     unsigned long int __unused5;
   };
@@ -94,12 +109,27 @@ struct stat64
     __off64_t st_size;                 /* Size of file, in bytes.  */
     __blksize_t st_blksize;            /* Optimal block size for I/O.  */
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
     __time_t st_atime;                 /* Time of last access.  */
-    unsigned long int __unused1;       /* Reserved for atime.nanoseconds.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
     __time_t st_mtime;                 /* Time of last modification.  */
-    unsigned long int __unused2;       /* Reserved for mtime.nanoseconds.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
     __time_t st_ctime;                 /* Time of last status change.  */
-    unsigned long int __unused3;       /* Reserved for ctime.nanoseconds.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     unsigned long int __unused4;
     unsigned long int __unused5;
   };
@@ -133,12 +163,27 @@ struct stat
 # else
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
 # endif
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
     __time_t st_atime;                 /* Time of last access.  */
-    unsigned long int __unused1;       /* Reserved for atime.nanoseconds.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
     __time_t st_mtime;                 /* Time of last modification.  */
-    unsigned long int __unused2;       /* Reserved for mtime.nanoseconds.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
     __time_t st_ctime;                 /* Time of last status change.  */
-    unsigned long int __unused3;       /* Reserved for ctime.nanoseconds.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     unsigned long int __unused4;
     unsigned long int __unused5;
     unsigned long int __unused6;
@@ -158,12 +203,27 @@ struct stat64
     __off64_t st_size;                 /* Size of file, in bytes.  */
     __blksize_t st_blksize;            /* Optimal block size for I/O.  */
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
     __time_t st_atime;                 /* Time of last access.  */
-    unsigned long int __unused1;       /* Reserved for atime.nanoseconds.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
     __time_t st_mtime;                 /* Time of last modification.  */
-    unsigned long int __unused2;       /* Reserved for mtime.nanoseconds.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
     __time_t st_ctime;                 /* Time of last status change.  */
-    unsigned long int __unused3;       /* Reserved for ctime.nanoseconds.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     unsigned long int __unused4;
     unsigned long int __unused5;
     unsigned long int __unused6;
index a2db586..6aa217a 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition of `struct stat' used in the kernel.
-   Copyright (C) 1997, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -29,31 +29,19 @@ struct kernel_stat
     unsigned long int st_size;
     unsigned long int st_blksize;
     unsigned long int st_blocks;
-    unsigned long int st_atime;
-    unsigned long int __unused1;
-#define _HAVE___UNUSED1
-    unsigned long int st_mtime;
-    unsigned long int __unused2;
-#define _HAVE___UNUSED2
-    unsigned long int st_ctime;
-    unsigned long int __unused3;
-#define _HAVE___UNUSED3
+    struct timespec st_atim;
+    struct timespec st_mtim;
+    struct timespec st_ctim;
     unsigned long int __unused4;
 #define _HAVE___UNUSED4
     unsigned long int __unused5;
 #define _HAVE___UNUSED5
   };
 
-#define _HAVE_STAT___UNUSED1
-#define _HAVE_STAT___UNUSED2
-#define _HAVE_STAT___UNUSED3
 #define _HAVE_STAT___UNUSED4
 #define _HAVE_STAT___UNUSED5
 #define _HAVE_STAT___PAD1
 #define _HAVE_STAT___PAD2
-#define _HAVE_STAT64___UNUSED1
-#define _HAVE_STAT64___UNUSED2
-#define _HAVE_STAT64___UNUSED3
 #define _HAVE_STAT64___UNUSED4
 #define _HAVE_STAT64___UNUSED5
 #define _HAVE_STAT64___PAD2
index 419a415..7dd3bd8 100644 (file)
@@ -56,12 +56,27 @@ struct stat
     int pad0;
     __dev_t st_rdev;           /* Device number, if device.  */
     __off_t st_size;           /* Size of file, in bytes.  */
-    __time_t st_atime;         /* Time of last access.  */
-    long int __reserved0;      /* Reserved for atime.nanoseconds.  */
-    __time_t st_mtime;         /* Time of last modification.  */
-    long int __reserved1;      /* Reserved for mtime.nanoseconds.  */
-    __time_t st_ctime;         /* Time of last status change.  */
-    long int __reserved2;      /* Reserved for ctime.nanoseconds.  */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     __blksize_t st_blksize;    /* Optimal block size for I/O.  */
     __blkcnt_t st_blocks;      /* Nr. 512-byte blocks allocated.  */
     long int __unused[3];
@@ -94,12 +109,27 @@ struct stat
 # else
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
 # endif
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
     __time_t st_atime;                 /* Time of last access.  */
-    unsigned long int __unused1;
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
     __time_t st_mtime;                 /* Time of last modification.  */
-    unsigned long int __unused2;
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
     __time_t st_ctime;                 /* Time of last status change.  */
-    unsigned long int __unused3;
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
 # ifndef __USE_FILE_OFFSET64
     unsigned long int __unused4;
     unsigned long int __unused5;
@@ -123,12 +153,27 @@ struct stat64
     int pad0;
     __dev_t st_rdev;           /* Device number, if device.  */
     __off_t st_size;           /* Size of file, in bytes.  */
-    __time_t st_atime;         /* Time of last access.  */
-    long int __reserved0;      /* Reserved for atime.nanoseconds.  */
-    __time_t st_mtime;         /* Time of last modification.  */
-    long int __reserved1;      /* Reserved for mtime.nanoseconds.  */
-    __time_t st_ctime;         /* Time of last status change.  */
-    long int __reserved2;      /* Reserved for ctime.nanoseconds.  */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     __blksize_t st_blksize;    /* Optimal block size for I/O.  */
     __blkcnt64_t st_blocks;    /* Nr. 512-byte blocks allocated.  */
     long int __unused[3];
@@ -150,12 +195,27 @@ struct stat64
     __blksize_t st_blksize;            /* Optimal block size for I/O.  */
 
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
     __time_t st_atime;                 /* Time of last access.  */
-    unsigned long int __unused1;
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
     __time_t st_mtime;                 /* Time of last modification.  */
-    unsigned long int __unused2;
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
     __time_t st_ctime;                 /* Time of last status change.  */
-    unsigned long int __unused3;
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
     __ino64_t st_ino;                  /* File serial number.          */
   };
 # endif
index 66ae0f3..9b268df 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition of `struct stat' used in the kernel.  64 bit S/390 version.
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
@@ -26,21 +26,18 @@ struct kernel_stat
     unsigned int st_nlink;
     unsigned int st_uid;
     unsigned int st_gid;
-    unsigned int st_rdev;
     unsigned int __pad1;
+    unsigned int st_rdev;
     unsigned long int st_size;
-    unsigned long int st_atime;
-    unsigned long int st_mtime;
-    unsigned long int st_ctime;
+    struct timespec st_atim;
+    struct timespec st_mtim;
+    struct timespec st_ctim;
     unsigned int  st_blksize;
     int st_blocks;
-    unsigned long __unused1;
-    unsigned long __unused2;
+    unsigned long __unused[3];
   };
 
 extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf);
 
 #define XSTAT_IS_XSTAT64 1
-#define _HAVE___UNUSED1
-#define _HAVE___UNUSED2
-
+#define _HAVE_STAT_NSEC
index aefcf9e..78fd09d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992,95,96,97,98,99,2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1992,95,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -60,12 +60,36 @@ struct stat
 #else
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
 #endif
+#if __WORDSIZE == 64
     __time_t st_atime;                 /* Time of last access.  */
     unsigned long int __unused1;
     __time_t st_mtime;                 /* Time of last modification.  */
     unsigned long int __unused2;
     __time_t st_ctime;                 /* Time of last status change.  */
     unsigned long int __unused3;
+#else
+# ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+#  define st_atime st_atim.tv_sec      /* Backward compatibility.  */
+#  define st_mtime st_mtim.tv_sec
+#  define st_ctime st_ctim.tv_sec
+# else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+# endif
+#endif
     unsigned long int __unused4;
     unsigned long int __unused5;
   };
@@ -88,12 +112,36 @@ struct stat64
     __blksize_t st_blksize;            /* Optimal block size for I/O.  */
 
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
+#if __WORDSIZE == 64
     __time_t st_atime;                 /* Time of last access.  */
     unsigned long int __unused1;
     __time_t st_mtime;                 /* Time of last modification.  */
     unsigned long int __unused2;
     __time_t st_ctime;                 /* Time of last status change.  */
     unsigned long int __unused3;
+#else
+# ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+#  define st_atime st_atim.tv_sec      /* Backward compatibility.  */
+#  define st_mtime st_mtim.tv_sec
+#  define st_ctime st_ctim.tv_sec
+# else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+# endif
+#endif
     unsigned long int __unused4;
     unsigned long int __unused5;
   };
index ec28046..a0da019 100644 (file)
@@ -9,34 +9,24 @@ struct kernel_stat
     unsigned short int st_gid;
     unsigned short int st_rdev;
     long int st_size;
-    long int st_atime;
-    unsigned long int __unused1;
-    long int st_mtime;
-    unsigned long int __unused2;
-    long int st_ctime;
-    unsigned long int __unused3;
+    struct timespec st_atim;
+    struct timespec st_mtim;
+    struct timespec st_ctim;
     long int st_blksize;
     long int st_blocks;
     unsigned long int __unused4;
     unsigned long int __unused5;
   };
 
-#define _HAVE___UNUSED1
-#define _HAVE___UNUSED2
-#define _HAVE___UNUSED3
 #define _HAVE___UNUSED4
 #define _HAVE___UNUSED5
 
-#define _HAVE_STAT___UNUSED1
-#define _HAVE_STAT___UNUSED2
-#define _HAVE_STAT___UNUSED3
 #define _HAVE_STAT___UNUSED4
 #define _HAVE_STAT___UNUSED5
 #define _HAVE_STAT___PAD1
 #define _HAVE_STAT___PAD2
-#define _HAVE_STAT64___UNUSED1
-#define _HAVE_STAT64___UNUSED2
-#define _HAVE_STAT64___UNUSED3
 #define _HAVE_STAT64___UNUSED4
 #define _HAVE_STAT64___UNUSED5
 #define _HAVE_STAT64___PAD2
+#define _HAVE_STAT_NSEC
+#define _HAVE_STAT64_NSEC
index 8c74b3f..52b16c4 100644 (file)
@@ -76,12 +76,27 @@ struct stat
 #else
     __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
 #endif
-    __time_t st_atime;         /* Time of last access.  */
-    long int __reserved0;      /* Reserved for atime.nanoseconds.  */
-    __time_t st_mtime;         /* Time of last modification.  */
-    long int __reserved1;      /* Reserved for mtime.nanoseconds.  */
-    __time_t st_ctime;         /* Time of last status change.  */
-    long int __reserved2;      /* Reserved for ctime.nanoseconds.  */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
 #if __WORDSIZE == 64
     long int __unused[3];
 #else
@@ -122,12 +137,27 @@ struct stat64
 #endif
     __blksize_t st_blksize;    /* Optimal block size for I/O.  */
     __blkcnt64_t st_blocks;    /* Nr. 512-byte blocks allocated.  */
-    __time_t st_atime;         /* Time of last access.  */
-    long int __reserved0;      /* Reserved for atime.nanoseconds.  */
-    __time_t st_mtime;         /* Time of last modification.  */
-    long int __reserved1;      /* Reserved for mtime.nanoseconds.  */
-    __time_t st_ctime;         /* Time of last status change.  */
-    long int __reserved2;      /* Reserved for ctime.nanoseconds.  */
+#ifdef __USE_MISC
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
 #if __WORDSIZE == 64
     long int __unused[3];
 #else