2008-11-26

2008-11-15

file.utilの日本語ファイル名の扱い

;; pathに不完全文字列になるエントリがあるとエラー
(directory-list path)

;; 低レベルならエラーになる処理は含まれない
(sys-readdir path)

Gaucheのfile.utilは0.8.14の現時点では、パスがASCII以外でエンコードされているケースを考慮してないので、CP932などでエンコードされたパスを処理する場合、エラーになることがある。具体的には、パスにGaucheの内部エンコードで許されないバイト表現が含まれる場合。パスは不完全文字列として処理されるけど、不完全文字列には許されない処理をfile.utilの各関数内部でしているため、エラーになる。

他の人が原因を見つけてそうだな、と思いながらも、コードを読んで原因を見つけたところで、やっぱり他の人が原因を見つけていたのを知った。Gauche-devel-jpメーリングリスト「パス名での不完全文字列の扱い」というメールに詳しい。徒労だ。