[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00134] Re: FDclone 2.03 has been released
- Subject: [FDclone-users:00134] Re: FDclone 2.03 has been released
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Wed, 26 Mar 2003 21:48:08 +0900
しらいです。
FDclone 2.03 の変更点に関する解説です。
In Message-Id <20030326113932.1AF5553C1E@yuka.unixusers.net>
Takashi SHIRAI <shirai@unixusers.net>writes:
> 組込みコマンド browse の追加。
アーカイブブラウザの枠組を汎用なコマンド出力に対して門戸を
広げ、ftp, rsh, ssh, Samba 等々多種多様なコマンドに対するブ
ラウジング用 wrapper を構築させる組込みコマンドです。
これらの network コマンドの場合、一回ファイル一覧を表示さ
せる度に session を張りますので、network 資源を無駄に浪費し
ない一方、使い勝手の面からは余りスムーズな response は期待出
来ません。
勿論 network 関連以外の使い道もありますが、local にブラウ
ジング可能なものは大概 filesystem として実装されていますので、
やはり network 関連の用途が一番重宝するのではないかと思って
います。
> 組込みコマンド readline, yesno の追加。
batch file 的な使い方の shell script を書く際、UNIX の標準
コマンドだけだと user との対話的 interface に弱そうな気がし
たので、その辺りの補強をしてみました。
機能自体は FDclone に元々備わっている文字列入力と「はい/い
いえ」ですけど、script の中で使えると色々と応用が効くかも知
れません。
command line から使えるようにするのに苦労しました。
> 内部変数 ANSIPALETTE の追加。
なんか以前からリクエストがあったような気がしているんですが、
カラー化表示の際の配色が気に入らないという場合があるようで、
その部分を自由に customize 出来るようにしてみました。
設定方法が直感的でないのでややこしいかも知れませんけど、ニ
ーズを抱いていた方は使ってみて下さい。
> 内部変数 TMPUMASK の追加。
TMPDIR の一時ファイル用の umask です。初期値は 022 なので
何も設定しない場合は従来と同じ挙動を示す筈です。security が
気になる方は 077 でも 0377 でもお好きなように。
> 組込みコマンド launch に -f, -i, -e, -t, -b オプションの追加。
従来の launch コマンドは platform 毎に異なる設定で初期登録
されていましたが、これらの option の追加により、それらを統合
した単一の設定で初期登録されるようになりました。
動作としては無駄な処理を行なうことになりますが、複数の設定
を登録しておいてマッチ度合の高い設定から優先的に採用するとい
う仕組みになっています。
とは言え、余り処理能力に余力の無い環境では、必要の無い設定
は除外した形で登録し直した方がいいかも知れませんね。
> アーカイブブラウザ登録フォーマットに %l, * を追加。
%l は hard link の数です。archiver でこの項目を持つものは
pax 由来の tar くらいだと思いますが、browse コマンドでは ls
出力を食わせることになることが往々にしてあるので、link 数も
情報として取得出来るようにしておきました。
* は field 幅を定める prefix で、空白やタブを無視して行末
までを全部一つの field と見なさせます。これにより、空白やタ
ブを含む filename を含んだ archive file にもある程度対応出来
ると思います。
> %T, %M マクロをステートメント中で使用可能なように改良。
従来の実装では、各種 % マクロを展開してから shell に渡して
いましたが、%T と %M のみこの順序を改め、shell による展開の
後 % マクロの展開を行なうようにしました。
この仕様変更により一番挙動が変わってくるのは statement に
よる loop 中に %M マクロを置いた時で、従来であれば %M マクロ
による loop は statement による loop の外にあった訳ですが、
これが内側で loop することになります。
これ自体は特にメリットでもデメリットでもないと思いますが、
一番恩恵を被るのは command line 文字列の制限に引っかかること
が少なくなるということでしょうね。MS-DOS では 126 文字しか使
えませんから。
UNIX 版でも ARG_MAX を見ながら %T を展開するので、引数が多
過ぎて処理不能になるようなケースは無くなると思います。
> コマンドマクロ展開後のサイズ制限 (1023 文字) を撤廃。
これは上記のマクロの話との合わせ技になるのですが、%T や %M
のように展開後のサイズが膨らんでしまうようなマクロの扱いが変
わりましたので、メモリの許す限り幾らでもサイズを大きく出来る
ようにしました。
選択ファイル数が増えてしまうと 1,023 文字なんて制限は簡単
に越えてしまうので、これまでは余り実用的な仕様ではなかったか
も知れません。
勿論、展開前から 1,023 文字以上あっても構いません。そんな
に長い文字列を入力するのは大変だとは思いますが。
> 文字列入力時のサイズ制限 (255 文字) を撤廃。
一応画面サイズの許す限り何文字でも入力出来るようになってい
ます。shell として使う際には特に 255 文字という制限は厳しか
ったかも知れません。
流石に画面サイズを越えてしまうとまともに行編集が出来なくな
ってしまうので、それは越えられないように制限しています。既存
の shell でも画面サイズを越えて行編集出来るものは見当たりま
せんでした。
ニーズがあれば考えますが、現実的には画面サイズを越えての行
編集は要らないんじゃないでしょうかね。
> アーカイブブラウザが FNAMEKCODE に従うように改良。
当たり前の話ですが、Darwin や Zaurus 上で archive を作ると、
中の filename は UTF-8 で保存されているんですよね。となると、
この UTF-8 をそのまま端末表示してしまうと UTF-8 非対応環境で
は文字化けしてしまいます。
FNAMEKCODE が UTF-8 の場合は archive browser との入出力の
際に漢字コード変換を行なうような実装に改めました。もしそれで
却って都合が悪くなる場合は、FNAMEKCODE を一時的に変更するこ
とで対処して下さい。
> '/' で始めるファイル検索が効かない場合がある点を修正。
「/」で始まるファイル検索は archive の中まで覗いて検索する
んですが、archive 内の filename が directory を含んでいた場
合に、検索文字列と match しないような実装になっていました。
また、directory そのものが file として archive されていな
い場合にでも、filename の一部として出力された directory name
も検索対象に含めるようにしました。
> 32 文字以上の wild card を使うと異常終了していた点を修正。
realloc() ミスです。ありがちな原因は植木算的な数え間違いだ
と思いますが、このケースは macro 展開の落とし穴によるもので
した。
max(), min() の中で ++ 演算子を使っちゃ駄目って小学校で教
わったでしょっ。
> パイプが安全に終了できないことがある点を修正。
pipe に使った child prosess を看取る際に、SIGPIPE で死んだ
ものを異常終了扱いにしてしまっていました。SIGPIPE は pipe の
最期としては別に異常ではないので、割と頻発していたのではない
でしょうか。
> 一時ディレクトリが残ってしまうことがあるバグを修正。
元々一時 directory は定数だったのを、安全面を重視して乱数
により生成される可変値にしてしまったので、その違いに対する対
応が甘くなっていました。
既に一時 directory が作成されている状態で更に一時 directory
が必要になった時、既存の一時 directory を関知出来ずに新たに
わらわらと作成していたので、ゴミの山が出来ていたこともあった
と思います。
特に MS-DOS 環境では pipe(2) の実装を一時ファイルで emulate
していますので、簡単に一時 directory のゴミが生じていたと思
います。
> 端末制御の不完全な親シェルからの起動に対応。
一部の ash が端末制御出来ていないようで、子が setsid(2) し
たまま終了した場合に制御端末を失ってしまうんですね。そんな仕
様では job 制御していることにはならないと思うんですが、馬鹿
な親の面倒は子が看るしかないので、終了時には必ず元の持ち主に
端末を返すようにしました。
でも異常終了時はどうなるか知りません。suspend した時には死
んじゃうでしょう。
> 再帰的にディレクトリを辿る作業が中断することがある点を修正。
判り易い症状で言うと、chmod 000 されたような directory を
含む directory 構造を削除出来ないという例が一番典型例でしょ
うか。
その directory の下の file を再帰的に削除しようとしますが、
file mode が 000 なので覗くことが出来ません。この時点で諦め
て作業を中断していました。
でも実際は、その directory は既に空かも知れないので、試し
に rmdir() してみればいいんですよね。それで失敗した時点で初
めて諦めれば済む訳です。
> 最小画面構成で EDIT_CONFIG が異常終了していた点を修正。
最小画面構成は Zaurus のための拡張でしたが、EDIT_CONFIG ま
では頭が廻っていませんでした。
> 最小画面構成で各種選択メニューが崩れていた点を修正。
同上。異常終了しないまでも、選択メニューが一行に収まらなく
なってしまうのでまともに操作出来ませんでした。
> MS-DOS 版で % によりメタキャラクタを殺せていなかった点を修正。
MS-DOS では「\」は path delimitor なので「%」を代わりに使
うような仕様にしています。ところが「%」は macro prefix でも
ある訳で、その辺の処理が甘くて meta character を「%」で殺し
切れない実装になってしまっていました。
--
以上。
しらい たかし