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

[FDclone-users:00590] Re: 結果報告



こんばんは田村です。
結果報告です。

On Sat, 30 Sep 2006 03:24:10 +0900, Takashi SHIRAI wrote:

> Xreaddir() の後半部に convget() という関数を呼び出している
>箇所があります。_NOKANJIFCONV を有効にするとこの辺りのコード
>が無効になるので、comment out して同じ状況を生み出しましょう。
> comment out するのは以下の 4 行です。各行の行頭に「//」を
>挿入すれば comment out 出来ます。
>		if (convget(conv, path, dos) == conv) {
>			if ((src = strrdelim(conv, 0))) src++;
>			else src = conv;
>		}
> まずはこの状態で compile して再現性を確認して下さい。念の
>ため、漢字関連の変数値は「utf8-mac」にせず空にしておいて下さ
>い。

		strcatdelim2(path, dirpathlist[i].path, src);
		//if (convget(conv, path, dos) == conv) {
		//	if ((src = strrdelim(conv, 0))) src++;
		//	else src = conv;
		//}
		strcpy(dest, src);

上記のような事で良いでしょうか?
この状態でコンパイルした状態では再現しないようです。

		strcatdelim2(path, dirpathlist[i].path, src);
		if (convget(conv, path, dos) == conv) {
			if ((src = strrdelim(conv, 0))) src++;
			else src = conv;
		}

元に戻します。

> 再現しなかった場合は少しずつ範囲を狭めていって元凶を特定し
>ます。この場合、怪しい箇所は convget() になります。この実体
>は kanji.c にあるので、次はそちらに移りましょう。
> Xreaddir() の comment out は元に戻しておいて下さい。
>
> convget() は kanji.c の最後の方にあり、この関数の先頭には
>以下の記述があります。
>	if (noconv) return(path);
> まずはこの行の直前に以下の一行を追加して下さい。それで改め
>て再現性を確認します。
>	return(path);

こうで良いのでしょうか?

return(path);
	if (noconv) return(path);

再現しません。

> 再現したら検証は終わりです。再現しなかったらその追加行を削
>除して元の状態に戻し、今度はその次の行の直前に同じ一行を追加
>して下さい。これを延々と繰返します。

こうでしょうか?

	return(path);
	fgetok = (nokanjifconv) ? 0 : 1;

再現せず。

	return(path);
	cp = path;

再現せず。

	return(path);
	if (!norockridge) cp = transpath(cp, rbuf);

再現せず。

	return(path);
	if (dos) {

再現せず。

	return(path);
		buf[sjis2ujis(buf, (u_char *)cp, MAXPATHLEN - 1)] = 

ここで再現確認しました。ここに挿入して再コンパイルしてから
表示自体が変わったのであれっ、と言う感じでした。
日本語の文字化け具合が違うのです。

念のため、

	return(path);
		cp = buf;

でも再現します。

	return(path);
		fgetok = 0;
再現します。

	return(path);
	}

再現します。


> 私の予想では次の 3 行の前に置くと再現しなくなり、後ろに置
>くと再現するようになるんじゃないかと思っています。
>	if (fgetok)
>		cp = kanjiconv2(buf, cp,
>			MAXPATHLEN - 1, getkcode(cp), DEFCODE, L_FNAME);

こうかな

	return(path);
	if (fgetok)
		cp = kanjiconv2(buf, cp,
			MAXPATHLEN - 1, getkcode(cp), DEFCODE, 

再現せず、ここからまた文字化け具合が変わり、まえのようになります。
次に。

	if (fgetok)
		cp = kanjiconv2(buf, cp,
			MAXPATHLEN - 1, getkcode(cp), DEFCODE, L_FNAME);
	return(path);

やはり再現せず。

と言う結果になりました。

---
yuji tamura