From fe0f080532b2357794d4e25d66a35f4aedc4f93a Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 3 Apr 2007 20:19:02 +0000 Subject: [PATCH] * lib/stat-time.h: (get_stat_birthtime): Check for zero-valued birthtime on all systems, not just those which use st_birthtimensec rather than st_birthtim. Putting zero in st_bithtim.tv_sec is how (for example) FreeBSD/x86 6.1 indicates that the birth time is not available for files on an NFS mount. --- ChangeLog | 9 +++++++++ lib/stat-time.h | 27 +++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 60c2d15237..64b566246d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-04-03 James Youngman + + * lib/stat-time.h: (get_stat_birthtime): Check for zero-valued + birthtime on all systems, not just those which use + st_birthtimensec rather than st_birthtim. Putting zero in + st_bithtim.tv_sec is how (for example) FreeBSD/x86 6.1 + indicates that the birth time is not available for files on + an NFS mount. + 2007-04-03 Simon Josefsson * modules/memxor: Move back from crypto/, suggested by Bruno. diff --git a/lib/stat-time.h b/lib/stat-time.h index ffad8a1fc1..649c848732 100644 --- a/lib/stat-time.h +++ b/lib/stat-time.h @@ -147,22 +147,12 @@ get_stat_birthtime (struct stat const *st) { struct timespec t; -#if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ - || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) t = STAT_TIMESPEC (st, st_birthtim); #elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC t.tv_sec = st->st_birthtime; t.tv_nsec = st->st_birthtimensec; - - /* NetBSD sometimes signals the absence of knowledge by using zero. - Attempt to work around this bug. This sometimes reports failure - even for valid time stamps. Also, sometimes NetBSD returns junk - in the birth time fields; work around this bug if it it is - detected. There's no need to detect negative tv_nsec junk as - negative tv_nsec already indicates an error. */ - if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec) - t.tv_nsec = -1; - #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Woe32 native platforms (but not Cygwin) put the "file creation time" in st_ctime (!). See @@ -175,6 +165,19 @@ get_stat_birthtime (struct stat const *st) t.tv_nsec = -1; #endif +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) + /* FreeBSD and NetBSD sometimes signal the absence of knowledge by + using zero. Attempt to work around this problem. Alas, this can + report failure even for valid time stamps. Also, NetBSD + sometimes returns junk in the birth time fields; work around this + bug if it it is detected. There's no need to detect negative + tv_nsec junk as negative tv_nsec already indicates an error. */ + if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec) + t.tv_nsec = -1; +#endif + return t; } -- 2.30.2