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

[FDclone-users:00743] Re: FDclone 3.0 beta test has been started



 しらいです。

In Message-Id <20080307093024.9789d4e0.yasushi_imao@imao.jp>
        Yasushi Imao <yasushi_imao@imao.jp>さんwrites:
> お世話になります。今尾といいます。

> FD-sh をテストしていて、今頃気がついてしまったんですが、
> "Solaris10 X86 + FD-2.09g の fdsh をログインシェルとして使用"
> という環境で、scp の受け取り側として使用した場合
> 
> "fdsh: dumb: invalid terminal for FDclone"
> 
> というエラー(?)メッセージが表示されます。

 端末 DB に「dumb」エントリが存在しないんでしょうね。うちの
Solaris 10 の /etc/termcap にはあるんですが。

 FDclone は端末名を元に key map や escape sequence を設定す
るので、環境変数 TERM の値が端末 DB に存在しなかった場合にこ
のエラーになるんです。
 「dumb」というのはダム端末のことで、環境変数 TERM が未定義
だった場合に FDclone が取り敢えず代わりに代入する値です。こ
の時に、そんなの知らないと言ってエラーを吐いてるんでしょう。

 尤も、この部分は UI として動いている時にエラー扱いにすれば
十分なんで、shell として動いている時はスルーしておいて UI を
起動しようとした時点で初めてエラーを吐けば済む話です。
 その shell として動いているかどうかの判断が甘くて、TERM に
「dumb」を代入している初期化段階は UI かも知れないと判断して
エラーに落ちていました。
 初期化の冒頭部で UI か shell かを判断すればこのエラーは回
避出来ると思います。

 という訳でこんな patch では如何でしょうか?

# FD-2.09h に反映させたいので週明けくらいまでに結果報告を
#くれると助かります。

---- Cut Here ----
diff -u ../old/FD-2.09g/system.c ./system.c
--- ../old/FD-2.09g/system.c	Sat Jan 26 00:00:00 2008
+++ ./system.c	Sat Mar  8 03:06:51 2008
@@ -10785,7 +10785,10 @@
 #endif
 	isstdin = forcedstdin;
 
-	if (n > 2) interactive = interactive_io;
+	if (n > 2) {
+		shellmode = 1;
+		interactive = interactive_io;
+	}
 	else if (n >= argc || isstdin) isstdin = 1;
 	else {
 		definput = newdup(Xopen(argv[n], O_BINARY | O_RDONLY, 0666));
@@ -11031,7 +11034,6 @@
 #endif
 			fflush(stderr);
 		}
-		shellmode = 1;
 #if	defined (FD) && !defined (_NOPTY)
 		if (isshptymode()) {
 			shellpid = (p_id_t)-1;
@@ -11175,6 +11177,7 @@
 int argc;
 char *CONST *argv, *CONST *envp;
 {
+	shellmode = 1;
 	setshellvar(envp);
 	if (initshell(argc, argv) < 0) return(RET_FAIL);
 #ifdef	FD
---- Cut Here ----


> ちなみに、FD-sh-080306 では再現しませんでした。

 fdnsh は UI 機能を持たないのでそもそも TERM の内容なんか全
く関知していないんですよ。なのでもっと以前の実装でもこの症状
は現れないと思います。

                                               しらい たかし