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

[FDclone-users:01037] Re: FDclone 3.01b has been released



 しらいです。

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

>  本日、下記 URL にて FDclone 3.01b を公開しましたのでご案内
> 申上げます。

 最初にお断りしておきますが、今回 fj.sources への投稿はして
いません。と言っても既に何のことか理解出来ない人の方が多そう
ですが、従来は NNTP サービスによる公開が 1st release でした。
 最近は NNTP を feed してくれるプロバイダがいないので、個人
的に依頼して open-news.com を利用していたのですが、どうやら
サーバが死んだ様子です。
 もし復旧するようなら fj.sources にも追って投稿しますが、当
面は HTTP と FTP のみでの公開になります。


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

 では恒例の解説です。


> 	sparc64 環境で異常終了する点を修正。

 [FDclone-users:01028] で報告のあった障害に対する修正です。
bug fix から半年も放置してしまって申し訳ありませんでした。


> 	Linux kernel 2.6.23 以降でマクロ展開に失敗する点を修正。

 これは glibc の sysconf() バグに起因します。kernel 2.6.23
で Linux は execve(2) の引数サイズ制限を拡張したのですが、そ
れが glibc の実装に反映されていない時期がありました。
 そのため、sysconf(_SC_ARG_MAX) で取得される値が負数になっ
てしまい、これ以上引数サイズを増やせないと判断した結果マクロ
展開を断念してしまっていました。
 しかも、この際にエラーメッセージを表示しない実装になってい
たため、原因不明でマクロが実行されないという自体に陥っていま
した。

 新しい実装では、sysconf() の値が異常な場合は採用を見送ると
共に、エラーメッセージを表示するようにしたので、今後似たよう
なことが起きても原因不明にはならないと思います。
 尚、glibc 側の顛末に関しては下記 URL を参照して下さい。
	https://sourceware.org/bugzilla/show_bug.cgi?id=5786


> 	bind でマクロ割当ての上書きに失敗する点を修正。

 bind コマンドで同一キーにマクロを上書きで割当てる際、古い
マクロを削除してから新しいマクロを追加するのですが、このの手
順にミスがあり、何も割当てられない状態になっていました。
 普通はそう何度もキー割当てを行なったりはしないので、今まで
どこからも報告がありませんでしたが、/etc/fdrc と .fd2rc とで
bind の競合が発生して発覚しました。
 2.09g での embug だったので、実に 8 年越しの bug fix にな
ります。


> 	組込みコマンドと %M マクロの併用による無限ループを修正。

 %M マクロはマークファイルの数だけ同じコマンドを繰返すマク
ロですが、どの段階で展開を行なう実装にするかが悩ましいところ
です。
 system(3) を利用していた頃は一番外側の段階での繰返ししか出
来ませんでしたが、内蔵 shell になってからは好きな段階で展開
出来るので、2.03 以降では一番内側の段階で展開しています。
 この繰返しはどこかでリセットしてやらないと、複数回 %M を繰
返した際に二回目以降の %M が全て処理完了と見なされ展開されな
くなってしまいます。

 例えば eval のような組込みコマンドを使った場合、一旦 %M を
展開した後で再度構文解析を行なうので、リセットのタイミングを
間違えると、常に未処理状態と見なされ無限ループに陥ります。
 そこで、%M を処理した後の状態を憶えておいて、コマンド実行
により繰返しをリセットされても再び元の状態に戻せるようにして、
無限ループを回避しました。


 以上、3.01b の修正点解説でした。

                                               しらい たかし