[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00238] Re: ChangeLog for FDclone 2.04c
- Subject: [FDclone-users:00238] Re: ChangeLog for FDclone 2.04c
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Tue, 30 Sep 2003 21:21:24 +0900
しらいです。
In Message-Id <20030929142423.B288953DCB@yuka.unixusers.net>
Takashi SHIRAI <shirai@unixusers.net>writes:
> しらいです。
> opendir() したのが「/」かどうかは、DIR 構造体の __d_dirname
> 要素を見ています。ここには file system としての pathname が
> 格納されていますので、これが「C:\cygwin\*」ならば「/」という
> ことになります。
> 但し、この値は Cygwin の install directory に依存するので、
> getmntent() で「/」の mount する file system 名を調べ、それ
> と比較するようにしています。
この部分は編集ミスで本来 1-2. に置くべきものが 1-1. に置か
れていました。そのように読み替えて下さい。
# MS blast の影響だとかで、自宅からの SSH 接続が頻繁に切れ
#てしまうんです。あの mail 一通書く間に 5 回くらい切断され
#てしまって、サルベージ時にミスった結果がこれです。
# xDSL でも光でもなくて CATV なので、末端のインフラが広域
#LAN になっちゃってるそうです。ちゃんとセグメント切ってルー
#ティングして欲しいなぁ。
因みに __d_dirname を見るのはやめにしました。これだけ見て
ると、/cygdrive/c/cygwin と / とが区別つかないので、opendir()
時に引数を realpath() した結果が / ならば、予め cygdrive 用
の flag を立ててしまう実装にしました。
/cygdrive/c/cygwin と / は実体が同じなのですが、この下に更
に cygdrive directory を掘っても system call は /cygdrive と
認識してくれないので、/ の下にのみ見せるようにしています。
ところで tree 画面にすると /cygdrive/c/cygwin の下層構造が
見えませんが、これは / と i-node が一緒であることを感知して
わざわざそこで切っているためです。
このことは、一般の UNIX 環境でも mount や ln を駆使して再
帰構造の directory tree を構築すると再現させられると思います。
この措置がないと無限 loop しちゃいますので、相当前からこの機
能は実装されています。
> 1-4. pathname が case insensitive。
> これは Windows の filesystem を代用している以上避けられな
> いところなんでしょうね。
> FDclone には元々 IGNORECASE という識別子で case insensitive
> にする機能がついていますので、Cygwin 環境ではこの既定値を 1
> にしました。
これですが、試してみたところ一筋縄ではいきそうにありません
でした。case sensitive な局面と case insensitive な局面とが
混在してるため、全部をどちらかにしてしまう訳にはいかないよう
です。
例えば WIN32API では環境変数は case insensitive ですが、こ
れが Cygwin 環境に copy されたものは case sensitive になって
しまっています。
pathname は case insensitive ですが、command name は case
sensitive です。
なので、文字列比較をしている箇所を全部洗い直して、それぞれ
の case sensitive/insensitive に応じて合わせ込みを行ないまし
た。
各々の外部コマンドの挙動となるとバラバラなので、これはもう
無視しています。単に Cygwin 側の作り込みが甘いだけなんでしょ
うけどね。
しらい たかし