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

KAWASUMI Junji touchan @ papa-net.bpl.jp
2008年 8月 15日 (金) 23:37:10 JST


川澄です

しらいさん,さとうさん、本件に付きご意見の程ありがとうござい
ます。

> > もし知っている人がいたら教えて欲しいのですが、
> > time_t って絶対に符号付き整数 (singed) なんですかね?
> > unsigned な実装は見たことないような気がする…。
> 
>  一般には signed です。これは単に伝統的にそうなっているだけ
> なんですが、mktime(3) 等の invalid 値判断条件を「-1 なら」で
> はなくて「負数なら」とする実装を救済する意味もあります。
>  しかし、仕様上は -1 以外は valid 値なので、2038 年問題を少
> しでも先延ばしにすべく time_t を unsigned にしてある環境も幾
> らかは存在します。
必ずしも signed とは限らない。
でも -1 がinvalid値となりえる事もあるということですね。
しかし UFSv1では、現状 0値が返却されます(してますの方が適切か)
ので やはり 0値も invalid値として取り扱うのが安心かと思います。


> > >  nsec 値そのものは不要であるという点に関しては誰も異論ない
> > > と思いますよ。
> > 
> > Windows (SMB?) のファイルの時刻精度は 100ns みたいですから、
> > 不要ってことはないですね。
> 
>  んー、でも件の patch を当てた箇所の関数は time_t を返すの
> で、nsec 値を使おうとしたらもっと抜本的な改造が必要になりま
> すよ。

でもって、時刻を返却するソースを追っかけたら、CREATE TIMEを取り
扱っている箇所は、該当箇所しかなく且つ該当関数の直下の関数から
の呼び出ししかありませんでした。
   get_create_timespec()
     +→  get_create_time() パッチ該当関数

例外的に日付を取得する際に該当関数を呼び出している箇所が一箇所
ありましたが、あくまで日付を取得しているのみなので、nsecは無視
して良いんじゃないかと思います。

そこで、該当関数の上位関数 get_create_timespec()を見ると、
get_create_time()を呼び出した直後で、関数内部の timespec構造体
の tv_nsecに対して 0を代入しています。
と言うことは SAMBAでは、はなっから nsec値を相手にしていない様
です。

ですので nsecについては一切触れず、

+	ret = st->st_birthtime;
+	if ((ret != (time_t)0) && (ret != (time_t)(-1))) {
+		return ret;
+	}

というコードでは、いけませんか?

以上です

-- 
--  川澄 淳治
--  KAWASUMI Junji <touchan@papa-net.bpl.jp>
--  愛知県知多郡在住 (JR武豊線使用)
--   〜 みんなで幸せになろうよ。。。〜
--



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