[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00907] Re: アーカイブブラウザから戻る位置が時々おかしい
- Subject: [FDclone-users:00907] Re: アーカイブブラウザから戻る位置が時々おかしい
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Wed, 14 Jul 2010 01:58:45 +0900
しらいです。
In Message-Id <20100713082510.ff587e1e.riki1017kazu@gmail.com>
Rikito INAKAZU <riki1017kazu@gmail.com>さんwrites:
> 稲員です。
> 適当な archive (仮に foo.tar.gz) にカーソルのある状態で Enter で
> archive browser を起動し適当に閲覧後 'q' で archive browser を
> 終了すると、本来ならカーソル位置が [foo.tar.gz] にある状態に戻らなけ
> ればならないが、時々戻る位置を失って [..] の位置に戻ってしまう時がある。
2.0 系では通常 browser と archive browser とでそれぞれ別の
filelist 実体を持っていましたが、3.0 系ではこれを共用するよ
うにしたため、元の filelist に戻れていなかったんですね。
> とりあえず直前に getfilelist() を仕込んで症状は回避できましたが、これが
> 正しい処置かどうか良く分かってません。
欲しいのは file name 一覧ではなくて元の cursor 位置にある
file name 一個だけなので、それだけなら変数 archivefile に保
存されてますね。
汎用性は低いですが、元々 archive browser 用のコードなので、
cursor 位置云々に拘る必要はないでしょう。こんな patch で如何
でしょうか。
archive browser の亜流である browse builtin での動作確認も
一応済ませています。
---- Cut Here ----
diff -u ../old/FD-3.00h/browse.c ./browse.c
--- ../old/FD-3.00h/browse.c Mon Jun 14 00:00:00 2010
+++ ./browse.c Wed Jul 14 00:53:51 2010
@@ -1809,6 +1809,7 @@
#ifndef _NOARCHIVE
if (archivefile) {
if (no < 0) {
+ Xstrcpy(file, archivefile);
# ifdef _NOBROWSE
escapearch();
# else
@@ -1816,7 +1817,6 @@
escapearch();
} while (browselist);
# endif
- Xstrcpy(file, filelist[filepos].name);
}
else if (no == FNC_CHDIR) {
tmp = (filepos >= 0) ? filelist[filepos].name : NULL;
@@ -1827,8 +1827,8 @@
}
else if (cp != (char *)-1) Xstrcpy(file, cp);
else {
+ Xstrcpy(file, archivefile);
escapearch();
- Xstrcpy(file, filelist[filepos].name);
}
}
else if (no == FNC_EFFECT) {
---- Cut Here ----
> FreeBSD の CURRENT 使ってた頃 FDclone が時々 core dump してたけど
> これのせいだったみたいです。
archive 内の file 総数が実 directory 内 file 総数より少な
い場合に、filepos が一覧の外の file name を参照してしまった
んじゃないでしょうか。
> 別の理由で STABLE に入れ替えてから core dump しなくなったんで CURRENT
> のせいだとばかり思ってたけど、どうやら malloc の default option の違い
> でたまたま core dump しなくなっただけみたいですね。
> さっき試したら STABLE でも MALLOC_OPTIONS=AJ だと core dump しました。
GNU malloc なんかも segment 違反への耐性が強くて debug に
は向いていません。そういう意味では、MINIX のような原始的環境
の方が重宝するかも知れませんね。
しらい たかし