Order of Directory Records
Jolietのテストをしていて、RecordNow DXがJoliet仕様と違う出力をする場合があることに気が付きました。
ISO 9660ではディレクトリエントリの情報を予めソートした状態で格納します。
各エントリには「ベース名.拡張子;バージョン番号」形式のファイルIDが割り当てられ、基本的にはこれがソートの基準になります。
ソートの際にはファイルIDを文字列としてそのまま比較するのではなく、「ベース名→拡張子→バージョン番号」の順に区切って比較します。
このとき、ベース名や拡張子の長さが合わない場合は後ろに半角スペースが付け足してから比較します。
同様にバージョン番号は頭に"0"が挿入されます。
これに対し、Jolietではソートを簡単にするため、これらのパディングを全てヌル文字に置き換えています。
このルールに厳密に従うと、「a.txt」、「a-.txt」、「ab.txt」は
- a.txt
- a-.txt
- ab.txt
の順になるはずですが、RecordNowでは、
- a-.txt
- a.txt
- ab.txt
の順になります。
これは明らかにベース名と拡張子を分けずにソートしています。
RecordNowのバグだろうと思って、UNIXで一般的なmkisofsでも試してみましたが同じでした。
どうもこの順序が普通のようなので、仕方なく合わせることにしました。
iso9660_file_source_impl.hppの差分
joliet_id.hppの差分
ソート済みであることは期待しないで自前でソートしなおしたほうがいいのかも知れません。