ISOファイル出力の構想
ISO 9660の出力で難しいのはパステーブルとディレクトリーレコードの管理です。
以前実装したiso9660_file_sinkでは、エントリを追加するたびにパステーブル内の順序を調整していました。
Rock Ridgeの対応を考えた場合、ディレクトリのリロケートをいつ行うべきかという問題が加わります。
深いディレクトリエントリが追加されたその場でリロケートを行うと、そのディレクトリ配下へのエントリ追加に備え、移動前後のパスの対応表を管理する必要がでてきます。
また、ISO 9660で表現できないファイル名は適当な名前を振り直す必要があり、先に振り直してしまうと後で追加したファイル名とバッティングしてしまう可能性があります。
こうしたことから、ディレクトリのリロケートやファイル名の振り直しの処理はすべてのエントリが揃ってから行ったほうがよさそうです。
エントリを追加するたびに、
- ファイル名のままレコード追加
- ファイル名のままパステーブルをソート
エントリが揃ったら、
のようにしようと思います。
現在、パステーブル内のリンクはインデックスによる指定になっていますが、あとでソートすることを考えるとポインタに変更したほうがよさそうです。