ディレクトリレコード・改

まだ続いている、ディレクトリレコードとの格闘。
で、少し手直しした内容が、まぁ、こんな感じ。

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 を拡張した規格の何れかで、この領域を使用しているのかもしれない。
とりあえず、気にはなるけど、保留。


後で調べよう。