koga kazuo
kogak****@gmail*****
2008年 6月 25日 (水) 22:06:57 JST
こんにちは。古賀ともうします。 file.utilにあるdirectory-list, directory-list2関数なの ですが、 goshのネイティブエンコードで不正になるバイト列のパス名が 存在するとエラーになってしまいます。 たとえばgoshがUTF-8を使用し、しかしファイルシステムは EUC-JPといった 場合です。 string-appendで不完全文字列のまま結合してsys-readdirな どすれば問題無い ので、理由を追ってみました。 それで、directory-listの中で得られたエントリをsort しているため、ここで 完全文字列と不完全文字列の比較が発生してエラーになっているよ うです。 提案なのですがdirectory-listのsort関数を外部から 与えられるように、または ソートしない指示をオプション指定できるようにできないでしょうか。 同じくbuild-pathについても不完全文字列を与えるとエラー になってしまいます。 こっちは中でrelative-path?の判定をするときに正規表現と のマッチでエラーが 発生しています。 ここは、不完全文字列の場合はバイト列として先頭バイトがスラッ シュでないかどうか 見てくれるとありがたいのに、と思いました。 パス名のエンコードの不一致だけでなく単にパス名のバイト列が壊 れていて 不完全文字列になった場合にも同様に意図せずエラーになるので、 不完全文字列の 場合もエラーにせず処理を継続しやすい方法が欲しいと思ったしだ いです。 ただ気楽にプログラムしているときは、パス名は完全文字列として 普通に操作したい ですし、しかしstatする段ではバイト列として正確な情報を 保持しておきたいので、 人間用の表示の顔とOS用の顔を持ったパス名オブジェクトであってく れたらいいのかな などとつらつら考えていました。 パス名の文字コードの処理で皆さんハマったりはしていないので しょうか。