ディレクトリレコード・改
まだ続いている、ディレクトリレコードとの格闘。
で、少し手直しした内容が、まぁ、こんな感じ。
typedef struct ISO_DR_t { uint8 Length; // [0000] このディレクトリのデータ長 uint8 ExtLength; // [0001] 拡張属性レコードのデータ長 // uint32both Location; // [0002] エクステントの位置 uint32 LocationL; // [0002] エクステントの位置 uint32 LocationB; // [0006] エクステントの位置 // uint32both DataLength; // [0010] データ長 uint32 DataLengthL; // [0010] データ長 uint32 DataLengthB; // [0014] データ長 ISO9660_DateTimeShort RecordingDateTime; // [0018] 記録日時 byte FileFlags; // [0025] ファイルフラグ uint8 FileUnitSize; // [0026] ファイルユニットサイズ uint8 InterleaveGapSize; // [0027] インターリーブギャップサイズ // uint16both SequenceNumber; // [0028] シーケンスナンバー uint16 SequenceNumberL; // [0028] シーケンスナンバー uint16 SequenceNumberB; // [0030] シーケンスナンバー uint8 FileIdentifierLength; // [0032] ファイル識別子の長さ // fileid FileIdentifier[]; // [0033] ファイル識別子 } __attribute__( (aligned(1), packed) ) ISO_DR;
ファイル識別子は、可変長なので、メンバには含めていない。
で、更に、ファイル識別子が奇数バイトの場合、
パディングを加えて、偶数サイズにする事になっている。
FileIdentifierLengthまでで33Byte。
ルートディレクトリの場合などは、1バイトの特殊な識別子を使うわけだけど、
この場合、識別子1バイトで、全体で偶数になるので、34Byteぽっきり... のはず。
でも、実際にルートディレクトリのディレクトリレコードを覗いてみると、Length = 136。
102Byteは、何に使っているのか、今のところ不明。
ただ、規格上、この後に、システム用途の領域が用意されている。
ISO 9660 を拡張した規格の何れかで、この領域を使用しているのかもしれない。
とりあえず、気にはなるけど、保留。
後で調べよう。