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

[FDclone-users:00907] Re: アーカイブブラウザから戻る位置が時々おかしい



 しらいです。

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 のような原始的環境
の方が重宝するかも知れませんね。

                                               しらい たかし