Patch for sub-second resolution in stat(2)
Wed Jun 5 17:57:00 GMT 2002
[Second attempt once I'd calmed down enough to get it right.]
Attached is a patch that adds sub-second resolution to the access,
modification, and creation times returned by stat(2) etc. I thought this
would make a nice companion to Corinna's work on making other things in
stat(2) be 64-bit.
Also, I was having trouble with a makefile where the commands could execute
in less than a second leading to irregular breakage: this patch fixes that.
This patch seems like a good idea to me but there is one detail that could
cause an issue. The function that maps FILETIMEs to time_t (to_time_t in
times.cc) currently rounds up the seconds. Thus this patch may show some
times as a second behind those shown currently.
The change to round-up times was made due to a problem on FAT partitions. I
don't understand exactly what the issue was (or still is) and I've been
unable to provoke any strange behaviour on a floppy disk (my only accessible
FAT partition . . .) The changelog entry is:
> Wed May 13 17:47:23 1998 Geoffrey Noer <firstname.lastname@example.org>
> patch from email@example.com (Sergey Okhapkin):
> * times.cc (to_time_t): prevent stat from returning incorrect
> file modification time (one second less) on fat partitions due
> to round-up error.
Apart from that issue, I've checked that this patch maintains both source
and binary compatibility (tho' it does add macros for st_mtime etc. to hide
the indirection involved). It also doesn't seem to disturb anything; for
example, cvs works fine with repositories created with second timing and
updated with sub-second timing.
I'm unclear whether this is the best naming / type scheme (timestruc_t
st_mtim etc. w/ ) but it is a common one and it's recognised by both the
make and fileutils packages available from the cygwin setup (i.e. make this
patch and re-compile those packages and they detect the new fields).
(As per Chris's response to my first partial message, I've sent a patch to
sys/types.h to the newlib mailing list.)
Oh! and I hope the Changelog's a little better this time. Good enough?
* fhandler.cc (fhandler_base::fstat): Initialise tv_nsec member of st_atim,
st_mtim, st_ctim fields.
* fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): ditto.
* fhandler_process.cc (fhandler_process::fstat): ditto.
* glob.c (stat32_to_STAT): Copy across the whole st_atim. st_mtime, st_ctim
* syscalls.cc (stat64_to_stat32): ditto.
* times.cc (to_timestruc_t time_as_timestruc_t): New functions.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 7782 bytes
Desc: not available
More information about the Cygwin-patches