Island Life

< 教育について | Meisner intensive 3回目の4 >

2011/11/28

Win32のstatの妙な振る舞い

GaucheのMinGW版のtest failureを潰してて気づいたのだけれど、 ローカルな時刻が1970/1/1 00:00以前になるタイムスタンプを持つ ファイルに対して _stat() を呼ぶと、struct statの対応する タイムスタンプ位置にUINT_MAXが入ってくるようだ (Vista SP2で確認)。 うちの場合GMT-10なので、UTCで36000以下の値を_utimeでセットすると、 _statで読み出した時に値がUINT_MAXになる。 dirで見るとちゃんと設定されてるので、 statの実装のどっかでUTCではなくローカルタイムを見てエラーとして弾いちゃってるとかかな。

まあ現実的に問題になることはないと思うが、 ちゃんとマニュアルに書いといてくれないと時間を無駄にするではないか。 POSIX互換インタフェースなんて重視してないのかもしれないが。

… と書いたが、よく見たらGaucheは_stat()ではなくstat()を呼んでるんで、 これはMinGWのせいかな? ソース見てみる。

いや、直接_stat()を呼んでも同じだった。やっぱりWin32の方だ。

Tag: Programming

Past comment(s)

mattn (2011/11/28 12:45:00):

なんかそれっぽい事が書いてありますね

http://msdn.microsoft.com/ja-jp/library/14h5k7ff(v=vs.80).aspx

mattn (2011/11/28 12:45:58):

あーちがう。UTCか。失礼しました。

Post a comment

Name: