[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00601] Re: 仕切り直します。
- Subject: [FDclone-users:00601] Re: 仕切り直します。
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Tue, 03 Oct 2006 00:19:21 +0900
しらいです。
In Message-Id <20061002225405.834760.f60b1a9a@isis.ocn.ne.jp>
yuji tamura <yuji@isis.ocn.ne.jp>さんwrites:
> こんばんは、田村です。
> > これで上記 3 行を config.h に加えてみて、それでも再現する
> > ようならこれはもう Mac OS X の library に潜在する bug だとい
> > うことになると思います。
> > ただ、この状態ではこれまでと全然違う実装になる筈なので、そ
> > れでも再現するということになると、何かまた別のところで間違っ
> > ている可能性の方が大きいので、設定等再確認して下さい。
>
> 3行を追加して、make しましたが、
>
> /Users/yuji/012345678901234567/
> /Users/yuji/Documents/10 blog/
> において、日本語を含むファイル名が消える現象は同じようです。
日本語はこの際無視して下さい。いいですね。Mac OS X は漢字
コードに UTF-8 を使っています。これを正しく扱うには漢字変換
機能を有効にする必要があります。
何度も言いますが、現在検証しているのは US-ASCII のファイル
名まで消えてしまう現象に関してです。そのために日本語を含むフ
ァイル名は対象外にしてコードをいじっています。
改めて言いますが、日本語を含むファイル名がどういう結果を示
そうが、今の時点では無視して下さい。問題は一つ一つ片付けてい
きましょう。
> /Users/yuji/Documents/
> において
> 「11 98/」
> 「12 test2/」
> 「5 doc/」と言うディレクトリ名が消える。
>
> と言う現象が出てしまったんですが、別のディレクトリ
> に素の fd v2.09 を展開して make して実行すると、
> 同じ現象が起きます??。
ふむ、こちらは日本語関係無さそうですね。今後はこちらに注力
していきましょうか。
まずは、config.h に追加した 3 行が本当に有効になっているか
どうか確認して下さい。dosemu.c: Xreaddir() の 3 行目辺りに以
下の記述があります。
return(pseudoreaddir(dirp));
この前後に出鱈目な内容の行を追加してみて下さい。「abcdef」
とか「foobar」とか何でも構いません。これで make してその行が
error 扱いになりますか?
もしすんなり make 出来てしまったら、config.h が正しく変更
出来ていないということになるので、もう一度見直して下さい
逆にもし error になって make 出来ないようならば、config.h
の記述は合っています。上で追加した行は削除して次の検証に移り
ましょう。
この Xreaddir() で取得したファイル名は、あちこち廻って最後
は browse.c: readfilelist() で別の変数に複製されます。ここの
buffer size を変えてみましょう。
readfilelist() の冒頭に「char buf[MAXNAMLEN + 1];」という
記述があります。このサイズを増やしてみましょうか。配列の添字
は「MAXNAMLEN * 2 + 1」くらいでどうでしょうか。
# 今ふと思ったんだが、strlen() とか strcpy() とかいった文
#字列処理関数が勝手に locale の影響を受けてしまう環境なんて
#あるんだろうか?
# それが嫌で setlocale() は使ってないんだけど、LANG の値を
#見て勝手に library 側で setlocale() なんかされたりしたら、
#尚且つ勝手に wchar 扱いでカウントされたりしたら、もう訳の
#判らないことになりますねー。
> > うーむ、これで再現するということは、原因として考えられるの
> > は二つです。
> > 一つはこの部分のコードが全然実行されていないということ。こ
> > れは、comment out 部分の直前に「exit(0);」という行を追加して
> > みることで確認出来ます。
>
> 追加して、make して見ましたが、普通に起動するようです。
> 状況は上に同じです。
普通に起動したらまずいです。ひょっとして、上の config.h の
記述を元に戻し忘れていませんか?こちらの検証は上の検証とは独
立なので、素の 2.09 を別の directory に用意して下さい。
もしそうではなくて、config.h は元に戻したのに exit(); で終
了してくれないようなら、Xopendir() が何かおかしなことになっ
ていますね。
comment out の直前の exit(0); をあと 2 行上に移動させて、
if 節の外に出して下さい。こんな感じ。
for (i = maxdirpath - 1; i >= 0; i--)
if (dirp == dirpathlist[i].dirp) break;
exit(0);
if (i >= 0) {
strcatdelim2(path, dirpathlist[i].path, src);
if (convget(conv, path, dos) == conv) {
これでも終了しないようなら、その compiler は何かおかしなこ
とになっています。逆にもし終了するようだと Xopendir() がおか
しなことになっているでしょう。
前半の検証と違って、こっちは比較的確認が容易ですから、こっ
ちはこっちでさくっと片付けてしまいましょうか。
しらい たかし