Order of Directory Records

Jolietのテストをしていて、RecordNow DXがJoliet仕様と違う出力をする場合があることに気が付きました。


ISO 9660ではディレクトリエントリの情報を予めソートした状態で格納します。
各エントリには「ベース名.拡張子;バージョン番号」形式のファイルIDが割り当てられ、基本的にはこれがソートの基準になります。
ソートの際にはファイルIDを文字列としてそのまま比較するのではなく、「ベース名→拡張子→バージョン番号」の順に区切って比較します。
このとき、ベース名や拡張子の長さが合わない場合は後ろに半角スペースが付け足してから比較します。
同様にバージョン番号は頭に"0"が挿入されます。


これに対し、Jolietではソートを簡単にするため、これらのパディングを全てヌル文字に置き換えています。
このルールに厳密に従うと、「a.txt」、「a-.txt」、「ab.txt」は

  1. a.txt
  2. a-.txt
  3. ab.txt

の順になるはずですが、RecordNowでは、

  1. a-.txt
  2. a.txt
  3. ab.txt

の順になります。
これは明らかにベース名と拡張子を分けずにソートしています。
RecordNowのバグだろうと思って、UNIXで一般的なmkisofsでも試してみましたが同じでした。


どうもこの順序が普通のようなので、仕方なく合わせることにしました。
iso9660_file_source_impl.hppの差分
joliet_id.hppの差分
ソート済みであることは期待しないで自前でソートしなおしたほうがいいのかも知れません。