[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00239] Re: ChangeLog for FDclone 2.04c
- Subject: [FDclone-users:00239] Re: ChangeLog for FDclone 2.04c
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Tue, 07 Oct 2003 00:42:21 +0900
しらいです。
In Message-Id <20030930122124.CC5F053DCB@yuka.unixusers.net>
Takashi SHIRAI <shirai@unixusers.net>writes:
> しらいです。
> これですが、試してみたところ一筋縄ではいきそうにありません
> でした。case sensitive な局面と case insensitive な局面とが
> 混在してるため、全部をどちらかにしてしまう訳にはいかないよう
> です。
> 例えば WIN32API では環境変数は case insensitive ですが、こ
> れが Cygwin 環境に copy されたものは case sensitive になって
> しまっています。
> pathname は case insensitive ですが、command name は case
> sensitive です。
続報です。環境変数は、library 関数レベルで case sensitive
なので FDclone でも case sensitive にしなくてはなりませんが、
command name は、system call レベルでは case insensitive で
した。
case sensitive になっているのは Cygwin 標準 shell の bash
の仕様であるというだけですので、FDclone では command name に
関しても pathname 同様 case insensitive にしておきます。
command name を case sensitive にしてしまうと hash に大小
織り混ぜた様々な pathname が突っ込まれてしまって効率が悪くな
ります。実際、bash では /usr/bin/ls と /usr/bin/LS とが別々
に list up されてしまって非合理的です。
hash に関しては似たような話として .exe 無しと .exe ありの
区別という話もあるんですが、これは system call レベルでどっ
ちも存在するということになってしまっているので、区別すること
にしました。
stat(2) や access(2) で調べると、実際には存在しない「.exe」
無しの pathname に対しても、あたかも存在しているかのように答
えが返ってきてしまいます。これではアプリレベルでは対処しよう
がありません。
> なので、文字列比較をしている箇所を全部洗い直して、それぞれ
> の case sensitive/insensitive に応じて合わせ込みを行ないまし
> た。
結局、pathname/command name/環境変数名の三種に対して、それ
ぞれ case sensitice/insensitive を指定する識別子を設けました
ので、状況に応じて柔軟に対処させて下さい。
既定値は Cygwin では順に insensitive/insensitive/sensitive、
MS-DOS では全て insensitive、それ以外では全て sensitive、と
なっていますが、config.h 辺りで #define すれば好みに応じて変
更することも可能です。
詳細は release 後の TECHKNOW を読んで下さい。
Cygwin のような MS-DOS と UNIX のキメラのような環境が出て
来ることは想定していなかったので、今まで「MSDOS」という一つ
の識別子で色々な特徴を表していたのですが、これを機に代表的な
幾つかの特徴を別々の識別子で表すことにしました。
この副作用として、例えば MS-DOS 版でも pathname delimiter
を「\」でなく「/」で表せるようにしたり、UNIX 版でも command
search path に暗黙の了解として「.」を含めたり、そういう指定
が可能になっています。
特に、MS-DOS 版でも複数の漢字 code に対応させられる指定は
有用かも知れません。今までだと kconv builtin も使えませんで
したしね。
しらい たかし