Mona が長いファイル名と Unicode ファイル名に対応
で前者 2 つはともにファイル名が 8.3 形式という仕様上の制限がある。
今まで特にこれで困らなかったのだけど、Mosh を移植したら fast-method-cache.mosh.ss みたいなファイル名があって限界を感じた。
Mosh 関連のファイルを制限のない Ram FS に置く事も考えたけど、どうも逃げっぽいので長いファイル名対応をする事に。
調べてみると ISO9660 の Level 2 で 30 文字くらいのファイル名サポートが入っている。ただし今回はもっと長いファイル名があるのでこれではだめ。
そこで Joliet に対応する事にした。
Microsoft社が提唱しているCD-ROMの論理フォーマットの一つで、最大64文字までのロングファイルネームに対応した方式。
http://e-words.jp/w/Joliet.html
...
Jolietでは1文字2バイトで表現するUnicodeを採用し、128バイト(64文字)までの長いファイル名をつけることができる。ISO 9660の上位互換になっており、8.3形式のファイル名も同時に記録するため、ロングファイルネームに対応していないシステムでも読み出すことができる。
仕様書を読んだらすぐに実装できた。
- Primary Volume Descriptor の代わりに、Supplementary Volume Descriptor を読む
- ファイル名が UCS2 で記録されている
これだけ。
Joliet の仕様を考えた人にセンスを感じる。ISO9660 の拡張を考慮した仕様をきちんと理解した上で、上位互換を保ちしかも実装が簡単。MS++。