- /* NetBSD sometimes signals the absence of knowledge of the file's
- * birth time by using zero. We indicate we don't know, by
- * returning 0 from this function when that happens. This is
- * slightly problematic since (time_t)0 is otherwise a valid, albeit
- * unlikely, timestamp.
- *
- * NetBSD sometimes returns 0 for unknown values (for example on
- * ffs) and sometimes begative values for tv_nsec (for example on
- * NFS). For some filesystems (e.g. msdos) NetBSD also appears to
- * fail to update the st_birthtime member at all, and just leaves in
- * there whatever junk existed int he uninitialised stat structure
- * the caller provided. Therefore, callers are advised to initialise
- * the tv_nsec number to a negative value before they call stat in
- * order to detect this problem.
- */
- if (pts->tv_sec == (time_t)0)
- {
- return 0; /* result probably invalid, see above. */
- }
- else
- {
- /* Sometimes NetBSD returns junk in the birth time fields, so
- * do a simple range check on the data, and return 0 to indicate
- * that the data is invalid if it just looks wrong.
- */
- return (pts->tv_nsec >= 0) && (pts->tv_nsec <= 1000000000);
- }
-#elif (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
- /* Woe32 native platforms (mingw, msvc, but not Cygwin) put the
- * "file creation time" in st_ctime (!). See for example the
- * article
- * <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>
- */
- pts->tv_sec = st->st_ctime;
- pts->tv_nsec = 0;
- return 1; /* result is valid */
+#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;
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+ /* Woe32 native platforms (but not Cygwin) put the "file creation
+ time" in st_ctime (!). See
+ <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>. */
+ t.tv_sec = st->st_ctime;
+ t.tv_nsec = 0;