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

[FDclone-users:00457] Re: FDclone 2.08a has been released



 しらいです。

 すみません。1.08 は結構バグバグな release でした。特に急い
で出したという訳でもないのですが...。

In Message-Id <20060206161102.08DAF40C44F@yuka.unixusers.net>
        Takashi SHIRAI <shirai@unixusers.net>writes:
>  しらいです。

>  以下は HISTORY より今回の変更点の抜粋です。

 変更量としては小さなものが多いんですが、compile 出来ない等
影響の大きなバグばかりなので、ちょっと丁寧めに解説しておきま
す。


> 	NetBSD 3.0 対応。

 これだけ bugfix ではない変更点ですね。NetBSD 3.0 の公開は
2.08 release の直前だったので、対応が間に合っていませんでし
た。
 NetBSD はこれまで大きな変更は余りして来なかったのですが、
ここに来て過去との継承性を全く無視した変更を幾つか実装してい
るんですね。

 4.4BSD 由来の system call に statfs(2) という関数がありま
す。df(1) みたいに、file system の容量や空きを調べる関数なん
ですが、POSIX では statvfs(2) という別の名前の関数が推奨され
ています。
 NetBSD 3.0 はこの POSIX に倣うためにこれまでの継承性を捨て、
statfs(2) を廃し statvfs(2) を実装しました。機能は殆んど変わ
らないので、POSIX に迎合する以外の理由はないと思います。
 ここまでなら、他の OS でも見られる実装なんで特に特殊な対処
は必要なかったんですが、この stafvfs(2) への移行は他の関数へ
の影響が大きく、他の OS に無い system call を生んでいます。

 個々の file system ではなく mount されている全 file system
の情報を取得する system call に getfsstat(2) があります。こ
れは名前のとおり statfs(2) の枠組で実装されています。
 この system call も 4.4BSD に由来するものですが、POSIX に
はこれに相当する関数がありません。4.4BSD 由来の OS 以外では
他の名前の互換関数が用意されています。
 一方、statvfs(2) は System V 由来でして、これを使う OS は
getfsstat(2) 相当の関数として、System V 由来の library 関数
である getmntent(3) を使うものが殆んどです。
 ところが、NetBSD 3.0 は 4.4BSD 由来の OS で唯一 statvfs(2)
を実装してしまったので、getfsstat(2) が使えなくなってしまい
ました。そこで出て来たのが getvfsstat(2) です。

 getvfsstat(2) というのは、getfsstat(2) のベースを statfs(2)
から statvfs(2) に置換えただけの system call ですが、そんな
関数は NetBSD 3.0 にしかありません。
 getfsstat(2) の wrapper library 関数に getmntinfo(3) とい
うものもあるんですが、NetBSD 3.0 ではこちらも statvfs(2) ベ
ースに置換えられてしまって互換性がありません。
 という訳で、file system 情報を取得するためには、NetBSD 3.0
固有の関数に対応する必要があるという訳です。

 実際、NetBSD 3.0 のパッケージシステムである pkgsrc では、
この影響による patch が沢山出て来てちょっとした混乱になって
いるようですね。


> 	PTYINKCODE の設定がうまく機能していなかった点を修正。

 PTYINKCODE に漢字コードを設定すると、疑似端末モードの時に
入力された文字列をこの漢字コードに変換してから、疑似端末側の
入力に渡すという仕様でした。
 ところが、実際そういう目的に使ってみると、入力した漢字の殆
んどが無視されてしまっていました。

 原因は、入力を受け取った疑似端末側の FDclone は、入力文字
列が INPUTKCODE で指定された漢字コードだと思って、そのコード
にそぐわない文字列をキャンセルしてしまっていた点にあります。
 そこで、疑似端末側の FDclone の入力漢字コードは INPUTKCODE
ではなく PTYINKCODE の方を先に参照する実装に改めました。

 但し、これは疑似端末側が FDclone だった場合の話で、子プロ
セスとして他のコマンドが実行され、そのコマンドが PTYINKCODE
で指定された入力漢字コードを扱える場合には、2.08 の実装でも
正しく機能しています。


> 	varargs を用いる環境で compile に失敗していた点を修正。

 [FDclone-users:00453] で報告のあった bug に対する対処です。
ANSI C より前の古い C compiler 実装で失敗していたと思います。


> 	sgtty を用いる環境で compile に失敗していた点を修正。

 patch の termio.h に対応する箇所を見ると判ると思いますが、
「#define」の後ろに余計な「;」がついてますね。
 コピペに失敗しただけのことなんですが、sgtty 環境って最近見
ないので検証洩れしてました。SunOS 4 など、4.3 以前の BSD が
この interface を使ってます。


> 	端末名未登録時に fdsh でキー入力出来なかった点を修正。

 /etc/termcap もしくは /etc/terminfo という端末 database が
あって、これには kterm とか TeraTerm とか VT100 とか色々なタ
イプの端末の特徴が登録されています。
 ここに登録されていない端末の場合、例えばカーソルを右に動か
すにはどういう制御コードを与えたらいいのかをアプリ側で知るこ
とが出来ません。
 なので、そういうケースではカーソル移動のような特殊な端末制
御は行なわないようにする必要があります。

 fd として起動された FDclone は、そういう配慮をして設計され
ていたのですが、fdsh として起動された時にその配慮を忘れてし
まっていました。


> 	組込みコマンド echo が DEFKCODE を見ていなかった点を修正。

 DEFKCODE に漢字コードを設定すると、command line で入寮した
文字列は全てその漢字コードに変換されるという仕様なんですが、
builtin echo に渡された引数にその枠組を適用するのを忘れてい
ました。
 echo の引数は pathname でもないので、そういった動的変換を
要するような代物ではないとは思うのですが、/bin/echo の引数が
変換される以上 builtin echo もそれに合わせるべきでしょうね。

                                               しらい たかし