Rock Ridgeを含めた共通化

昨日はrock_ridge_file_sourceをとりあえず作ったわけですが、ほとんどiso9660_file_sourceと同じ処理ですから、うまく共通化できないものかと考えています。
Rock Ridgeの深いディレクトリ階層を実装した感触からすると、

  1. ボリューム記述子のパース(共通)
  2. パステーブル、ディレクトリレコードのパース
  3. ディレクトリのトラバース

の3つに分離すればよさそうです。


イメージとしては、

  • 論理ブロック番号でディレクトリを選択する
  • 選択されたディレクトリ内の各エントリにランダムにアクセスできるようにする
  • 現在パスとして扱っている箇所をファイル名だけにする

という感じにして、親のパスやディレクトリのトラバースを分離することを考えています。


あと、ISO 9660とJolietの場合はパステーブルが使えるので、特定のディレクトリに高速にアクセスできるのですが、Rock Ridgeの場合はルートから順に辿るしかないためパスを指定してランダムにアクセスすることはできません。
この特性の違いをどう扱うかも悩みどころです。
速度は気にせず、まずは実装してみます。