MS-DOS 形式のフロッピーも読み書きできるように、 mtools 3.9.1 をインストールして用 いているのですが、一つ困ったことがありました。mcopy -m を使っ て、更新時間を保存したままコピーしようとすると、unix →フロッピーの場 合は問題ないのですが、フロッピー → unix とコピーする際には、時間が9 時間ずれてしまうのです。明らかに、GMT と 日本標準時の変換がうまくいっ ていません。そこで、ソースを修正して対処しました。
---------->mtools391.patch.gz私が使っているのは FreeBSD 2.2.8 RELEASE で、unix での時間の取り扱いは OS によってまちまちですか ら、他の機種を使っている方はここで紹介している方法が約に立たなかったり、 そもそも時間がずれる問題が発生していないかも知れませんが、参考になれば と思い一応公開します。
適当に grep などを用いて unix 側のファイルの時刻の設定を 行っている部分を捜してみると、file.c でその操作を行っているようです。 そこでは、unix の時間関係のいろいろな機能のあるなしで動作を切り替えて いるようです。さて、もう少し詳しく見てみると、関数 gettimeofday がある 際の動作はほとんど空に見えます。しかし man gettimeofday を 見ると
Note: timezone is no longer used; this information is kept outside the kernel.と注記がしてあるし、どうも gettimeofday を使うのは(少なくとも現行の FreeBSD では)よくないようで す。そこで、gettimeofday を使わないように変更し、さらに GMT からのずれ の計算式を修正してみたところ、期待する動作をするようになってくれたよう に見えます。
これは、FreeBSD 2.2.8 RELEASE の ports に対するパッチです。 make patch まで終わったところで、さらにこのパッチを当ててく ださい。(パッチの当て方の詳しい手順については、 かんなページの説明や man patch の説明を読んでみてくださ い)その後、make、make install でいいはずです。
このパッチには予期せぬ副作用があるかも知れませんので、お使いになる 際はそのおつもりで。