適当に翻訳する。
mkisofs の管理者様へ
84000 程度のディレクトリを持つ CD-ROM イメージを書き込もうとすると、2 の 16 乗のディレクトリ数上限にぶつかる。これは write.c 文書の以下に抜粋した部分に因る。
/*
* ここから経路表に書き込んでいく。ルート・ディレクトリから始める。
*/
if (next_path_index > 0xffff) {
#ifdef USE_LIBSCHILY
comerrno(EX_BAD,
"Unable to generate sane path tables - too many directories (%d)\n",
next_path_index);
「sane」という語に注意。無効という意味ではない。
疑問:この現象は ISO 9660 標準仕様に基づくものなのか、そうでない何かなのか。ISO 9660 形式のデータと大量のディレクトリを持つ DVD ではどうなのか。
「if (next_path_index > 0xffff)」という検査を単純に飛ばしたらどうなるか。
全ての教示と cdrtools 開発に捧げられた素晴らしい仕事とに、先に礼を述べておく。
「directory」構造体の「path_index」は unsigned short で定義されており、65536 が上限。(mkisofs.h を参照)
「path_index」は経路表(path table)で利用される。これは iso9660.h で定義されていて、親ディレクトリの ID を示すのに 2 バイトしか使えない。次のサイトの 9.4 節「経路表の単位の形式」も参照。
http://www.y-adagio.com/public/standards/iso_cdromr/sect_2.htm
James Pearson
訳註:「directory」構造体の「path_index」は現在(cdrtools-3.00)、 unsigned int で定義されている(mkisofs.h にて)。0xffff の判定は健在(write.c にて)で、ディレクトリは 65536 個までしか使えない。
「iso_path_table」構造体(iso9660.h にて)
struct iso_path_table {
unsigned char name_len[2]; /* 721 */
char extent[4]; /* 731 */
char parent[2]; /* 721 */
char name[1];
};
カレンダー
カテゴリー
最新コメント
最新記事
ブログ内検索
広告