aboutsummaryrefslogtreecommitdiffstats
path: root/fs/udf/ecma_167.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/udf/ecma_167.h')
-rw-r--r--fs/udf/ecma_167.h684
1 files changed, 342 insertions, 342 deletions
diff --git a/fs/udf/ecma_167.h b/fs/udf/ecma_167.h
index 294ce2daa03a..56387711589b 100644
--- a/fs/udf/ecma_167.h
+++ b/fs/udf/ecma_167.h
@@ -39,8 +39,8 @@
39 39
40/* Character set specification (ECMA 167r3 1/7.2.1) */ 40/* Character set specification (ECMA 167r3 1/7.2.1) */
41typedef struct { 41typedef struct {
42 uint8_t charSetType; 42 uint8_t charSetType;
43 uint8_t charSetInfo[63]; 43 uint8_t charSetInfo[63];
44} __attribute__ ((packed)) charspec; 44} __attribute__ ((packed)) charspec;
45 45
46/* Character Set Type (ECMA 167r3 1/7.2.1.1) */ 46/* Character Set Type (ECMA 167r3 1/7.2.1.1) */
@@ -54,33 +54,33 @@ typedef struct {
54#define CHARSPEC_TYPE_CS7 0x07 /* (1/7.2.9) */ 54#define CHARSPEC_TYPE_CS7 0x07 /* (1/7.2.9) */
55#define CHARSPEC_TYPE_CS8 0x08 /* (1/7.2.10) */ 55#define CHARSPEC_TYPE_CS8 0x08 /* (1/7.2.10) */
56 56
57typedef uint8_t dstring; 57typedef uint8_t dstring;
58 58
59/* Timestamp (ECMA 167r3 1/7.3) */ 59/* Timestamp (ECMA 167r3 1/7.3) */
60typedef struct { 60typedef struct {
61 __le16 typeAndTimezone; 61 __le16 typeAndTimezone;
62 __le16 year; 62 __le16 year;
63 uint8_t month; 63 uint8_t month;
64 uint8_t day; 64 uint8_t day;
65 uint8_t hour; 65 uint8_t hour;
66 uint8_t minute; 66 uint8_t minute;
67 uint8_t second; 67 uint8_t second;
68 uint8_t centiseconds; 68 uint8_t centiseconds;
69 uint8_t hundredsOfMicroseconds; 69 uint8_t hundredsOfMicroseconds;
70 uint8_t microseconds; 70 uint8_t microseconds;
71} __attribute__ ((packed)) timestamp; 71} __attribute__ ((packed)) timestamp;
72 72
73typedef struct { 73typedef struct {
74 uint16_t typeAndTimezone; 74 uint16_t typeAndTimezone;
75 int16_t year; 75 int16_t year;
76 uint8_t month; 76 uint8_t month;
77 uint8_t day; 77 uint8_t day;
78 uint8_t hour; 78 uint8_t hour;
79 uint8_t minute; 79 uint8_t minute;
80 uint8_t second; 80 uint8_t second;
81 uint8_t centiseconds; 81 uint8_t centiseconds;
82 uint8_t hundredsOfMicroseconds; 82 uint8_t hundredsOfMicroseconds;
83 uint8_t microseconds; 83 uint8_t microseconds;
84} __attribute__ ((packed)) kernel_timestamp; 84} __attribute__ ((packed)) kernel_timestamp;
85 85
86/* Type and Time Zone (ECMA 167r3 1/7.3.1) */ 86/* Type and Time Zone (ECMA 167r3 1/7.3.1) */
@@ -92,9 +92,9 @@ typedef struct {
92 92
93/* Entity identifier (ECMA 167r3 1/7.4) */ 93/* Entity identifier (ECMA 167r3 1/7.4) */
94typedef struct { 94typedef struct {
95 uint8_t flags; 95 uint8_t flags;
96 uint8_t ident[23]; 96 uint8_t ident[23];
97 uint8_t identSuffix[8]; 97 uint8_t identSuffix[8];
98} __attribute__ ((packed)) regid; 98} __attribute__ ((packed)) regid;
99 99
100/* Flags (ECMA 167r3 1/7.4.1) */ 100/* Flags (ECMA 167r3 1/7.4.1) */
@@ -104,10 +104,10 @@ typedef struct {
104/* Volume Structure Descriptor (ECMA 167r3 2/9.1) */ 104/* Volume Structure Descriptor (ECMA 167r3 2/9.1) */
105#define VSD_STD_ID_LEN 5 105#define VSD_STD_ID_LEN 5
106struct volStructDesc { 106struct volStructDesc {
107 uint8_t structType; 107 uint8_t structType;
108 uint8_t stdIdent[VSD_STD_ID_LEN]; 108 uint8_t stdIdent[VSD_STD_ID_LEN];
109 uint8_t structVersion; 109 uint8_t structVersion;
110 uint8_t structData[2041]; 110 uint8_t structData[2041];
111} __attribute__ ((packed)); 111} __attribute__ ((packed));
112 112
113/* Standard Identifier (EMCA 167r2 2/9.1.2) */ 113/* Standard Identifier (EMCA 167r2 2/9.1.2) */
@@ -123,36 +123,36 @@ struct volStructDesc {
123 123
124/* Beginning Extended Area Descriptor (ECMA 167r3 2/9.2) */ 124/* Beginning Extended Area Descriptor (ECMA 167r3 2/9.2) */
125struct beginningExtendedAreaDesc { 125struct beginningExtendedAreaDesc {
126 uint8_t structType; 126 uint8_t structType;
127 uint8_t stdIdent[VSD_STD_ID_LEN]; 127 uint8_t stdIdent[VSD_STD_ID_LEN];
128 uint8_t structVersion; 128 uint8_t structVersion;
129 uint8_t structData[2041]; 129 uint8_t structData[2041];
130} __attribute__ ((packed)); 130} __attribute__ ((packed));
131 131
132/* Terminating Extended Area Descriptor (ECMA 167r3 2/9.3) */ 132/* Terminating Extended Area Descriptor (ECMA 167r3 2/9.3) */
133struct terminatingExtendedAreaDesc { 133struct terminatingExtendedAreaDesc {
134 uint8_t structType; 134 uint8_t structType;
135 uint8_t stdIdent[VSD_STD_ID_LEN]; 135 uint8_t stdIdent[VSD_STD_ID_LEN];
136 uint8_t structVersion; 136 uint8_t structVersion;
137 uint8_t structData[2041]; 137 uint8_t structData[2041];
138} __attribute__ ((packed)); 138} __attribute__ ((packed));
139 139
140/* Boot Descriptor (ECMA 167r3 2/9.4) */ 140/* Boot Descriptor (ECMA 167r3 2/9.4) */
141struct bootDesc { 141struct bootDesc {
142 uint8_t structType; 142 uint8_t structType;
143 uint8_t stdIdent[VSD_STD_ID_LEN]; 143 uint8_t stdIdent[VSD_STD_ID_LEN];
144 uint8_t structVersion; 144 uint8_t structVersion;
145 uint8_t reserved1; 145 uint8_t reserved1;
146 regid archType; 146 regid archType;
147 regid bootIdent; 147 regid bootIdent;
148 __le32 bootExtLocation; 148 __le32 bootExtLocation;
149 __le32 bootExtLength; 149 __le32 bootExtLength;
150 __le64 loadAddress; 150 __le64 loadAddress;
151 __le64 startAddress; 151 __le64 startAddress;
152 timestamp descCreationDateAndTime; 152 timestamp descCreationDateAndTime;
153 __le16 flags; 153 __le16 flags;
154 uint8_t reserved2[32]; 154 uint8_t reserved2[32];
155 uint8_t bootUse[1906]; 155 uint8_t bootUse[1906];
156} __attribute__ ((packed)); 156} __attribute__ ((packed));
157 157
158/* Flags (ECMA 167r3 2/9.4.12) */ 158/* Flags (ECMA 167r3 2/9.4.12) */
@@ -160,25 +160,25 @@ struct bootDesc {
160 160
161/* Extent Descriptor (ECMA 167r3 3/7.1) */ 161/* Extent Descriptor (ECMA 167r3 3/7.1) */
162typedef struct { 162typedef struct {
163 __le32 extLength; 163 __le32 extLength;
164 __le32 extLocation; 164 __le32 extLocation;
165} __attribute__ ((packed)) extent_ad; 165} __attribute__ ((packed)) extent_ad;
166 166
167typedef struct { 167typedef struct {
168 uint32_t extLength; 168 uint32_t extLength;
169 uint32_t extLocation; 169 uint32_t extLocation;
170} kernel_extent_ad; 170} kernel_extent_ad;
171 171
172/* Descriptor Tag (ECMA 167r3 3/7.2) */ 172/* Descriptor Tag (ECMA 167r3 3/7.2) */
173typedef struct { 173typedef struct {
174 __le16 tagIdent; 174 __le16 tagIdent;
175 __le16 descVersion; 175 __le16 descVersion;
176 uint8_t tagChecksum; 176 uint8_t tagChecksum;
177 uint8_t reserved; 177 uint8_t reserved;
178 __le16 tagSerialNum; 178 __le16 tagSerialNum;
179 __le16 descCRC; 179 __le16 descCRC;
180 __le16 descCRCLength; 180 __le16 descCRCLength;
181 __le32 tagLocation; 181 __le32 tagLocation;
182} __attribute__ ((packed)) tag; 182} __attribute__ ((packed)) tag;
183 183
184/* Tag Identifier (ECMA 167r3 3/7.2.1) */ 184/* Tag Identifier (ECMA 167r3 3/7.2.1) */
@@ -194,37 +194,37 @@ typedef struct {
194 194
195/* NSR Descriptor (ECMA 167r3 3/9.1) */ 195/* NSR Descriptor (ECMA 167r3 3/9.1) */
196struct NSRDesc { 196struct NSRDesc {
197 uint8_t structType; 197 uint8_t structType;
198 uint8_t stdIdent[VSD_STD_ID_LEN]; 198 uint8_t stdIdent[VSD_STD_ID_LEN];
199 uint8_t structVersion; 199 uint8_t structVersion;
200 uint8_t reserved; 200 uint8_t reserved;
201 uint8_t structData[2040]; 201 uint8_t structData[2040];
202} __attribute__ ((packed)); 202} __attribute__ ((packed));
203 203
204/* Primary Volume Descriptor (ECMA 167r3 3/10.1) */ 204/* Primary Volume Descriptor (ECMA 167r3 3/10.1) */
205struct primaryVolDesc { 205struct primaryVolDesc {
206 tag descTag; 206 tag descTag;
207 __le32 volDescSeqNum; 207 __le32 volDescSeqNum;
208 __le32 primaryVolDescNum; 208 __le32 primaryVolDescNum;
209 dstring volIdent[32]; 209 dstring volIdent[32];
210 __le16 volSeqNum; 210 __le16 volSeqNum;
211 __le16 maxVolSeqNum; 211 __le16 maxVolSeqNum;
212 __le16 interchangeLvl; 212 __le16 interchangeLvl;
213 __le16 maxInterchangeLvl; 213 __le16 maxInterchangeLvl;
214 __le32 charSetList; 214 __le32 charSetList;
215 __le32 maxCharSetList; 215 __le32 maxCharSetList;
216 dstring volSetIdent[128]; 216 dstring volSetIdent[128];
217 charspec descCharSet; 217 charspec descCharSet;
218 charspec explanatoryCharSet; 218 charspec explanatoryCharSet;
219 extent_ad volAbstract; 219 extent_ad volAbstract;
220 extent_ad volCopyright; 220 extent_ad volCopyright;
221 regid appIdent; 221 regid appIdent;
222 timestamp recordingDateAndTime; 222 timestamp recordingDateAndTime;
223 regid impIdent; 223 regid impIdent;
224 uint8_t impUse[64]; 224 uint8_t impUse[64];
225 __le32 predecessorVolDescSeqLocation; 225 __le32 predecessorVolDescSeqLocation;
226 __le16 flags; 226 __le16 flags;
227 uint8_t reserved[22]; 227 uint8_t reserved[22];
228} __attribute__ ((packed)); 228} __attribute__ ((packed));
229 229
230/* Flags (ECMA 167r3 3/10.1.21) */ 230/* Flags (ECMA 167r3 3/10.1.21) */
@@ -232,26 +232,26 @@ struct primaryVolDesc {
232 232
233/* Anchor Volume Descriptor Pointer (ECMA 167r3 3/10.2) */ 233/* Anchor Volume Descriptor Pointer (ECMA 167r3 3/10.2) */
234struct anchorVolDescPtr { 234struct anchorVolDescPtr {
235 tag descTag; 235 tag descTag;
236 extent_ad mainVolDescSeqExt; 236 extent_ad mainVolDescSeqExt;
237 extent_ad reserveVolDescSeqExt; 237 extent_ad reserveVolDescSeqExt;
238 uint8_t reserved[480]; 238 uint8_t reserved[480];
239} __attribute__ ((packed)); 239} __attribute__ ((packed));
240 240
241/* Volume Descriptor Pointer (ECMA 167r3 3/10.3) */ 241/* Volume Descriptor Pointer (ECMA 167r3 3/10.3) */
242struct volDescPtr { 242struct volDescPtr {
243 tag descTag; 243 tag descTag;
244 __le32 volDescSeqNum; 244 __le32 volDescSeqNum;
245 extent_ad nextVolDescSeqExt; 245 extent_ad nextVolDescSeqExt;
246 uint8_t reserved[484]; 246 uint8_t reserved[484];
247} __attribute__ ((packed)); 247} __attribute__ ((packed));
248 248
249/* Implementation Use Volume Descriptor (ECMA 167r3 3/10.4) */ 249/* Implementation Use Volume Descriptor (ECMA 167r3 3/10.4) */
250struct impUseVolDesc { 250struct impUseVolDesc {
251 tag descTag; 251 tag descTag;
252 __le32 volDescSeqNum; 252 __le32 volDescSeqNum;
253 regid impIdent; 253 regid impIdent;
254 uint8_t impUse[460]; 254 uint8_t impUse[460];
255} __attribute__ ((packed)); 255} __attribute__ ((packed));
256 256
257/* Partition Descriptor (ECMA 167r3 3/10.5) */ 257/* Partition Descriptor (ECMA 167r3 3/10.5) */
@@ -291,26 +291,26 @@ struct partitionDesc {
291 291
292/* Logical Volume Descriptor (ECMA 167r3 3/10.6) */ 292/* Logical Volume Descriptor (ECMA 167r3 3/10.6) */
293struct logicalVolDesc { 293struct logicalVolDesc {
294 tag descTag; 294 tag descTag;
295 __le32 volDescSeqNum; 295 __le32 volDescSeqNum;
296 charspec descCharSet; 296 charspec descCharSet;
297 dstring logicalVolIdent[128]; 297 dstring logicalVolIdent[128];
298 __le32 logicalBlockSize; 298 __le32 logicalBlockSize;
299 regid domainIdent; 299 regid domainIdent;
300 uint8_t logicalVolContentsUse[16]; 300 uint8_t logicalVolContentsUse[16];
301 __le32 mapTableLength; 301 __le32 mapTableLength;
302 __le32 numPartitionMaps; 302 __le32 numPartitionMaps;
303 regid impIdent; 303 regid impIdent;
304 uint8_t impUse[128]; 304 uint8_t impUse[128];
305 extent_ad integritySeqExt; 305 extent_ad integritySeqExt;
306 uint8_t partitionMaps[0]; 306 uint8_t partitionMaps[0];
307} __attribute__ ((packed)); 307} __attribute__ ((packed));
308 308
309/* Generic Partition Map (ECMA 167r3 3/10.7.1) */ 309/* Generic Partition Map (ECMA 167r3 3/10.7.1) */
310struct genericPartitionMap { 310struct genericPartitionMap {
311 uint8_t partitionMapType; 311 uint8_t partitionMapType;
312 uint8_t partitionMapLength; 312 uint8_t partitionMapLength;
313 uint8_t partitionMapping[0]; 313 uint8_t partitionMapping[0];
314} __attribute__ ((packed)); 314} __attribute__ ((packed));
315 315
316/* Partition Map Type (ECMA 167r3 3/10.7.1.1) */ 316/* Partition Map Type (ECMA 167r3 3/10.7.1.1) */
@@ -320,45 +320,45 @@ struct genericPartitionMap {
320 320
321/* Type 1 Partition Map (ECMA 167r3 3/10.7.2) */ 321/* Type 1 Partition Map (ECMA 167r3 3/10.7.2) */
322struct genericPartitionMap1 { 322struct genericPartitionMap1 {
323 uint8_t partitionMapType; 323 uint8_t partitionMapType;
324 uint8_t partitionMapLength; 324 uint8_t partitionMapLength;
325 __le16 volSeqNum; 325 __le16 volSeqNum;
326 __le16 partitionNum; 326 __le16 partitionNum;
327} __attribute__ ((packed)); 327} __attribute__ ((packed));
328 328
329/* Type 2 Partition Map (ECMA 167r3 3/10.7.3) */ 329/* Type 2 Partition Map (ECMA 167r3 3/10.7.3) */
330struct genericPartitionMap2 { 330struct genericPartitionMap2 {
331 uint8_t partitionMapType; 331 uint8_t partitionMapType;
332 uint8_t partitionMapLength; 332 uint8_t partitionMapLength;
333 uint8_t partitionIdent[62]; 333 uint8_t partitionIdent[62];
334} __attribute__ ((packed)); 334} __attribute__ ((packed));
335 335
336/* Unallocated Space Descriptor (ECMA 167r3 3/10.8) */ 336/* Unallocated Space Descriptor (ECMA 167r3 3/10.8) */
337struct unallocSpaceDesc { 337struct unallocSpaceDesc {
338 tag descTag; 338 tag descTag;
339 __le32 volDescSeqNum; 339 __le32 volDescSeqNum;
340 __le32 numAllocDescs; 340 __le32 numAllocDescs;
341 extent_ad allocDescs[0]; 341 extent_ad allocDescs[0];
342} __attribute__ ((packed)); 342} __attribute__ ((packed));
343 343
344/* Terminating Descriptor (ECMA 167r3 3/10.9) */ 344/* Terminating Descriptor (ECMA 167r3 3/10.9) */
345struct terminatingDesc { 345struct terminatingDesc {
346 tag descTag; 346 tag descTag;
347 uint8_t reserved[496]; 347 uint8_t reserved[496];
348} __attribute__ ((packed)); 348} __attribute__ ((packed));
349 349
350/* Logical Volume Integrity Descriptor (ECMA 167r3 3/10.10) */ 350/* Logical Volume Integrity Descriptor (ECMA 167r3 3/10.10) */
351struct logicalVolIntegrityDesc { 351struct logicalVolIntegrityDesc {
352 tag descTag; 352 tag descTag;
353 timestamp recordingDateAndTime; 353 timestamp recordingDateAndTime;
354 __le32 integrityType; 354 __le32 integrityType;
355 extent_ad nextIntegrityExt; 355 extent_ad nextIntegrityExt;
356 uint8_t logicalVolContentsUse[32]; 356 uint8_t logicalVolContentsUse[32];
357 __le32 numOfPartitions; 357 __le32 numOfPartitions;
358 __le32 lengthOfImpUse; 358 __le32 lengthOfImpUse;
359 __le32 freeSpaceTable[0]; 359 __le32 freeSpaceTable[0];
360 __le32 sizeTable[0]; 360 __le32 sizeTable[0];
361 uint8_t impUse[0]; 361 uint8_t impUse[0];
362} __attribute__ ((packed)); 362} __attribute__ ((packed));
363 363
364/* Integrity Type (ECMA 167r3 3/10.10.3) */ 364/* Integrity Type (ECMA 167r3 3/10.10.3) */
@@ -367,48 +367,48 @@ struct logicalVolIntegrityDesc {
367 367
368/* Recorded Address (ECMA 167r3 4/7.1) */ 368/* Recorded Address (ECMA 167r3 4/7.1) */
369typedef struct { 369typedef struct {
370 __le32 logicalBlockNum; 370 __le32 logicalBlockNum;
371 __le16 partitionReferenceNum; 371 __le16 partitionReferenceNum;
372} __attribute__ ((packed)) lb_addr; 372} __attribute__ ((packed)) lb_addr;
373 373
374/* ... and its in-core analog */ 374/* ... and its in-core analog */
375typedef struct { 375typedef struct {
376 uint32_t logicalBlockNum; 376 uint32_t logicalBlockNum;
377 uint16_t partitionReferenceNum; 377 uint16_t partitionReferenceNum;
378} kernel_lb_addr; 378} kernel_lb_addr;
379 379
380/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */ 380/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */
381typedef struct { 381typedef struct {
382 __le32 extLength; 382 __le32 extLength;
383 __le32 extPosition; 383 __le32 extPosition;
384} __attribute__ ((packed)) short_ad; 384} __attribute__ ((packed)) short_ad;
385 385
386/* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */ 386/* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */
387typedef struct { 387typedef struct {
388 __le32 extLength; 388 __le32 extLength;
389 lb_addr extLocation; 389 lb_addr extLocation;
390 uint8_t impUse[6]; 390 uint8_t impUse[6];
391} __attribute__ ((packed)) long_ad; 391} __attribute__ ((packed)) long_ad;
392 392
393typedef struct { 393typedef struct {
394 uint32_t extLength; 394 uint32_t extLength;
395 kernel_lb_addr extLocation; 395 kernel_lb_addr extLocation;
396 uint8_t impUse[6]; 396 uint8_t impUse[6];
397} kernel_long_ad; 397} kernel_long_ad;
398 398
399/* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */ 399/* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */
400typedef struct { 400typedef struct {
401 __le32 extLength; 401 __le32 extLength;
402 __le32 recordedLength; 402 __le32 recordedLength;
403 __le32 informationLength; 403 __le32 informationLength;
404 lb_addr extLocation; 404 lb_addr extLocation;
405} __attribute__ ((packed)) ext_ad; 405} __attribute__ ((packed)) ext_ad;
406 406
407typedef struct { 407typedef struct {
408 uint32_t extLength; 408 uint32_t extLength;
409 uint32_t recordedLength; 409 uint32_t recordedLength;
410 uint32_t informationLength; 410 uint32_t informationLength;
411 kernel_lb_addr extLocation; 411 kernel_lb_addr extLocation;
412} kernel_ext_ad; 412} kernel_ext_ad;
413 413
414/* Descriptor Tag (ECMA 167r3 4/7.2 - See 3/7.2) */ 414/* Descriptor Tag (ECMA 167r3 4/7.2 - See 3/7.2) */
@@ -428,48 +428,48 @@ typedef struct {
428 428
429/* File Set Descriptor (ECMA 167r3 4/14.1) */ 429/* File Set Descriptor (ECMA 167r3 4/14.1) */
430struct fileSetDesc { 430struct fileSetDesc {
431 tag descTag; 431 tag descTag;
432 timestamp recordingDateAndTime; 432 timestamp recordingDateAndTime;
433 __le16 interchangeLvl; 433 __le16 interchangeLvl;
434 __le16 maxInterchangeLvl; 434 __le16 maxInterchangeLvl;
435 __le32 charSetList; 435 __le32 charSetList;
436 __le32 maxCharSetList; 436 __le32 maxCharSetList;
437 __le32 fileSetNum; 437 __le32 fileSetNum;
438 __le32 fileSetDescNum; 438 __le32 fileSetDescNum;
439 charspec logicalVolIdentCharSet; 439 charspec logicalVolIdentCharSet;
440 dstring logicalVolIdent[128]; 440 dstring logicalVolIdent[128];
441 charspec fileSetCharSet; 441 charspec fileSetCharSet;
442 dstring fileSetIdent[32]; 442 dstring fileSetIdent[32];
443 dstring copyrightFileIdent[32]; 443 dstring copyrightFileIdent[32];
444 dstring abstractFileIdent[32]; 444 dstring abstractFileIdent[32];
445 long_ad rootDirectoryICB; 445 long_ad rootDirectoryICB;
446 regid domainIdent; 446 regid domainIdent;
447 long_ad nextExt; 447 long_ad nextExt;
448 long_ad streamDirectoryICB; 448 long_ad streamDirectoryICB;
449 uint8_t reserved[32]; 449 uint8_t reserved[32];
450} __attribute__ ((packed)); 450} __attribute__ ((packed));
451 451
452/* Partition Header Descriptor (ECMA 167r3 4/14.3) */ 452/* Partition Header Descriptor (ECMA 167r3 4/14.3) */
453struct partitionHeaderDesc { 453struct partitionHeaderDesc {
454 short_ad unallocSpaceTable; 454 short_ad unallocSpaceTable;
455 short_ad unallocSpaceBitmap; 455 short_ad unallocSpaceBitmap;
456 short_ad partitionIntegrityTable; 456 short_ad partitionIntegrityTable;
457 short_ad freedSpaceTable; 457 short_ad freedSpaceTable;
458 short_ad freedSpaceBitmap; 458 short_ad freedSpaceBitmap;
459 uint8_t reserved[88]; 459 uint8_t reserved[88];
460} __attribute__ ((packed)); 460} __attribute__ ((packed));
461 461
462/* File Identifier Descriptor (ECMA 167r3 4/14.4) */ 462/* File Identifier Descriptor (ECMA 167r3 4/14.4) */
463struct fileIdentDesc { 463struct fileIdentDesc {
464 tag descTag; 464 tag descTag;
465 __le16 fileVersionNum; 465 __le16 fileVersionNum;
466 uint8_t fileCharacteristics; 466 uint8_t fileCharacteristics;
467 uint8_t lengthFileIdent; 467 uint8_t lengthFileIdent;
468 long_ad icb; 468 long_ad icb;
469 __le16 lengthOfImpUse; 469 __le16 lengthOfImpUse;
470 uint8_t impUse[0]; 470 uint8_t impUse[0];
471 uint8_t fileIdent[0]; 471 uint8_t fileIdent[0];
472 uint8_t padding[0]; 472 uint8_t padding[0];
473} __attribute__ ((packed)); 473} __attribute__ ((packed));
474 474
475/* File Characteristics (ECMA 167r3 4/14.4.3) */ 475/* File Characteristics (ECMA 167r3 4/14.4.3) */
@@ -481,21 +481,21 @@ struct fileIdentDesc {
481 481
482/* Allocation Ext Descriptor (ECMA 167r3 4/14.5) */ 482/* Allocation Ext Descriptor (ECMA 167r3 4/14.5) */
483struct allocExtDesc { 483struct allocExtDesc {
484 tag descTag; 484 tag descTag;
485 __le32 previousAllocExtLocation; 485 __le32 previousAllocExtLocation;
486 __le32 lengthAllocDescs; 486 __le32 lengthAllocDescs;
487} __attribute__ ((packed)); 487} __attribute__ ((packed));
488 488
489/* ICB Tag (ECMA 167r3 4/14.6) */ 489/* ICB Tag (ECMA 167r3 4/14.6) */
490typedef struct { 490typedef struct {
491 __le32 priorRecordedNumDirectEntries; 491 __le32 priorRecordedNumDirectEntries;
492 __le16 strategyType; 492 __le16 strategyType;
493 __le16 strategyParameter; 493 __le16 strategyParameter;
494 __le16 numEntries; 494 __le16 numEntries;
495 uint8_t reserved; 495 uint8_t reserved;
496 uint8_t fileType; 496 uint8_t fileType;
497 lb_addr parentICBLocation; 497 lb_addr parentICBLocation;
498 __le16 flags; 498 __le16 flags;
499} __attribute__ ((packed)) icbtag; 499} __attribute__ ((packed)) icbtag;
500 500
501/* Strategy Type (ECMA 167r3 4/14.6.2) */ 501/* Strategy Type (ECMA 167r3 4/14.6.2) */
@@ -541,41 +541,41 @@ typedef struct {
541 541
542/* Indirect Entry (ECMA 167r3 4/14.7) */ 542/* Indirect Entry (ECMA 167r3 4/14.7) */
543struct indirectEntry { 543struct indirectEntry {
544 tag descTag; 544 tag descTag;
545 icbtag icbTag; 545 icbtag icbTag;
546 long_ad indirectICB; 546 long_ad indirectICB;
547} __attribute__ ((packed)); 547} __attribute__ ((packed));
548 548
549/* Terminal Entry (ECMA 167r3 4/14.8) */ 549/* Terminal Entry (ECMA 167r3 4/14.8) */
550struct terminalEntry { 550struct terminalEntry {
551 tag descTag; 551 tag descTag;
552 icbtag icbTag; 552 icbtag icbTag;
553} __attribute__ ((packed)); 553} __attribute__ ((packed));
554 554
555/* File Entry (ECMA 167r3 4/14.9) */ 555/* File Entry (ECMA 167r3 4/14.9) */
556struct fileEntry { 556struct fileEntry {
557 tag descTag; 557 tag descTag;
558 icbtag icbTag; 558 icbtag icbTag;
559 __le32 uid; 559 __le32 uid;
560 __le32 gid; 560 __le32 gid;
561 __le32 permissions; 561 __le32 permissions;
562 __le16 fileLinkCount; 562 __le16 fileLinkCount;
563 uint8_t recordFormat; 563 uint8_t recordFormat;
564 uint8_t recordDisplayAttr; 564 uint8_t recordDisplayAttr;
565 __le32 recordLength; 565 __le32 recordLength;
566 __le64 informationLength; 566 __le64 informationLength;
567 __le64 logicalBlocksRecorded; 567 __le64 logicalBlocksRecorded;
568 timestamp accessTime; 568 timestamp accessTime;
569 timestamp modificationTime; 569 timestamp modificationTime;
570 timestamp attrTime; 570 timestamp attrTime;
571 __le32 checkpoint; 571 __le32 checkpoint;
572 long_ad extendedAttrICB; 572 long_ad extendedAttrICB;
573 regid impIdent; 573 regid impIdent;
574 __le64 uniqueID; 574 __le64 uniqueID;
575 __le32 lengthExtendedAttr; 575 __le32 lengthExtendedAttr;
576 __le32 lengthAllocDescs; 576 __le32 lengthAllocDescs;
577 uint8_t extendedAttr[0]; 577 uint8_t extendedAttr[0];
578 uint8_t allocDescs[0]; 578 uint8_t allocDescs[0];
579} __attribute__ ((packed)); 579} __attribute__ ((packed));
580 580
581/* Permissions (ECMA 167r3 4/14.9.5) */ 581/* Permissions (ECMA 167r3 4/14.9.5) */
@@ -617,51 +617,51 @@ struct fileEntry {
617 617
618/* Extended Attribute Header Descriptor (ECMA 167r3 4/14.10.1) */ 618/* Extended Attribute Header Descriptor (ECMA 167r3 4/14.10.1) */
619struct extendedAttrHeaderDesc { 619struct extendedAttrHeaderDesc {
620 tag descTag; 620 tag descTag;
621 __le32 impAttrLocation; 621 __le32 impAttrLocation;
622 __le32 appAttrLocation; 622 __le32 appAttrLocation;
623} __attribute__ ((packed)); 623} __attribute__ ((packed));
624 624
625/* Generic Format (ECMA 167r3 4/14.10.2) */ 625/* Generic Format (ECMA 167r3 4/14.10.2) */
626struct genericFormat { 626struct genericFormat {
627 __le32 attrType; 627 __le32 attrType;
628 uint8_t attrSubtype; 628 uint8_t attrSubtype;
629 uint8_t reserved[3]; 629 uint8_t reserved[3];
630 __le32 attrLength; 630 __le32 attrLength;
631 uint8_t attrData[0]; 631 uint8_t attrData[0];
632} __attribute__ ((packed)); 632} __attribute__ ((packed));
633 633
634/* Character Set Information (ECMA 167r3 4/14.10.3) */ 634/* Character Set Information (ECMA 167r3 4/14.10.3) */
635struct charSetInfo { 635struct charSetInfo {
636 __le32 attrType; 636 __le32 attrType;
637 uint8_t attrSubtype; 637 uint8_t attrSubtype;
638 uint8_t reserved[3]; 638 uint8_t reserved[3];
639 __le32 attrLength; 639 __le32 attrLength;
640 __le32 escapeSeqLength; 640 __le32 escapeSeqLength;
641 uint8_t charSetType; 641 uint8_t charSetType;
642 uint8_t escapeSeq[0]; 642 uint8_t escapeSeq[0];
643} __attribute__ ((packed)); 643} __attribute__ ((packed));
644 644
645/* Alternate Permissions (ECMA 167r3 4/14.10.4) */ 645/* Alternate Permissions (ECMA 167r3 4/14.10.4) */
646struct altPerms { 646struct altPerms {
647 __le32 attrType; 647 __le32 attrType;
648 uint8_t attrSubtype; 648 uint8_t attrSubtype;
649 uint8_t reserved[3]; 649 uint8_t reserved[3];
650 __le32 attrLength; 650 __le32 attrLength;
651 __le16 ownerIdent; 651 __le16 ownerIdent;
652 __le16 groupIdent; 652 __le16 groupIdent;
653 __le16 permission; 653 __le16 permission;
654} __attribute__ ((packed)); 654} __attribute__ ((packed));
655 655
656/* File Times Extended Attribute (ECMA 167r3 4/14.10.5) */ 656/* File Times Extended Attribute (ECMA 167r3 4/14.10.5) */
657struct fileTimesExtAttr { 657struct fileTimesExtAttr {
658 __le32 attrType; 658 __le32 attrType;
659 uint8_t attrSubtype; 659 uint8_t attrSubtype;
660 uint8_t reserved[3]; 660 uint8_t reserved[3];
661 __le32 attrLength; 661 __le32 attrLength;
662 __le32 dataLength; 662 __le32 dataLength;
663 __le32 fileTimeExistence; 663 __le32 fileTimeExistence;
664 uint8_t fileTimes; 664 uint8_t fileTimes;
665} __attribute__ ((packed)); 665} __attribute__ ((packed));
666 666
667/* FileTimeExistence (ECMA 167r3 4/14.10.5.6) */ 667/* FileTimeExistence (ECMA 167r3 4/14.10.5.6) */
@@ -672,47 +672,47 @@ struct fileTimesExtAttr {
672 672
673/* Information Times Extended Attribute (ECMA 167r3 4/14.10.6) */ 673/* Information Times Extended Attribute (ECMA 167r3 4/14.10.6) */
674struct infoTimesExtAttr { 674struct infoTimesExtAttr {
675 __le32 attrType; 675 __le32 attrType;
676 uint8_t attrSubtype; 676 uint8_t attrSubtype;
677 uint8_t reserved[3]; 677 uint8_t reserved[3];
678 __le32 attrLength; 678 __le32 attrLength;
679 __le32 dataLength; 679 __le32 dataLength;
680 __le32 infoTimeExistence; 680 __le32 infoTimeExistence;
681 uint8_t infoTimes[0]; 681 uint8_t infoTimes[0];
682} __attribute__ ((packed)); 682} __attribute__ ((packed));
683 683
684/* Device Specification (ECMA 167r3 4/14.10.7) */ 684/* Device Specification (ECMA 167r3 4/14.10.7) */
685struct deviceSpec { 685struct deviceSpec {
686 __le32 attrType; 686 __le32 attrType;
687 uint8_t attrSubtype; 687 uint8_t attrSubtype;
688 uint8_t reserved[3]; 688 uint8_t reserved[3];
689 __le32 attrLength; 689 __le32 attrLength;
690 __le32 impUseLength; 690 __le32 impUseLength;
691 __le32 majorDeviceIdent; 691 __le32 majorDeviceIdent;
692 __le32 minorDeviceIdent; 692 __le32 minorDeviceIdent;
693 uint8_t impUse[0]; 693 uint8_t impUse[0];
694} __attribute__ ((packed)); 694} __attribute__ ((packed));
695 695
696/* Implementation Use Extended Attr (ECMA 167r3 4/14.10.8) */ 696/* Implementation Use Extended Attr (ECMA 167r3 4/14.10.8) */
697struct impUseExtAttr { 697struct impUseExtAttr {
698 __le32 attrType; 698 __le32 attrType;
699 uint8_t attrSubtype; 699 uint8_t attrSubtype;
700 uint8_t reserved[3]; 700 uint8_t reserved[3];
701 __le32 attrLength; 701 __le32 attrLength;
702 __le32 impUseLength; 702 __le32 impUseLength;
703 regid impIdent; 703 regid impIdent;
704 uint8_t impUse[0]; 704 uint8_t impUse[0];
705} __attribute__ ((packed)); 705} __attribute__ ((packed));
706 706
707/* Application Use Extended Attribute (ECMA 167r3 4/14.10.9) */ 707/* Application Use Extended Attribute (ECMA 167r3 4/14.10.9) */
708struct appUseExtAttr { 708struct appUseExtAttr {
709 __le32 attrType; 709 __le32 attrType;
710 uint8_t attrSubtype; 710 uint8_t attrSubtype;
711 uint8_t reserved[3]; 711 uint8_t reserved[3];
712 __le32 attrLength; 712 __le32 attrLength;
713 __le32 appUseLength; 713 __le32 appUseLength;
714 regid appIdent; 714 regid appIdent;
715 uint8_t appUse[0]; 715 uint8_t appUse[0];
716} __attribute__ ((packed)); 716} __attribute__ ((packed));
717 717
718#define EXTATTR_CHAR_SET 1 718#define EXTATTR_CHAR_SET 1
@@ -725,29 +725,29 @@ struct appUseExtAttr {
725 725
726/* Unallocated Space Entry (ECMA 167r3 4/14.11) */ 726/* Unallocated Space Entry (ECMA 167r3 4/14.11) */
727struct unallocSpaceEntry { 727struct unallocSpaceEntry {
728 tag descTag; 728 tag descTag;
729 icbtag icbTag; 729 icbtag icbTag;
730 __le32 lengthAllocDescs; 730 __le32 lengthAllocDescs;
731 uint8_t allocDescs[0]; 731 uint8_t allocDescs[0];
732} __attribute__ ((packed)); 732} __attribute__ ((packed));
733 733
734/* Space Bitmap Descriptor (ECMA 167r3 4/14.12) */ 734/* Space Bitmap Descriptor (ECMA 167r3 4/14.12) */
735struct spaceBitmapDesc { 735struct spaceBitmapDesc {
736 tag descTag; 736 tag descTag;
737 __le32 numOfBits; 737 __le32 numOfBits;
738 __le32 numOfBytes; 738 __le32 numOfBytes;
739 uint8_t bitmap[0]; 739 uint8_t bitmap[0];
740} __attribute__ ((packed)); 740} __attribute__ ((packed));
741 741
742/* Partition Integrity Entry (ECMA 167r3 4/14.13) */ 742/* Partition Integrity Entry (ECMA 167r3 4/14.13) */
743struct partitionIntegrityEntry { 743struct partitionIntegrityEntry {
744 tag descTag; 744 tag descTag;
745 icbtag icbTag; 745 icbtag icbTag;
746 timestamp recordingDateAndTime; 746 timestamp recordingDateAndTime;
747 uint8_t integrityType; 747 uint8_t integrityType;
748 uint8_t reserved[175]; 748 uint8_t reserved[175];
749 regid impIdent; 749 regid impIdent;
750 uint8_t impUse[256]; 750 uint8_t impUse[256];
751} __attribute__ ((packed)); 751} __attribute__ ((packed));
752 752
753/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */ 753/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */
@@ -764,46 +764,46 @@ struct partitionIntegrityEntry {
764 764
765/* Logical Volume Header Descriptor (ECMA 167r3 4/14.15) */ 765/* Logical Volume Header Descriptor (ECMA 167r3 4/14.15) */
766struct logicalVolHeaderDesc { 766struct logicalVolHeaderDesc {
767 __le64 uniqueID; 767 __le64 uniqueID;
768 uint8_t reserved[24]; 768 uint8_t reserved[24];
769} __attribute__ ((packed)); 769} __attribute__ ((packed));
770 770
771/* Path Component (ECMA 167r3 4/14.16.1) */ 771/* Path Component (ECMA 167r3 4/14.16.1) */
772struct pathComponent { 772struct pathComponent {
773 uint8_t componentType; 773 uint8_t componentType;
774 uint8_t lengthComponentIdent; 774 uint8_t lengthComponentIdent;
775 __le16 componentFileVersionNum; 775 __le16 componentFileVersionNum;
776 dstring componentIdent[0]; 776 dstring componentIdent[0];
777} __attribute__ ((packed)); 777} __attribute__ ((packed));
778 778
779/* File Entry (ECMA 167r3 4/14.17) */ 779/* File Entry (ECMA 167r3 4/14.17) */
780struct extendedFileEntry { 780struct extendedFileEntry {
781 tag descTag; 781 tag descTag;
782 icbtag icbTag; 782 icbtag icbTag;
783 __le32 uid; 783 __le32 uid;
784 __le32 gid; 784 __le32 gid;
785 __le32 permissions; 785 __le32 permissions;
786 __le16 fileLinkCount; 786 __le16 fileLinkCount;
787 uint8_t recordFormat; 787 uint8_t recordFormat;
788 uint8_t recordDisplayAttr; 788 uint8_t recordDisplayAttr;
789 __le32 recordLength; 789 __le32 recordLength;
790 __le64 informationLength; 790 __le64 informationLength;
791 __le64 objectSize; 791 __le64 objectSize;
792 __le64 logicalBlocksRecorded; 792 __le64 logicalBlocksRecorded;
793 timestamp accessTime; 793 timestamp accessTime;
794 timestamp modificationTime; 794 timestamp modificationTime;
795 timestamp createTime; 795 timestamp createTime;
796 timestamp attrTime; 796 timestamp attrTime;
797 __le32 checkpoint; 797 __le32 checkpoint;
798 __le32 reserved; 798 __le32 reserved;
799 long_ad extendedAttrICB; 799 long_ad extendedAttrICB;
800 long_ad streamDirectoryICB; 800 long_ad streamDirectoryICB;
801 regid impIdent; 801 regid impIdent;
802 __le64 uniqueID; 802 __le64 uniqueID;
803 __le32 lengthExtendedAttr; 803 __le32 lengthExtendedAttr;
804 __le32 lengthAllocDescs; 804 __le32 lengthAllocDescs;
805 uint8_t extendedAttr[0]; 805 uint8_t extendedAttr[0];
806 uint8_t allocDescs[0]; 806 uint8_t allocDescs[0];
807} __attribute__ ((packed)); 807} __attribute__ ((packed));
808 808
809#endif /* _ECMA_167_H */ 809#endif /* _ECMA_167_H */