Mercurial > hg > octave-kai > gnulib-hg
diff lib/stat-time.h @ 8621:71d64e4302fa
* 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.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Tue, 03 Apr 2007 20:19:02 +0000 |
parents | 392970b32717 |
children | bbbbbf4cd1c5 |
line wrap: on
line diff
--- a/lib/stat-time.h +++ b/lib/stat-time.h @@ -147,22 +147,12 @@ { 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 @@ 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; }