[samba-jp:20326] Re: ファイル生成時刻の扱いについて

SATOH Fumiyasu fumiyas @ osstech.jp
2008年 8月 12日 (火) 03:03:38 JST


さとうふみやす @ OSS テクノロジです。
パッチが間違っていたので貼り直し +α…。:-(

diff --git a/source/configure.in b/source/configure.in
index 7f8a97f..ea01ae4 100644
--- a/source/configure.in
+++ b/source/configure.in
@@ -5913,6 +5913,9 @@ AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
        [#include <usersec.h>])
 
+AC_CHECK_MEMBERS([struct stat.st_birthtime],,,[#include <sys/stat.h>])
+AC_CHECK_MEMBERS([struct stat.st_birthtimensec],,,[#include <sys/stat.h>])
+
 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
 AC_TRY_COMPILE([#include <sys/types.h>
 #include <sys/socket.h>],
diff --git a/source/lib/time.c b/source/lib/time.c
index 8e28fcc..6334876 100644
--- a/source/lib/time.c
+++ b/source/lib/time.c
@@ -834,7 +834,14 @@ time_t get_create_time(const SMB_STRUCT_STAT *st,BOOL fake_dirs)
 	if(S_ISDIR(st->st_mode) && fake_dirs) {
 		return (time_t)315493200L;          /* 1/1/1980 */
 	}
-    
+
+#if defined(HAVE_STRUCT_STAT_TM_BIRTHTIME) && defined(HAVE_STRUCT_STAT_TM_BIRTHTIMENSEC)
+	if (st->st_birthtime != (time_t)-1 && st->st_birthtimensec != (long)-1 &&
+	    st->st_birthtime != (time_t)0 && st->st_birthtimensec != (long)0) {
+		return st->st_birthtime;
+	}
+#endif
+
 	ret = MIN(st->st_ctime, st->st_mtime);
 	ret1 = MIN(ret, st->st_atime);
 
At Tue, 12 Aug 2008 02:46:30 +0900,
SATOH Fumiyasu wrote:
> ちょっと調べた限りでは、ファイルシステムが birthtime に
> 未対応の場合に st_birthtime の値がどうなるかが BSD に依って
> 異なるようですね。:-(

> st_birthtimensec もあるかどうか調べて、両方 0 か両方 -1 なら
> 無視するのがいいのかなぁ。

-- 
-- Name: SATOH Fumiyasu (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- Personal Home: http://www.SFO.jp/blog/



samba-jp メーリングリストの案内