nanosecond support for stat
Corinna Vinschen
vinschen@redhat.com
Fri Jan 13 09:37:00 GMT 2012
On Jan 12 16:12, Mike Stump wrote:
> On Jan 12, 2012, at 3:07 PM, Eric Blake wrote:
> > Actually, it would be better to go with the definitions given by POSIX:
> >
> > struct timespec st_atim Last data access timestamp.
>
> That would make a nice follow-on patch.
>
> Linux does:
>
> #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
>
>
> :-) Which is why I didn't do anymore. We've merely implemented the
> second case of the #ifdef. I've left the first case for someone that
> wants to do the additional work.
The definition right now already contains the struct timespec stuff in
sys/stat.h if __rtems__ is defined. Also, struct timespec is always
available in sys/stat.h. Therefore, is there a good reason not to
extend that to all targets? Like this:
Index: libc/include/sys/stat.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/sys/stat.h,v
retrieving revision 1.23
diff -u -p -r1.23 stat.h
--- libc/include/sys/stat.h 6 Aug 2010 18:26:21 -0000 1.23
+++ libc/include/sys/stat.h 13 Jan 2012 09:35:52 -0000
@@ -32,38 +32,29 @@ struct stat
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
-#if defined(__rtems__)
- struct timespec st_atim;
- struct timespec st_mtim;
- struct timespec st_ctim;
- blksize_t st_blksize;
- blkcnt_t st_blocks;
-#else
/* SysV/sco doesn't have the rest... But Solaris, eabi does. */
#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
#else
- time_t st_atime;
- long st_spare1;
- time_t st_mtime;
- long st_spare2;
- time_t st_ctime;
- long st_spare3;
+ struct timespec st_atim;
+ struct timespec st_mtim;
+ struct timespec st_ctim;
+#define st_atime st_atim.tv_sec
+#define st_ctime st_ctim.tv_sec
+#define st_mtime st_mtim.tv_sec
+#if defined(__rtems__)
+ blksize_t st_blksize;
+ blkcnt_t st_blocks;
+#else
long st_blksize;
long st_blocks;
- long st_spare4[2];
+ long st_spare4[2];
#endif
#endif
};
-#if defined(__rtems__)
-#define st_atime st_atim.tv_sec
-#define st_ctime st_ctim.tv_sec
-#define st_mtime st_mtim.tv_sec
-#endif
-
#endif
#define _IFMT 0170000 /* type of file */
Corinna
--
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat
More information about the Newlib
mailing list