Charles Davis : ntdll: Add support for BSD-style creation ("birth") time.

Alexandre Julliard julliard at winehq.org
Fri Nov 30 13:48:21 CST 2012


Module: wine
Branch: master
Commit: 5da1eaf2131f29264b734bdf4cde072115b0762f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5da1eaf2131f29264b734bdf4cde072115b0762f

Author: Charles Davis <cdavis5x at gmail.com>
Date:   Thu Nov 29 21:50:46 2012 -0700

ntdll: Add support for BSD-style creation ("birth") time.

---

 configure           |   45 +++++++++++++++++++++++++++++++++++++++++++++
 configure.ac        |   14 +++++++++++++-
 dlls/ntdll/file.c   |   14 ++++++++++++++
 include/config.h.in |   15 +++++++++++++++
 4 files changed, 87 insertions(+), 1 deletions(-)

diff --git a/configure b/configure
index 638ddfb..bf5c81c 100755
--- a/configure
+++ b/configure
@@ -14177,6 +14177,51 @@ _ACEOF
 
 
 fi
+ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtime" "ac_cv_member_struct_stat_st_birthtime" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_birthtime" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim" "ac_cv_member_struct_stat_st_birthtim" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_birthtim" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BIRTHTIM 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec" "ac_cv_member_struct_stat_st_birthtimespec" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_birthtimespec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct stat" "__st_birthtime" "ac_cv_member_struct_stat___st_birthtime" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat___st_birthtime" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT___ST_BIRTHTIME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct stat" "__st_birthtim" "ac_cv_member_struct_stat___st_birthtim" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat___st_birthtim" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT___ST_BIRTHTIM 1
+_ACEOF
+
+
+fi
 
 
 ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_scope_id" "ac_cv_member_struct_sockaddr_in6_sin6_scope_id" "#ifdef HAVE_SYS_TYPES_H
diff --git a/configure.ac b/configure.ac
index 5d2b4f4..2f1032b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2269,7 +2269,19 @@ AC_CHECK_MEMBERS([struct option.name],,,
 #endif])
 
 dnl Check for stat.st_blocks and ns-resolved times
-AC_CHECK_MEMBERS([struct stat.st_blocks,struct stat.st_mtim,struct stat.st_mtimespec,struct stat.st_ctim,struct stat.st_ctimespec,struct stat.st_atim,struct stat.st_atimespec])
+AC_CHECK_MEMBERS([
+	struct stat.st_blocks,
+	struct stat.st_mtim,
+	struct stat.st_mtimespec,
+	struct stat.st_ctim,
+	struct stat.st_ctimespec,
+	struct stat.st_atim,
+	struct stat.st_atimespec,
+	struct stat.st_birthtime,
+	struct stat.st_birthtim,
+	struct stat.st_birthtimespec,
+	struct stat.__st_birthtime,
+	struct stat.__st_birthtim])
 
 dnl Check for sin6_scope_id
 AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id],,,
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index ccf5933..93695f0 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -1648,7 +1648,21 @@ static inline void get_file_times( const struct stat *st, LARGE_INTEGER *mtime,
 #elif defined(HAVE_STRUCT_STAT_ST_ATIMESPEC)
     atime->QuadPart += st->st_atimespec.tv_nsec / 100;
 #endif
+#ifdef HAVE_STRUCT_STAT_ST_BIRTHTIME
+    RtlSecondsSince1970ToTime( st->st_birthtime, creation );
+#ifdef HAVE_STRUCT_STAT_ST_BIRTHTIM
+    creation->QuadPart += st->st_birthtim.tv_nsec / 100;
+#elif defined(HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC)
+    creation->QuadPart += st->st_birthtimespec.tv_nsec / 100;
+#endif
+#elif defined(HAVE_STRUCT_STAT___ST_BIRTHTIME)
+    RtlSecondsSince1970ToTime( st->__st_birthtime, creation );
+#ifdef HAVE_STRUCT_STAT___ST_BIRTHTIM
+    creation->QuadPart += st->__st_birthtim.tv_nsec / 100;
+#endif
+#else
     *creation = *mtime;
+#endif
 }
 
 /* fill in the file information that depends on the stat info */
diff --git a/include/config.h.in b/include/config.h.in
index f22c5eb..0081c25 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -860,6 +860,15 @@
 /* Define to 1 if `st_atimespec' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_ATIMESPEC
 
+/* Define to 1 if `st_birthtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIM
+
+/* Define to 1 if `st_birthtime' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIME
+
+/* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC
+
 /* Define to 1 if `st_blocks' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_BLOCKS
 
@@ -875,6 +884,12 @@
 /* Define to 1 if `st_mtimespec' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_MTIMESPEC
 
+/* Define to 1 if `__st_birthtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT___ST_BIRTHTIM
+
+/* Define to 1 if `__st_birthtime' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT___ST_BIRTHTIME
+
 /* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */
 #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT
 




More information about the wine-cvs mailing list