[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00942] Re: ツリーで移動中にSEGV
- Subject: [FDclone-users:00942] Re: ツリーで移動中にSEGV
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Wed, 29 Feb 2012 20:53:18 +0900
しらいです。
時間が掛かりそうなので Ack だけ返しておきます。FDclone の
source code 見るのは一年ぶりくらいですか。
In Message-Id <op.wac8x9kxc4zqer@pc03>
"Hironao Komatsu" <hirkmt@gmail.com>さんwrites:
> 小松です。
> 表題の件ですが、再現手順を説明します。
> まず、ルートディレクトリに移動し、ツリー表示状態にします。
(snip)
> この状態で、PageDownを押すと、ツリーが消えます。
まずこの時点でおかしいですね。PageDown は半画面ずつ scroll
up させる筈ですが、その結果最後尾に達してしまう場合にこの症
状が生じています。
root directory に沢山の sub directory があるか、画面の縦サ
イズが小さい場合は再現しませんでした。但し、その場合でも何度
か scroll up させると再現します。
たまたま画面サイズと sub directory 数が符合して、丁度最後
尾の位置に移動するような場合では、再現しません。この場合は最
後尾処理がされないからですね。
source を紐解いてみると、FD-2.06d で embug しているようで
す。それまで macro 表記だった箇所を変数で置換えた際に、機械
的に処理してしまい符号が逆転してしまいました。
その結果、最後尾の sub directory を遥かに越える後ろに移動
してしまい、そんなところに directory tree は存在しないために
何も表示されない訳です。
この状態でも cursor を延々と前に戻すと、directory tree が
scroll down して見てて来るようになると思います。
取り敢えずこれは直しました。符号を変えるだけですから。
> この時に、Backspaceで、SEGV。
これは null check が甘くて SIGSEGV を発していました。tree
の外にいる訳で、空の pointer を参照しようとして落ちます。上
記の bug が無ければそういう状況は起こらないんですけどね。
とは言え、万一のことを考えてこちらも修正しておきました。参
照前に null check を突っ込んだだけですが。
--
で、じゃあ何に時間が掛かりそうなのかと言うと、ついでに見つ
けてしまった別の bug がなかなか手ごわいからなのです。
PageUp/PageDown は画面を半画面分 scroll down/up した上で、
最後に cursor を画面中段に移動させるという仕様になっています。
確か本家『FD』を踏襲している筈です。
ところが、directory tree が短過ぎて「画面中段」が tree の
外に位置してしまう場合、そんなところに移動されると表示がおか
しくなってしまいます。
具体的には、位置合わせのために directory tree が下段に降り
て来ます。これは一般的に期待される挙動ではないと思います。
症状と条件が明確なのでとっとと直せば良さそうなものですが、
何せ FD-1.00 の頃からそういう挙動になっていたので、この辺り
の code は何年も手つかずのままなんですよね。
変数や関数の仕様がどうにも思い出せないので、まずはその辺り
を思い起こす作業から始める必要があります。こればかりは lint
や debugger に頼る訳にもいきません。
ということで、修正までには暫く時間が掛かりそうなので、恐縮
ですがそれまでお待ち下さい。floppy drive の秒欠け bug も放置
したままなので、合わせて FD-3.00k として release します。
P.S.
出来れば本家の挙動に合わせて実装したいんですが、MS-DOS の
稼働環境が既に...。
しらい たかし