* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 3 Apr 2007 20:19:02 +0000 (20:19 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 3 Apr 2007 20:19:02 +0000 (20:19 +0000)
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
lib/stat-time.h

index 60c2d1523773f1cee5b12c2c65a6206907f785f1..64b566246db264d7cb7c24439d3e78589de4b021 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2007-04-03  James Youngman  <jay@gnu.org>
+
+       * 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  <simon@josefsson.org>
 
        * modules/memxor: Move back from crypto/, suggested by Bruno.
index ffad8a1fc17f876d67330b9925a90f817b611730..649c848732bd8b184f39b08989ed7b11c7ca420c 100644 (file)
@@ -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;
 }