Mona が長いファイル名と Unicode ファイル名に対応

Mona がサポートしているファイルシステム

で前者 2 つはともにファイル名が 8.3 形式という仕様上の制限がある。


今まで特にこれで困らなかったのだけど、Mosh を移植したら fast-method-cache.mosh.ss みたいなファイル名があって限界を感じた。
Mosh 関連のファイルを制限のない Ram FS に置く事も考えたけど、どうも逃げっぽいので長いファイル名対応をする事に。


調べてみると ISO9660 の Level 2 で 30 文字くらいのファイル名サポートが入っている。ただし今回はもっと長いファイル名があるのでこれではだめ。
そこで Joliet に対応する事にした。

Microsoft社が提唱しているCD-ROMの論理フォーマットの一つで、最大64文字までのロングファイルネームに対応した方式。
...
Jolietでは1文字2バイトで表現するUnicodeを採用し、128バイト(64文字)までの長いファイル名をつけることができる。ISO 9660の上位互換になっており、8.3形式のファイル名も同時に記録するため、ロングファイルネームに対応していないシステムでも読み出すことができる。

http://e-words.jp/w/Joliet.html


仕様書を読んだらすぐに実装できた。

  • Primary Volume Descriptor の代わりに、Supplementary Volume Descriptor を読む
  • ファイル名が UCS2 で記録されている

これだけ。


Joliet の仕様を考えた人にセンスを感じる。ISO9660 の拡張を考慮した仕様をきちんと理解した上で、上位互換を保ちしかも実装が簡単。MS++。