+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.
{
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
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;
}