Codaのファイル名をUTF-8にする

CodaはClient OSで使っている文字コードをそのままファイル名に使っている。これ自体は一見問題なさそうだが、異機種混在環境では大問題となる。例えば、MacOSXやほとんどLinuxディストリビューションUTF-8でファイル名をディレクトリに保存しているが、WindowosXPでは国ごとの固有の文字コード(日本ではSHIFT_JIS)で格納しているため、混在させると文字化けを起こしてしまう。今時ファイル名に日本語を使うなとは言えないし、WindowsMacかに統一するというのも乱暴だ。というわけで、入院中にそういうことを解決するパッチを作っていた。

  1. ファイルの操作のうち、作成、削除、リンク作成、リネームについては固有コードからUTF-8へ変換(coda-src/venus/worker.cc)。
  2. ディレクトリ読み込みについてはUTF-8から固有コードに変換(coda-src/dir/dirbody.c)。
  3. 実際の変換モジュールはutilに切り出し(coda-src/util/utf8.[ch])。
  4. 文字コードきりかえは、venus.confから行い、native_encoding=HOGEならHOGEUTF-8で相互変換(venus.cc)。上記の設定がない場合や途中で変換が失敗した場合には、無変換。

現在分かっている問題点は、shift-jisで半角仮名だけのファイル名を使った場合、1byteが3byteになってしまうが、変換バッファを2倍しか確保していない点(直せよ)。直したかったが直す前に
#1655 (convert from Shift-JIS to UTF-8 patch) – Coda Distributed File System に投げてしまった。
また、Windows Clientでのhoardが怪しいが、元の6.9.3でもうまくhoarding出来なかったのでよくわからん。