[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00238] Re: ChangeLog for FDclone 2.04c



 しらいです。

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 側の作り込みが甘いだけなんでしょ
うけどね。

                                               しらい たかし