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

[FDclone-users:00599] Re: 仕切り直します。



 しらいです。

In Message-Id <20061001210952.392760.01235905@isis.ocn.ne.jp>
        yuji tamura <yuji@isis.ocn.ne.jp>さんwrites:
> こんばんは田村です。

> config.h に
> #define	_NOKANJIFCONV
> を追加して make
> /Users/yuji/012345678901234567
> /Users/yuji/Documents/10 blog
> 共に、ファイル名が消える現象確認、
> ただ日本語を含むファイル名。

 この時点で今までの前提が全部崩れてしまうので、以降の検証は
失礼ながら全くの無駄になっています。


> #define	_NODOSDRIVE
> #define	_NOKANJIFCONV
> #define	_NOROCKRIDGE
> 
> を追加して make
> make できない。エラーメッセージは下記

 以下の patch でどうでしょう?これで再度挑戦してみて下さい。

---- Cut Here ----
diff -u ../old/FD-2.09/dosemu.c ./dosemu.c
--- ../old/FD-2.09/dosemu.c	Tue Aug 22 00:00:00 2006
+++ ./dosemu.c	Sun Oct  1 22:03:16 2006
@@ -418,7 +418,11 @@
 	char conv[MAXPATHLEN];
 	int n;
 
+#ifdef	_NOROCKRIDGE
+	path = convput(conv, path, 1, 0, NULL, NULL);
+#else
 	path = convput(conv, path, 1, 0, rpath, NULL);
+#endif
 #ifndef	_NODOSDRIVE
 	if (_dospath(path)) n = doslstat(path, stp);
 	else
---- Cut Here ----

 これで上記 3 行を config.h に加えてみて、それでも再現する
ようならこれはもう Mac OS X の library に潜在する bug だとい
うことになると思います。
 ただ、この状態ではこれまでと全然違う実装になる筈なので、そ
れでも再現するということになると、何かまた別のところで間違っ
ている可能性の方が大きいので、設定等再確認して下さい。

 逆に再現しなくなった場合、3 行の #define を一個ずつ削除し
たり復活させたりして、全ての組合せで再度検証して下さい。
 組合せとしては 8 通りあることになりますが、既に「全てなし」
と「_NOFNAMEKCODE のみ」は検証済なので、残り 6 通りについて
のみ検証すれば十分だと思います。


> -----dosemu.c-----
> 		strcatdelim2(path, dirpathlist[i].path, src);
> 		//if (convget(conv, path, dos) == conv) {
> 		//	if ((src = strrdelim(conv, 0))) src++;
> 		//	else src = conv;
> 		//}
> 		strcpy(dest, src);
> ------------------
> 
> で make
> /Users/yuji/012345678901234567
> /Users/yuji/Documents/10 blog
> 共に、ファイル名が消える現象確認、
> ただ日本語を含むファイル名。

 うーむ、これで再現するということは、原因として考えられるの
は二つです。
 一つはこの部分のコードが全然実行されていないということ。こ
れは、comment out 部分の直前に「exit(0);」という行を追加して
みることで確認出来ます。
 これを追加すると起動直後に終了する筈なんですが、もし終了し
ないようなら Xopendir() のどこかでおかしなことが起こっている
ことになります。もしそうなら別途検証しましょう。
 これで終了するようならもう一つの原因が考えられます。コピー
先の dest という変数が何かとんでもない領域を指しているという
ことです。
 この確認のために、上で追加した「exit(0);」の直前に以下の行
を追加して printf debug をしましょう。これで表示される二つの
値が大きくかけ離れていた場合は dest の値がおかしいですね。
	printf("%p,%p\r\n", &buf, dest);

 因みに、どっちの検証でも終了後の端末がおかしな設定になって
いると思いますので、「stty sane」等のコマンドを入力して端末
設定を正常に戻してやるといいでしょう。
 おかしな端末状態だと入力文字が表示されないので不安に陥るか
も知れませんが、フリーズしている訳ではないので慌てないで下さ
い。

                                               しらい たかし