Hurd: struct timespec members in struct stat
authorThomas Schwinge <thomas@schwinge.name>
Thu, 10 May 2012 22:40:09 +0000 (15:40 -0700)
committerRoland McGrath <roland@hack.frob.com>
Thu, 10 May 2012 22:57:28 +0000 (15:57 -0700)
ChangeLog
sysdeps/mach/hurd/bits/stat.h
sysdeps/mach/hurd/xstatconv.c

index 768fecd..31c3362 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2012-05-10  Thomas Schwinge  <thomas@schwinge.name>
 
+       * sysdeps/mach/hurd/bits/stat.h (struct stat): Align to what is done
+       for Linux: use nsec instead of usec, as well as:
+       [__USE_MISC || __USE_XOPEN2K8] (st_atim, st_mtim, st_ctim): New
+       members of type struct timespec.
+       [__USE_MISC || __USE_XOPEN2K8] (st_atime, st_mtime, st_ctime):
+       New macros.
+       (struct stat64): Likewise.
+       (_STATBUF_ST_NSEC): New macro.
+       * sysdeps/mach/hurd/xstatconv.c (xstat64_conv): Adapt to that.
+
        * hurd/lookup-retry.c (__hurd_file_name_lookup_retry): Use
        __strtoul_internal rather than strtoul.
 
index 15fcda1..e6ffda8 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 1992-1994,1996,1997,1999,2000,2005,2010
-   Free Software Foundation, Inc.
+/* Copyright (C) 1992-2012 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
@@ -58,12 +57,27 @@ struct stat
     __off64_t st_size;         /* Size in bytes.  */
 #endif
 
-    __time_t st_atime;         /* Access time, seconds */
-    unsigned long int st_atime_usec; /* and microseconds.  */
-    __time_t st_mtime;         /* Modification time, seconds */
-    unsigned long int st_mtime_usec; /* and microseconds.  */
-    __time_t st_ctime;         /* Status change time, seconds */
-    unsigned long int st_ctime_usec; /* and microseconds.  */
+#if defined __USE_MISC || defined __USE_XOPEN2K8
+    /* 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 size for I/O.  */
 
@@ -107,12 +121,24 @@ struct stat64
 
     __off64_t st_size;         /* Size in bytes.  */
 
-    __time_t st_atime;         /* Access time, seconds */
-    unsigned long int st_atime_usec; /* and microseconds.  */
-    __time_t st_mtime;         /* Modification time, seconds */
-    unsigned long int st_mtime_usec; /* and microseconds.  */
-    __time_t st_ctime;         /* Status change time, seconds */
-    unsigned long int st_ctime_usec; /* and microseconds.  */
+#if defined __USE_MISC || defined __USE_XOPEN2K8
+    /* 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.  */
+#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 size for I/O.  */
 
@@ -130,7 +156,10 @@ struct stat64
   };
 #endif
 
-#define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
+/* Tell code we have these members.  */
+#define        _STATBUF_ST_BLKSIZE
+/* Nanosecond resolution time values are supported.  */
+#define _STATBUF_ST_NSEC
 
 /* Encoding of the file mode.  */
 
index db704c6..ebe6471 100644 (file)
@@ -1,5 +1,5 @@
 /* Convert between `struct stat' format, and `struct stat64' format.
-   Copyright (C) 2000,01,02 Free Software Foundation, Inc.
+   Copyright (C) 2000-2012 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
@@ -41,12 +41,9 @@ xstat64_conv (struct stat *buf, const struct stat64 *buf64)
   buf->st_uid = buf64->st_uid;
   buf->st_gid = buf64->st_gid;
   buf->st_size = buf64->st_size;
-  buf->st_atime = buf64->st_atime;
-  buf->st_atime_usec = buf64->st_atime_usec;
-  buf->st_mtime = buf64->st_mtime;
-  buf->st_mtime_usec = buf64->st_mtime_usec;
-  buf->st_ctime = buf64->st_ctime;
-  buf->st_ctime_usec = buf64->st_ctime_usec;
+  buf->st_atim = buf64->st_atim;
+  buf->st_mtim = buf64->st_mtim;
+  buf->st_ctim = buf64->st_ctim;
   buf->st_blksize = buf64->st_blksize;
   buf->st_blocks = buf64->st_blocks;
   buf->st_author = buf64->st_author;