[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00589] Re: 再現確認
- Subject: [FDclone-users:00589] Re: 再現確認
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sat, 30 Sep 2006 03:24:10 +0900
しらいです。
In Message-Id <20060929231703.442690.6df4f20b@isis.ocn.ne.jp>
yuji tamura <yuji@isis.ocn.ne.jp>さんwrites:
> こんばんは、田村です。
> 念のため「>> これらの "utf8-mac" をすべて "" にした状態で」
> 行いました。
漢字変換させない設定にしたのに再現して、でも漢字変換機能を
殺して compile すると解消されるんですか。微妙なところですね。
ファイル名の漢字変換処理に元凶がありそうですけど、漢字変換
そのものではなくて、変換のための前処理なり後処理なりに何かま
ずい点があるようですね。
では、漢字変換機能に関わる実装部分で、漢字変換処理以外の部
分に的を絞ってもう少し調べてみましょうか。再現性が低くて大変
だとは思いますがもう少しおつき合い下さい。
_NOKANJIFCONV が効いて来る箇所の中からある程度的を絞ってピ
ンポイントで局所的に _NOKANJIFCONV が有効になった状況を作っ
てみましょう。
まずは config.h を元に戻します。単純に削除してしまっても構
いません。このままだと再現する筈なので、dosemu.c: Xreaddir()
の中で _NOKANJIFCONV を有効にしてみます。
ファイル名文字列が無くなるということは、この関数が一番怪し
いので、今回はここに的を絞ります。
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」にせず空にしておいて下さ
い。
もしこれで再現してしまったら次の手を考えます。次に怪しそう
なのは Xopendir() 辺りでしょうか。
再現しなかった場合は少しずつ範囲を狭めていって元凶を特定し
ます。この場合、怪しい箇所は convget() になります。この実体
は kanji.c にあるので、次はそちらに移りましょう。
Xreaddir() の comment out は元に戻しておいて下さい。
convget() は kanji.c の最後の方にあり、この関数の先頭には
以下の記述があります。
if (noconv) return(path);
まずはこの行の直前に以下の一行を追加して下さい。それで改め
て再現性を確認します。
return(path);
再現したら検証は終わりです。再現しなかったらその追加行を削
除して元の状態に戻し、今度はその次の行の直前に同じ一行を追加
して下さい。これを延々と繰返します。
因みに、「#」で始まる行に関しては、その前に置いても後ろに
置いても大差ありませんから、「#」で始まらない行のみカウント
しながら進めていくと効率が良いと思います。
私の予想では次の 3 行の前に置くと再現しなくなり、後ろに置
くと再現するようになるんじゃないかと思っています。
if (fgetok)
cp = kanjiconv2(buf, cp,
MAXPATHLEN - 1, getkcode(cp), DEFCODE, L_FNAME);
これ以外の行は余り大層なことやってないもので。
もし私の予想通りだった場合は、この「getkcode(cp)」の部分を
「NOCNV」に置換えてみて下さい。
こんな感じで進めてみようと思いますが、それでも埓が開かない
ようなら、先日話の出た remote 接続環境 で Mac OS X を私が直
接操作することも考えましょうか。
しらい たかし