Patch for sub-second resolution in stat(2)

Conrad Scott
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 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  <>
> patch from (Sergey Okhapkin):
> * (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?

// Conrad

Changelog message:
* (fhandler_base::fstat): Initialise tv_nsec member of st_atim,
st_mtim, st_ctim fields.
* (fhandler_disk_file::fstat_helper): ditto.
* (fhandler_process::fstat): ditto.
* glob.c (stat32_to_STAT): Copy across the whole st_atim. st_mtime, st_ctim
* (stat64_to_stat32): ditto.
* (to_timestruc_t time_as_timestruc_t): New functions.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: winsup.patch
Type: application/octet-stream
Size: 7782 bytes
Desc: not available
URL: <>

More information about the Cygwin-patches mailing list